Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.183.89] |
|
Сообщ.
#1
,
|
|
|
Привет!
Как мне программно нажать ALT + буква(VK_...) в другом приложении. Хендл я нашел, деляю так SendMessage(Handle_, WM_KEYDOWN, VK_MENU,0); SendMessage(Handle_, WM_KEYDOWN, VK_F1,0); SendMessage(Handle_, WM_KEYUP, VK_F1,0); но у меня не получается, что не так? |
Сообщ.
#2
,
|
|
|
Попробуй так
SendMessage(Handle,WM_KEYDOWN,Byte(C),$20000001); У меня получилось! |
Сообщ.
#3
,
|
|
|
спасибо, вот есть еще такое:
Procedure PostKeyEx( hWindow: HWnd; key: Word; Const shift: TShiftState; specialkey: Boolean ); Type TBuffers = Array [0..1] of TKeyboardState; Var pKeyBuffers : ^TBuffers; lparam: LongInt; Begin (* check if the target window exists *) If IsWindow(hWindow) Then Begin (* set local variables to default values *) pKeyBuffers := Nil; lparam := MakeLong(0, MapVirtualKey(key, 0)); (* modify lparam if special key requested *) If specialkey Then lparam := lparam or $1000000; (* allocate space for the key state buffers *) New(pKeyBuffers); try (* Fill buffer 1 with current state so we can later restore it. Null out buffer 0 to get a "no key pressed" state. *) GetKeyboardState( pKeyBuffers^[1] ); FillChar(pKeyBuffers^[0], Sizeof(TKeyboardState), 0); (* set the requested modifier keys to "down" state in the buffer *) If ssShift In shift Then pKeyBuffers^[0][VK_SHIFT] := $80; If ssAlt In shift Then Begin (* Alt needs special treatment since a bit in lparam needs also be set*) pKeyBuffers^[0][VK_MENU] := $80; lparam := lparam or $20000000; End; If ssCtrl In shift Then pKeyBuffers^[0][VK_CONTROL] := $80; If ssLeft In shift Then pKeyBuffers^[0][VK_LBUTTON] := $80; If ssRight In shift Then pKeyBuffers^[0][VK_RBUTTON] := $80; If ssMiddle In shift Then pKeyBuffers^[0][VK_MBUTTON] := $80; (* make out new key state array the active key state map *) SetKeyboardState( pKeyBuffers^[0] ); (* post the key messages *) If ssAlt In Shift Then Begin PostMessage( hWindow, WM_SYSKEYDOWN, key, lparam); PostMessage( hWindow, WM_SYSKEYUP, key, lparam or $C0000000); End Else Begin PostMessage( hWindow, WM_KEYDOWN, key, lparam); PostMessage( hWindow, WM_KEYUP, key, lparam or $C0000000); End; (* process the messages *) Application.ProcessMessages; (* restore the old key state map *) SetKeyboardState( pKeyBuffers^[1] ); finally (* free the memory for the key state buffers *) If pKeyBuffers <> Nil Then Dispose( pKeyBuffers ); End; { If } End; End; { PostKeyEx } |
Сообщ.
#4
,
|
|
|
M Тема перенесена из Delphi -> Delphi: Система, Windows API |