Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 禁止移动带有某些标题的窗口_C_Winapi_Hook - Fatal编程技术网

C 禁止移动带有某些标题的窗口

C 禁止移动带有某些标题的窗口,c,winapi,hook,C,Winapi,Hook,我需要禁止带有标题的窗口移动。 //Hooks.cpp:定义DLL应用程序的导出函数。 // #包括“stdafx.h” 外部“C”uu declspec(dllexport)TCHAR s[50]; 外部“C”uuu declspec(dllexport)HHOOK HHOOK; 外部“C”uu declspec(dllexport)LRESULT回调CBTProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM); int WINAPI DllEntryPoint

我需要禁止带有标题的窗口移动。 //Hooks.cpp:定义DLL应用程序的导出函数。 //

#包括“stdafx.h”
外部“C”uu declspec(dllexport)TCHAR s[50];
外部“C”uuu declspec(dllexport)HHOOK HHOOK;
外部“C”uu declspec(dllexport)LRESULT回调CBTProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM);
int WINAPI DllEntryPoint(HINSTANCE hinst,无符号长原因,void*lpReserved)
{
返回1;
}
tchars[50];
哈哈哈哈;
LRESULT回调CBTProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM)
{
//HDC-HDC;
if(nCode<0)
返回CallNextHookEx(hHook、nCode、wParam、lParam);
//hdc=GetDC(hWnd);
CBT_CREATEWND*CBT=(CBT_CREATEWND*)lParam;
if(nCode==HCBT_MOVESIZE)
如果(!lstrcmp(s,cbt->lpcs->lpszName))返回1;
返回CallNextHookEx(hHook、nCode、wParam、lParam);
返回0;
} 

但我移动窗口时出错了。当我改变它的位置时,它会改变,但随后我在module Hooks.dll(我的dll)中的地址67471040处遇到了错误访问冲突。读取地址00000116您正在将
lParam
转换为指向
CBT_CREATEWND
的指针,但只有当
nCode==HCBT\u CREATEWND
时才会发生这种情况,显然不是这样。当
nCode==HCBT\u MOVESIZE
时,lParam指向
RECT
结构

您应该首先处理
HCBT\u CREATEWND
,过滤它并保存相关的HWND,以在发生
HCBT\u MOVESIZE
时生成条件。 但是,如果窗口更改了标题,这将不起作用


顺便说一句,你不能直接调用
GetWindowText()
来获取窗口标题吗?

你如何初始化“s”?钩子DLL被分别加载到每个进程中,因此您不能只在主进程中设置“s”,您必须分别将值传递给每个DLL实例,可能使用某种共享内存。我的猜测是,这里的s是未初始化的,因此lstrcmp中发生了错误。这是问题的缩影,对任何人都没有帮助;投票结束,因为太本地化了。如果你认为
s
是问题所在,为什么不在实际的钩子回调中声明并初始化它,看看这是否解决了问题
#include "stdafx.h"

extern "C" __declspec(dllexport) TCHAR s[50];
extern "C" __declspec(dllexport) HHOOK hHook;
extern "C" __declspec(dllexport) LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam);

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}

TCHAR s[50];
HHOOK hHook;

LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
//   HDC hdc;
if (nCode < 0)  
    return CallNextHookEx(hHook, nCode, wParam, lParam);

//  hdc = GetDC(hWnd);
CBT_CREATEWND* cbt=(CBT_CREATEWND*)lParam;
if (nCode==HCBT_MOVESIZE)
    if (!lstrcmp(s,cbt->lpcs->lpszName)) return 1; 
return CallNextHookEx(hHook, nCode, wParam, lParam); 
return 0; 
}