Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

Отправить сообщение неактивному окну   Найти похожие ветки 

 
НовичОк ©   (2004-10-09 01:57) [0]

Как можно отправить сообщение неактивному окну на примере нажатия клавиш?

Procedure PostKeyEx(hWindow: HWnd; key: Word; Const shift: TShiftState; specialkey: Boolean );
Type
 TBuffers = Array [0..1] of TKeyboardState;
Var
 pKeyBuffers : ^TBuffers;
 lparam: LongInt;
Begin
If IsWindow(hWindow) Then
Begin
  pKeyBuffers := Nil;
  lparam := MakeLong(0, MapVirtualKey(key, 0));
  If specialkey Then lparam := lparam or $1000000;
  New(pKeyBuffers);
  try
   AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessID(hWindow, nil), True);
   GetKeyboardState( pKeyBuffers^[1] );
   FillChar(pKeyBuffers^[0], Sizeof(TKeyboardState), 0);
   If ssShift In shift Then pKeyBuffers^[0][VK_SHIFT] := $80;
   If ssAlt In shift Then
   Begin
     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;
   SetKeyboardState( pKeyBuffers^[0] );
   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;
   Application.ProcessMessages;
   Sleep(100);
   SetKeyboardState( pKeyBuffers^[1] );
   AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessID(hWindow, nil), False);
  finally
    If pKeyBuffers <> Nil Then Dispose( pKeyBuffers );
  End;
End;
End;

procedure TMainForm.Button1Click(Sender: TObject);
begin
 PostKeyEx(findwindow(nil,pchar(prog)), vk_f4, [ssalt], False );
end;


 
BillyJeans   (2004-10-09 13:32) [1]

при отправке сообщения окну нет разницы активно оно или нет...



Страницы: 1 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
4-1097472987
Ozone
2004-10-11 09:36
2004.11.21
AVIStreamRead - проблемы


4-1097331218
maxistent
2004-10-09 18:13
2004.11.21
wm_GetText ???


1-1100006224
eugene32
2004-11-09 16:17
2004.11.21
Gde mojno nayti infu po rabote s Excel iz Delphi?


1-1099987827
Dmitrij_K
2004-11-09 11:10
2004.11.21
Динамические массивы


8-1091519717
parovoZZ
2004-08-03 11:55
2004.11.21
Флипинг и блитинг