Eli*_*sha 3 c c++ hook winapi setwindowshookex
我正试图"拉伸"现有的应用程序.
目标是在不更改该应用程序的代码的情况下使现有应用程序变得更大.
cosntraint是拉伸的应用程序不会"注意"它,因此如果应用程序查询创建的窗口大小,它将看到原始大小而不是调整大小.
我设法使用SetWindowsHookEx以下方法调整窗口大小:
HHOOK hMessHook = SetWindowsHookEx(WH_CBT,CBTProc, hInst, 0);
Run Code Online (Sandbox Code Playgroud)
和:
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);
}
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,我无法让拉伸的应用程序看到原始大小.
例如,如果创建了.NET表单:
public class SimpleForm : Form
{
public SimpleForm()
{
Width = 100;
Height = 200;
}
}
Run Code Online (Sandbox Code Playgroud)
稍后查询大小:
void QuerySize(SimpleForm form)
{
int width = form.Width;
int height = form.Height;
}
Run Code Online (Sandbox Code Playgroud)
我想width和height是100和200,而不是调整值.我无法找到查询现有窗口大小的右钩子.
挂钩窗口大小查询的正确方法是什么?
不幸的是,窗口大小的查询不是由消息处理的 - 它们是直接的API调用,例如GetWindowRect- 因此它们不能被标准Windows挂钩拦截.您可能需要查看Detours API,它允许您挂钩任意Win32函数.(你可以在这里找到关于Detours的教程)
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |