Private Declare Sub keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Я сам не пробовал, но думаю эта функция - то что надо.
У нее много констант. Открой API text viewer -> загрузи Win32API.txt и в комбобоксе выбери Constants. Там будут константы, начинающиеся с vk вроде
' Пoсылка клавиши Public Function SendKey(ByVal hWnd As Long, _ ByVal bChar As Byte, _ Optional ByVal Shift As ShiftConstants) As Long Dim OldWnd As Long
If hWnd = &HFFFF Then SendKey = &HFFFF: Exit Function
If Not hWnd = &H0 Then ' Сначала делаем активным нужное окошко OldWnd = GetForegroundWindow() SendKey = SetForegroundWindow(hWnd) Call Sleep(500) End If ' Далее нажимаем на кнопки If (Shift And vbAltMask) = vbAltMask Then Call keybd_event(&HA4, &H45, &H1 Or &H0, &H0) If (Shift And vbCtrlMask) = vbCtrlMask Then Call keybd_event(&HA2, &H45, &H1 Or &H0, &H0) If (Shift And vbShiftMask) = vbShiftMask Then Call keybd_event(&HA0, &H45, &H1 Or &H0, &H0)
If Not SendKey = &H0 Then ' Отсылаем клавишу Call keybd_event(bChar, &H45, &H1 Or &H0, &H0) Call keybd_event(bChar, &H45, &H1 Or &H2, &H0) End If ' Восстанавливаем былые значения кнопок If Shift And vbAltMask = Shift Then Call keybd_event(&HA4, &H45, &H1 Or &H2, &H0) If Shift And vbCtrlMask = Shift Then Call keybd_event(&HA2, &H45, &H1 Or &H2, &H0) If Shift And vbShiftMask = Shift Then Call keybd_event(&HA0, &H45, &H1 Or &H2, &H0)
Хи, я тоже бился с этой проблеммой... Даже эмулировал нажатия (SendMessage'ем) сначала WM_KEYDOWN, потом WM_CHAR и WM_KEYUP, но ничего не получалось, точнее где-то получалось, а где-то нет... В конце концов меня все закалебало и я решил прибегнуть к способу, который использует программа uICE, ее же не дураки писали, видать тоже этим вопросом задавались... В итоге получилось то что есть (см. выше)... Если кто найдет вариант, или у кого идея зародится, подскажите... может и сделаем общими силами