Форум: "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