Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.04 c
2-1162383035
Владимир71
2006-11-01 15:10
2006.11.19
РАЗМЕР ПОЛЯ


15-1161802883
Real
2006-10-25 23:01
2006.11.19
MySQL - ПО для управления или дайте скачать MySQLCC


2-1162219028
Megabyte
2006-10-30 17:37
2006.11.19
Работа с пакетами(package)


15-1162473263
Leva
2006-11-02 16:14
2006.11.19
Подскажите как решить проблему?


11-1121340015
Barloggg
2005-07-14 15:20
2006.11.19
Хочу избавиться от MCK





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский