Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.19;
Скачать: CL | DM;

Вниз

Хук на активизацию окон   Найти похожие ветки 

 
Mr tray   (2006-06-01 13:09) [0]

Здорово всем! Ребята, кто знает, как можно сделать хук на активизацию окон. А то WH_GETMESSAGE с WM_ACTIVATE не работает.


 
Игорь Шевченко ©   (2006-06-01 13:31) [1]

WH_SHELL


 
Mr tray   (2006-06-01 15:43) [2]

я тут пытаю WH_CALLWNDPROC c WM_ACTIVATE, но чего то не выходит. Вариант из Игорь Шевченко ©   (01.06.06 13:31) [1] лучше или хуже WH_CALLWNDPROC c WM_ACTIVATE. или это вообще разные вещи?


 
Mr tray   (2006-06-01 15:48) [3]

а как с помощью WH_SHELL узнать хендл активируемого окна?


 
Mr tray   (2006-06-01 15:53) [4]

всё ОК. сделал с помощью WH_CALLWNDPROC и WM_ACTIVATE


 
DVM ©   (2006-06-01 17:06) [5]


> всё ОК. сделал с помощью WH_CALLWNDPROC и WM_ACTIVATE

нерационально, лишняя нагрузка на систему.


 
Mr tray   (2006-06-01 23:52) [6]

почему лишняя?


 
DVM ©   (2006-06-02 10:05) [7]


> почему лишняя?

Каждый раз когда будет вызываться оконная процедура любого окна в системе, этот вызов будет пропускаться через ловушку. Окон сотни, сообщений тысячи.

Активацию окна лучше отслеживать ловушкой WH_SHELL


 
Mr tray   (2006-06-04 00:40) [8]

использовать HSHELL_ACTIVATESHELLWINDOW?


 
Leonid Troyanovsky ©   (2006-06-04 10:18) [9]


> Mr tray   (04.06.06 00:40) [8]
> использовать HSHELL_ACTIVATESHELLWINDOW?


HSHELL_WINDOWACTIVATED

--
Regards, LVT.


 
Mr tray   (2006-06-07 17:35) [10]

но в хелпе про HSHELL_WINDOWACTIVATED написано Windows 95 only а у меня XP


 
Игорь Шевченко ©   (2006-06-07 17:42) [11]

Mr tray   (07.06.06 17:35) [10]

Выкинь хелп

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/shellproc.asp


 
Mr tray   (2006-06-07 17:45) [12]

спасибо.

> Выкинь хелп

Я подумаю над этим предложением


 
Mr tray   (2006-06-07 17:58) [13]

И ещё. Вот что там написано (сайте мелкософта): The activation has changed to a different top-level, unowned window. Что значит top-level, unowned window?


 
Mr tray   (2006-06-07 18:03) [14]

И ещё. Где инициализируется DLL с хуком на активизацию окон, выполненным с помощью WH_SHELL?


 
Игорь Шевченко ©   (2006-06-08 10:09) [15]


> Что значит top-level, unowned window?


Которое на Taskbar"е отображается.


> Где инициализируется DLL с хуком на активизацию окон, выполненным
> с помощью WH_SHELL?


Там же, где и с любым другом хуком, при загрузке в адресное пространство процесса.


 
DVM ©   (2006-06-08 10:16) [16]

library Hooks;

{$R *.res}

uses

 Windows, Messages;

 procedure SetHooks(hWndMain: HWND); export; forward;
 procedure RemoveHooks; export; forward;

exports

 SetHooks name "SetHooks",
 RemoveHooks name "RemoveHooks";

const

 MY_WINDOWCREATED       = WM_USER + 100;
 MY_WINDOWDESTROYED     = WM_USER + 101;
 MY_WINDOWACTIVATED     = WM_USER + 102;
 MY_WINDOWREDRAW        = WM_USER + 103;
 MY_CHANGELANGUAGE      = WM_USER + 104;
 MY_GETMINRECT          = WM_USER + 105;
 MY_ACTIVATESHELLWINDOW = WM_USER + 106;

 MMFName="D218D7A0-5A95-11D8-AC31-964D7C744830.mem";

type

 PHookRec = ^THookRec;
 THookRec = packed record
   MainWindow: HWND;
   ShellHookID: HHOOK;
 end;

var

 rHookRec: PHookRec = nil;
 hMapObject: THandle = 0;

//------------------------------------------------------------------------------

function ShellHookProc(nCode: Integer; WPARAM: wParam; LPARAM: lParam): LResult; stdcall;
begin
 if nCode >= 0 then
   if rHookRec^.MainWindow <> 0 then
     case nCode of
       HSHELL_REDRAW              : PostMessage(rHookRec^.MainWindow, MY_WINDOWREDRAW, wParam, lParam);
       HSHELL_WINDOWCREATED       : PostMessage(rHookRec^.MainWindow, MY_WINDOWCREATED, wParam, lParam);
       HSHELL_WINDOWDESTROYED     : PostMessage(rHookRec^.MainWindow, MY_WINDOWDESTROYED, wParam, lParam);
       HSHELL_WINDOWACTIVATED     : SendMessage(rHookRec^.MainWindow, MY_WINDOWACTIVATED, wParam, lParam);
       HSHELL_LANGUAGE            : PostMessage(rHookRec^.MainWindow, MY_CHANGELANGUAGE, wParam, lParam);
       HSHELL_ACTIVATESHELLWINDOW : PostMessage(rHookRec^.MainWindow, MY_ACTIVATESHELLWINDOW, wParam, lParam);
     end;
 result := CallNextHookEx(rHookRec^.ShellHookID, nCode, wParam, lParam);
end;

//------------------------------------------------------------------------------

procedure SetHooks(hWndMain: HWND);
begin
 if hWndMain = 0 then exit;
 rHookRec^.MainWindow := hWndMain;
 rHookRec^.ShellHookID := SetWindowsHookEx(WH_SHELL, @ShellHookProc, hInstance, 0);
end;

//------------------------------------------------------------------------------

procedure RemoveHooks;
begin
 UnHookWindowsHookEx(rHookRec^.ShellHookID);
end;

//------------------------------------------------------------------------------

procedure EntryPointProc(Reason: Integer);
begin
 case reason of
   DLL_PROCESS_ATTACH:
     begin
       hMapObject := CreateFileMapping(INVALID_HANDLE_VALUE,
                                       nil,
                                       PAGE_READWRITE,
                                       0,
                                       SizeOf(THookRec),
                                       MMFName);
       if hMapObject = 0 then
         begin
           MessageBox(0, "Can""t create FileMapping", "Error!", 0);
           exit;
         end;
       rHookRec := MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(THookRec));
       if rHookRec = nil then
         begin
           CloseHandle(hMapObject);
           MessageBox(0, "Can""t make MapViewOfFile", "Error!", 0);
           exit;
         end;
     end;
   DLL_PROCESS_DETACH:
      begin
        UnMapViewOfFile(rHookRec);
        CloseHandle(hMapObject);
      end;
 end; // case
end;

//------------------------------------------------------------------------------

begin
 DllProc := @EntryPointProc;
 EntryPointProc(DLL_PROCESS_ATTACH);
end.


 
Сашка   (2006-07-05 13:18) [17]

Ребят, привет всем! Нужна помощь
Окна у меня активизвруются при наведении курсора, без щелчка мыши..
Скалько не искал, никак не могу убрать (винда ХР)
Спасибо заранее



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

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

Наверх




Память: 0.51 MB
Время: 0.036 c
2-1162464612
dmdel
2006-11-02 13:50
2006.11.19
вертикальные заголовки в StringGride


2-1162579706
strumpf
2006-11-03 21:48
2006.11.19
Стрелка скроллинга в TPageScroller


2-1162308301
daser
2006-10-31 18:25
2006.11.19
Что неправильно в строке?


6-1149759399
kekc
2006-06-08 13:36
2006.11.19
Локальный чат...!ПОМОГИТЕ!


4-1152280704
kilonet
2006-07-07 17:58
2006.11.19
handle поля Edit в стандартном диалоге "Сохранить как"...