挂钩 Win32 窗口创建/调整大小/查询大小

2024-04-14

我正在尝试“扩展”现有的应用程序。

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

我设法使用调整窗口大小SetWindowsHookEx:

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

And:

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;
}

我想要width and height be 100 and 200而不是调整大小的值。我无法找到查询现有窗口大小的正确钩子。

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


不幸的是,窗口大小的查询不是由消息处理的——它们是直接的 API 调用,例如GetWindowRect http://msdn.microsoft.com/en-us/library/ms633519%28v=vs.85%29.aspx——因此它们不能被标准 Windows 挂钩拦截。您可能想查看绕路API http://research.microsoft.com/en-us/projects/detours/,它允许您挂钩任意 Win32 函数。 (你可以找到关于 Detours 的教程here http://www.codeproject.com/KB/DLL/funapihook.aspx)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

挂钩 Win32 窗口创建/调整大小/查询大小 的相关文章

随机推荐