Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хуки всегда так тормозят систему? [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);


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо