Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Как отследить нажатие в окно моего процесса?


Автор: lollollollol 19.4.2014, 22:32
Есть приложение, полностью написаное на WinAPI.
Когда фокус на форме этого приложения, пользователь может нажать какую либо клавишу на клавиатуре - как отследить любое нажатие клавиши?

ну и для себя сделать так - Вот выделил форму, нажал клавишу, получил messagebox с символом, который нажал(это мне чтобы разобраться для начала)


Может есть какая апи функция? я не нашел.

Пвторюсь, нужно получить нажатия клавиатуры только при вводе в моё окно(любое, окон в одном exe может быть много).

Автор: Poseidon 19.4.2014, 22:57
Отлавливать WM_KEYDOWN пробовал?

Автор: lollollollol 20.4.2014, 06:54
как? форма на апи сделана

Код

var
  thID: integer;
  tid:cardinal;
begin
  Window:=True;
  wc.cbSize := SizeOf(TWndClassEx);                                             // заполнение стpуктуpы wc
  wc.style := CS_VREDRAW or CS_HREDRAW;                                         //стиль (комбинация стилей) окна
  wc.lpfnWndProc := @WindowProc;                                     
  wc.cbClsExtra := 0;                                                       
  wc.cbWndExtra := 0;                                                       
  wc.hInstance := HInstance;                                               
  wc.hIcon := LoadIcon(0, IDI_APPLICATION);                              
  wc.hCursor := LoadCursor(0, IDC_ARROW);                                    
  wc.hbrBackground := COLOR_WINDOW + 1;                                 
  wc.lpszMenuName := nil;                                                   
  wc.lpszClassName := ClassName;                                           
  RegisterClassEx(wc);
  MainWnd := CreateWindowEx(0,ClassName,AppName,WS_OVERLAPPEDWINDOW,Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT),0,0,HInstance,nil);
  ThID:=CreateThread(nil,0,@MyWindow,Pointer(MainWnd),0,tid);                
  CloseHandle(ThID);
  ShowWindow(MainWnd, SW_SHOWNORMAL);                              
  UpdateWindow(MainWnd);                                               
  while (GetMessage(Msg, 0,0,0)=True) do begin
    windows.TranslateMessage(Msg);
    windows.DispatchMessage(Msg);
  end;



Причём формы две, а не в поток просто нужно получить все нажатия, на любую из моих форм

Автор: Poseidon 20.4.2014, 22:31
Цитата(lollollollol @  20.4.2014,  06:54 Найти цитируемый пост)
как? форма на апи сделана
Как-то http://www.redov.ru/kompyutery_i_internet/o_chyom_ne_pishut_v_knigah_po_delphi/p3.php#metkadoc8

Автор: -Сергей- 22.4.2014, 10:43
Где главная оконная процедура?
надо добавить туда обработку
Код

case Msg of
  WM_KEYDOWN:
    begin
      MessageBox(0, 'WM_KEYDOWN', 'Caption', MB_OK);
      Exit;
    end;
end; 

Автор: Poseidon 23.4.2014, 00:07
-Сергей-, ты мою ссылку читал? Там даже в примере WM_KEYDOWN описывается.

Автор: -Сергей- 23.4.2014, 04:51
Цитата(Poseidon @ 23.4.2014,  04:07)
-Сергей-, ты мою ссылку читал? Там даже в примере WM_KEYDOWN описывается.

Не смог открыть, на тот момент у меня был высокий таймаут

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)