Подключение Windows Win32 создание / изменение размера / запрос размеров - PullRequest
3 голосов
/ 05 марта 2011

Я пытаюсь «растянуть» существующее приложение.

Цель - увеличить существующее приложение без изменения кода этого приложения.
Cosntraint заключается в том, что растянутое приложение не будет "замечать" его, поэтому, если приложение запросит размер созданного окна, оно увидит исходный размер, а не измененный размер.окна, использующие SetWindowsHookEx:

HHOOK hMessHook = SetWindowsHookEx(WH_CBT,CBTProc, hInst, 0);

И:

LRESULT CALLBACK CBTProc( __in  int nCode,
                          __in  WPARAM wParam, 
                          __in  LPARAM lParam)
{
   if (HCBT_CREATEWND == nCode)
   {
      CBT_CREATEWND *WndData = (CBT_CREATEWND*) lParam;
      // Calculate newWidth and newHeight values...
      WndData->lpcs->cx = newWidth;
      WndData->lpcs->cy = newHeight;
   }

   CallNextHookEx(hMessHook, nCode, wParam, lParam);
}

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу растянутьПриложение см. в исходных размерах.

Например, если создается форма .NET:

public class SimpleForm : Form
{
    public SimpleForm()
    {
        Width = 100;
        Height = 200;
    }
}

А позже запрашивается размер:

void QuerySize(SimpleForm form)
{
   int width = form.Width;
   int height = form.Height;
}

I 'd width и height be 100 и 200, а не измененные значения.Мне не удалось найти правильный крючок, который запрашивает размер существующего окна.

Как правильно перехватить запрос размера окна?

1 Ответ

7 голосов
/ 05 марта 2011

К сожалению, запросы на размер окна не обрабатываются сообщениями - это прямые вызовы API, такие как GetWindowRect - поэтому они не могут быть перехвачены стандартными хуками Windows.Возможно, вы захотите взглянуть на Detours API , который позволяет подключать произвольные функции Win32.(Вы можете найти учебник по обходам здесь )

...