3

我正在尝试“拉伸”现有应用程序。

目标是在不更改该应用程序代码的情况下使现有应用程序变得更大。
一个缺点是拉伸的应用程序不会“注意到”它,因此如果应用程序查询创建的窗口大小,它将看到原始大小而不是调整后的大小。

我设法使用以下方法调整窗口大小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;
}

我想要widthheight成为100200不是调整大小的值。我找不到查询现有窗口大小的正确钩子。

挂钩窗口大小查询的正确方法是什么?

4

1 回答 1

7

不幸的是,窗口大小的查询不是由消息处理的——它们是直接的 API 调用,比如GetWindowRect——所以它们不能被标准的 Windows 钩子截获。您可能想查看Detours API,它允许您挂钩任意 Win32 函数。(你可以在这里找到关于 Detours 的教程)

于 2011-03-05T16:08:57.403 回答