加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:33:06 所属栏目:百科 来源:网络整理
导读:我正试图“拉伸”现有的应用程序. 目标是在不更改该应用程序的代码的情况下使现有应用程序变得更大. cosntraint是拉伸的应用程序不会“注意”它,因此如果应用程序查询创建的窗口大小,它将看到原始大小而不是调整大小. 我设法使用SetWindowsHookEx调整窗口大
我正试图“拉伸”现有的应用程序.

目标是在不更改该应用程序的代码的情况下使现有应用程序变得更大.
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;
}

我希望宽度和高度分别为100和200而不是调整大小的值.我无法找到查询现有窗口大小的右钩子.

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

解决方法

不幸的是,窗口大小的查询不是由消息处理的 – 它们是直接的API调用,例如 GetWindowRect – 因此它们不能被标准Windows挂钩拦截.您可能需要查看 Detours API,它允许您挂钩任意Win32函数. (你可以找到关于Detours here的教程)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读