![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Привет, друг. Есть сторонний exe, в нем мне нужно перехватить нужную WinApi функцию, а именно ту которая в определенный момент разварачивает окно программы. Как это сделать? ЛЮБЫЕ ИДЕИ, ДРУГ!!
![]() Я написал код перехвата, не могу именно понять какую функцию перехватывать! Как отследить? |
|
#2
|
||||
|
||||
|
Нужно перехватывать сообщение WM_SYSCOMMAND - SC_MAXIMIZE. Ловушкой на оконную процедуру.
|
|
#3
|
|||
|
|||
|
Как? Можно пример поджалуйста.
|
|
#4
|
|||
|
|||
|
Получилось! Но как то на половину. Код:
Код:
function CBT_FUNC(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
const
WindowNameBufferSize = 1024;
var
hWindow: HWND;
RetVal : Integer;
WindowNameBuffer: Array[0..WindowNameBufferSize-1] of Char;
dwInvokerHandle:DWORD;
begin
//Result := CallNextHookEx(hhk, nCode, wParam, lParam);
if nCode<0 then exit;
case nCode of
HCBT_SYSCOMMAND:
begin
dwInvokerHandle := FindWindow(nil, 'HotShot 12');
if WParam = SC_RESTORE then
begin
//Sleep();
//ShowWindow(dwInvokerHandle, SW_HIDE);
//ShowMessage('1');
//PostMessage(dwInvokerHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
SendMessage(dwInvokerHandle, WM_SHOWWINDOW, SW_HIDE, SW_PARENTCLOSING);
end;
end;
end;
Result := CallNextHookEx(hhk, nCode, wParam, lParam);
end;Теперь эффект однозначно есть, но программа всеравно выполняет функцию разворачивания окна, получается я могу только отследить момент разворачивания, а не перехватить? Последний раз редактировалось PiksEva, 14.12.2017 в 10:52. |