09.11.2007, 11:56
|
Прохожий
|
|
Регистрация: 25.07.2007
Сообщения: 8
Репутация: 10
|
|
ну вот смотри как я решил этот вопрос:
Код:
var
CWND,LastWnd:HWND;
SzKeyName, WindowName: array [0..127] of char
{...}
CWnd:=GetForegroundWindow;
GetWindowText(CWnd, SzKeyName, SizeOf(SzKeyName));
И ещё могу предложить функцию низкоуровневого хука на клавиатуру и мыши(без использования dll):
клавиатура
Код:
var
kHook: THandle;
iVKey:integer;
sVKey:string;
procedure KeyAction;
begin
// do sth
end;
function LowLevelKeyboardProc(nCode: Integer;
WParam: WPARAM; LParam: LPARAM): LRESULT stdcall;
type
PKbdDllHookStrukt = ^TKbdDllHookStrukt;
_KBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: PDWORD;
end;
TKbdDllHookStrukt = _KBDLLHOOKSTRUCT;
const
RPT_WPARAM_DATA = '%s';
RPT_LPARAM_DATA = '%d';
var
StrResult: String;
begin
StrResult := '';
if nCode = HC_ACTION then
Result := CallNextHookEx(kHook, nCode, WParam, LParam);
case WParam of
WM_KEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']);
WM_SYSKEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']);
end;
StrResult := Format(RPT_LPARAM_DATA, [PKbdDllHookStrukt(LParam)^.vkCode]);
if (Wparam=WM_KEYUP) or (Wparam=WM_SYSKEYUP) then strresult:='';
sVKey:=strresult;
if strresult<>'' then
iVKey:=strtoint(strresult) //Получаем iVKey нажатой клавиши
else iVKey:=0;
KeyAction;
end;
procedure InstallKeyBoardHook;
const
WH_KEYBOARD_LL = 13;
begin
kHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
if kHook = 0 then RaiseLastOSError;
end;
procedure RemoveKeyBoardHook;
begin
if not UnhookWindowsHookEx(kHook) then RaiseLastOSError;
end;
мышь
Код:
const
WH_MOUSE_LL = 14;
tagMSLLHOOKSTRUCT = packed record
pt : TPoint;
mouseData : DWord;
flags : DWord;
time : DWord;
dwExtraInfo : PDWord;
end;
tMSLLHOOKSTRUCT = tagMSLLHOOKSTRUCT;
PMSLLHOOKSTRUCT = ^TMSLLHOOKSTRUCT;
var
mHook:HHook;
Mpt:TPoint;;
{...}
function LowLevelMouseProc(nCode:integer;wP: WPARAM ; lP:LPARAM):LRESULT; stdcall;
var
MS:PMSLLHOOKSTRUCT;
begin
if nCode<0 then
begin
Result:=CallNextHookEx(mHook,nCode,wP,lP);
exit;
end;
if wP = WM_MOUSEMOVE then //когда мышь побежала-побежала...
begin
MS:=PMSLLHOOKSTRUCT(lP);
mPt.x:=MS^.pt.X; //получаем Х-координату мыши
mPt.y:=MS^.pt.Y; //получаем У-координату мыши
end;
Case wP of
WM_LButtonDown: begin //когда нажали левую кнопку мыши
//
end;
WM_LButtonUp: begin //отпустили
//
end;
WM_RButtonDown: begin //когда нажали правую кнопку мыши
//
end;
WM_RButtonUp: begin //отпустили
//
end;
WM_MButtonDown: begin //среднюю нажали
//
end;
WM_MButtonUp: begin //отпустили
//
end;
WM_MouseWheel: begin //манипуляции и колесиком
//
end else begin //когда не WM_MOUSEWHEEL
//
end;
end;
Result:=CallNextHookEx(mHook,nCode,wP,lP);
end;
procedure InstallMouseHook; //процедура инициализации хука
begin
mHook:=SetWindowsHookEx(WH_MOUSE_LL,@LowLevelMouseProc, HInstance, 0);
end;
procedure RemoveMouseHook; //деинициализация хука
begin
UnhookWindowsHookEx(mHook);
end;
|