Вниз
Скачать: CL | DM;

Хуки всегда так тормозят систему?   Найти похожие ветки 

← →
andruxa   (2004-05-21 11:44) [0]

Поставил хук на 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-21 11:55) [1]


> Поставил хук на wh_getmessage


И внутри него говоришь:


>  getmessage(aaa,0,0,0);


Отгадай с трех раз, что будет в этом случае ?


← →
Stany ©   (2004-05-21 12:28) [2]

Вот 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 он глобальный


← →
BillyJeans   (2004-05-21 14:28) [3]

Удалено модератором
Примечание: Offtopic


← →
имя   (2004-05-22 16:21) [4]

Удалено модератором



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.019 c
14-1087023505
GuAV
2004-06-12 10:58
2004.07.04
Какие там компоненты.


1-1087875404
Andrey V.
2004-06-22 07:36
2004.07.04
RadioButtons as RadioGroup


1-1087839537
san
2004-06-21 21:38
2004.07.04
TreeView


14-1087172955
Nicon
2004-06-14 04:29
2004.07.04
Приватизация


14-1087114919
[NIKEL]
2004-06-13 12:21
2004.07.04
Привет народ!




   Наверх