Форум: "WinAPI";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
ВнизКак правильно анализировать сообщения WM_CHAR ? Найти похожие ветки
← →
Dwemer (2003-07-16 03:27) [0]У меня в dll стоит хук на WH_GETMESSAGE, затем я отбираю сообщение WM_CHAR. И все бы ничего, но пока эта dll загружена, все (абсолютно все, даже Explorer) програмы еррорятся ("... обратилась к участку памяти по адресу...... который не может быть write") и в самой библиотеке такие-же ерроры. Подскажите пожалуйста что я делаю не так, вот код:
library keyhook;
uses
WinTypes,
// SysUtils,
Messages;
const
MMFName: PChar = "KeyMMF";
type
PGlobalDLLData = ^TGlobalDLLData;
TGlobalDLLData = packed record
SysHook: hHook;
MyAppWnd: HWND;
end;
var
GlobalData: PGlobalDLLData;
MMFHandle: THandle;
WM_MYKEYHOOK: Cardinal;
m: TMsg;
ch: char;
st: string[10];
F: Text;
procedure log;
begin
Write(F, st);
Flush(F);
end;
function GetMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
AppWnd: HWND;
begin
if code < 0 then
begin
Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Exit;
end;
m := TMSG((Pointer(lparam))^);
if m.message = WM_CHAR then
begin
ch:=chr(m.wParam);
write(F, ch);
flush(F);
//SendMessage(GlobalData^.MyAppWnd, WM_MYKEYHOOK, m.wParam, AppWnd);
end;
CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Result:= 0;
end;
procedure hook(switch : Boolean; hMainProg: HWND) export; stdcall;
begin
if switch=true then
begin
GlobalData^.SysHook := SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, HInstance, 0);
GlobalData^.MyAppWnd:= hMainProg;
if GlobalData^.SysHook <> 0 then
MessageBox(0, "KEYBOARD HOOK
← →
Dwemer (2003-07-16 15:53) [1]Хелп ми плииз!!!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.017 c