Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

событие wm_KeyDown   Найти похожие ветки 

 
juiceman ©   (2004-04-16 22:38) [0]

Из справочника по сообщениям:
wm_KeyDown
Уведомляет окно с фокусом, что была нажата несистемная клавиша.

Пытаюсь обрабатывать это сообщение - ничего не получается. Код:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
 private
   { Private declarations }
 public
   { Public declarations }
 protected
   Procedure WMGetCommand(var Message : TMessage); message wm_KeyDown;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMGetCommand(var Message : TMessage);
Begin
 ListBox1.Items.Add("Нажата клавиша!");
end;

end.

Другие варианты просьба не предлагать, тут надо сделать именно так (предполагается отлов нажатий в чужом окне, причем через CallWndProc)


 
drpass ©   (2004-04-16 23:32) [1]

Оно уже и так обрабатывается средствами VCL


 
DVM ©   (2004-04-16 23:34) [2]

Оно приходит окну объекта Application, и он его передает другим окнам в другом виде.


 
Гаврила   (2004-04-16 23:49) [3]

Так ты про чужое окно говоришь-то, или про свое ?


 
Jack128 ©   (2004-04-16 23:49) [4]

Почему не работает так как ты написал:
Потому, что у тя на форме наверника есть другие wincontrol"ы, один из них имеет фокус, соответственно сообщение приходит к нему, а не к форме. Как надо делать? Form1.KeyPreview := True; и обрабатывать Form1.OnKeyDown почему это работает? смотрим исходники

function TWinControl.DoKeyDown(var Message: TWMKey): Boolean;
begin
...
Form := GetParentForm(Self);
if (Form <> nil) and (Form <> Self) and Form.KeyPreview and
   TWinControl(Form).DoKeyDown(Message)
then Exit;
...
end; вот если бы вместо TWinControl(Form).DoKeyDown(Message) посылалось бы сообщение wm_keydown ,то твой код работал бы..


 
juiceman ©   (2004-04-17 01:11) [5]

Растолковали очень подробно, спасибо. Но к чему я все это делал?
Есть некое приложение, события от клавиатуры в котором перехватывать не удается (ставлю глобальный хук). Подробнее можно прочитать в
Решил попробовать отлавливать хуком другого типа - WH_CALLWNDPROC. Вот код функции-фильтра:

function CallWndProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
 CWPS : ^CWPSTRUCT;
begin
if code >= 0 then
 begin
   CWPS:=Pointer(lParam);
   if CWPS^.message=WM_KeyDown then
     SendMessage(FindWindow("TForm1","Form1"),WM_USER+1, CWPS^.hwnd, 0);
 end;
 Result:= CallNextHookEx(H, Code, wParam, lParam);
end;

И ничего не отлавливалось, теперь понятно почему. Не понятно только что теперь делать :(


 
juiceman ©   (2004-04-17 01:13) [6]

Извините,
Подробнее можно прочитать в http://delphimaster.net/view/4-1081643815/



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

Форум: "WinAPI";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.029 c
3-1083660291
han-bratan
2004-05-04 12:44
2004.05.30
тип данных Мемо


14-1084269557
Alex_x
2004-05-11 13:59
2004.05.30
ASProtect, ICE license


7-1082731841
Andrew999
2004-04-23 18:50
2004.05.30
Как узнать сколько времени включен компьютер


4-1081779841
Евгения
2004-04-12 18:24
2004.05.30
Чем лучше пользоваться для работы с файлами и каталогами?


4-1082381619
Goorus
2004-04-19 17:33
2004.05.30
ClientRect





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский