Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.12.2017, 10:21
PiksEva PiksEva вне форума
Прохожий
 
Регистрация: 13.12.2017
Сообщения: 3
Версия Delphi: xe7
Репутация: 10
По умолчанию Отследить нужную WinApi функцию

Привет, друг. Есть сторонний exe, в нем мне нужно перехватить нужную WinApi функцию, а именно ту которая в определенный момент разварачивает окно программы. Как это сделать? ЛЮБЫЕ ИДЕИ, ДРУГ!!

Я написал код перехвата, не могу именно понять какую функцию перехватывать! Как отследить?
Ответить с цитированием
  #2  
Старый 13.12.2017, 12:23
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Нужно перехватывать сообщение WM_SYSCOMMAND - SC_MAXIMIZE. Ловушкой на оконную процедуру.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 14.12.2017, 00:26
PiksEva PiksEva вне форума
Прохожий
 
Регистрация: 13.12.2017
Сообщения: 3
Версия Delphi: xe7
Репутация: 10
По умолчанию

Как? Можно пример поджалуйста.
Ответить с цитированием
  #4  
Старый 14.12.2017, 10:07
PiksEva PiksEva вне форума
Прохожий
 
Регистрация: 13.12.2017
Сообщения: 3
Версия Delphi: xe7
Репутация: 10
По умолчанию

Получилось! Но как то на половину. Код:

Код:
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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:06.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter