Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.04;
Скачать: 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 вся ветка

Текущий архив: 2004.07.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.093 c
1-1087496319
lelik
2004-06-17 22:18
2004.07.04
закрытие приложения


8-1082402611
DimaK
2004-04-19 23:23
2004.07.04
Заливка


9-1045200667
Le!
2003-02-14 08:31
2004.07.04
Искуственный интелект!


9-1078922162
Delpher_Gray
2004-03-10 15:36
2004.07.04
Выдирание ресурсов из игры Князь


14-1087280962
DimKa
2004-06-15 10:29
2004.07.04
Сколько в кубометре байтов?