C++语言,SetWindowLong似乎只能设置本进程的吧?我想用全局钩子,里面加一个Sleep,但不确定钩子到底能捕获到什么,如果那一个进程开多线程的话,是否能把所有的线程都卡住?网上也没有相关资料介绍钩子的具体用法,全是自己摸索的
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#define DLL_API extern "C" _declspec(dllexport)
#include"111.h"
#include<string>
#include<fstream>
HMODULE hInstance;
std::wofstream outfile;
LRESULT CALLBACK func(int c, WPARAM w, LPARAM l)
{
if (c >= 0)
{
PMSG msg = reinterpret_cast<PMSG>(l);
//if (msg->message == WM_SYSCOMMAND)
{
TCHAR name[MAX_PATH]{};
GetModuleFileName(NULL, name, MAX_PATH);
std::wstring str(name);
outfile << str << '\t' << std::hex << msg->message << std::endl;
if (str.find(L"XXX") != str.npos)
{
Sleep(100000);
}
}
}
return CallNextHookEx(NULL, c, w, l);
}
HHOOK hHook;
DLL_API void StartHook()
{
hHook = SetWindowsHookEx(WH_GETMESSAGE, func, hInstance, 0);
}
DLL_API void StopHook()
{
if (hHook)
{
UnhookWindowsHookEx(hHook);
hHook = NULL;
}
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
outfile.open("G:\\日志.txt");
hInstance = hModule;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}