![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хуки всегда так тормозят систему? [D6, Win2k]
andruxa © (2004-05-21 11:44:00)Поставил хук на wh_getmessage все стало подтормаживать. из таскбара нажимаю на окошко, что б его раскрыть, а оно не раскрывается, пока на десктопе правой кнопой мыши не ширнешь, и проги некоторые тормозят. в хуке ни каких особых операций, findwindow, sendmessage, getmessage, на мой взгляд ничего особенного. процедура тоже корректно составлена, вроде как.
из dll
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var aaa:tmsg;
begin
if code = HC_ACTION then
begin
result:=0;
if TMsg(Pointer(lParam)^).message = WM_syscommand then
begin
getmessage(aaa,0,0,0);
if aaa.wparam=SC_MONITORPOWER then
begin
My_win:=FindWindow(nil,'messer');//ищу нужное мне окно
sendmessage(my_win,WM_USSR1, aaa.lparam,1); //передаю ему сообщение
end;
end;
end;
Result:=CallNextHookEx(SysHook, Code, wParam, lParam);
end;
вопрос. а можно реализовать хук без dll?
(2004-05-22 16:21:00) [1]Удалено модератором
BillyJeans (2004-05-21 14:28:00) [2]Удалено модератором
Примечание: Offtopic
Stany (2004-05-21 12:28:00) [3]Вот f.e. мож че не так написал, тут все работает:
library hook_dll;
uses
Hook in 'hook.pas',
exports
{global hook}
SetKeyboardHook, RemoveKeyboardHook,
begin
end.
unit Hook;
interface
uses Windows, Messages;
function SetKeyboardHook: Boolean; stdcall;
function RemoveKeyboardHook: Boolean; stdcall;
var
KeyboardHook: HHOOK;
implementation
function KeyboardProc(hCode: Integer; wParam: Longint; lParam: Longint): LRESULT; stdcall;
begin
if hCode = HC_ACTION then
if (Word(GetKeyState(VK_MENU)) and (Word(GetKeyState(VK_SHIFT)) and Word(GetKeyState(VK_CONTROL))) and $8000)<>0 then
windows.Beep(70,30);
Result := CallNextHookEx(KeyboardHook, hCode, wParam, lParam);
end;
function SetKeyboardHook: Boolean; stdcall; export;
begin
KeyboardHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0);
Result := KeyboardHook <> 0;
end;
function RemoveKeyboardHook: Boolean; stdcall; export;
begin
Result := UnhookWindowsHookEx(KeyboardHook);
end;
end.
> а можно реализовать хук без dll?
просто в dll он глобальный
Игорь Шевченко (2004-05-21 11:55:00) [4]
> Поставил хук на wh_getmessage
И внутри него говоришь:
> getmessage(aaa,0,0,0);
Отгадай с трех раз, что будет в этом случае ?