gpt4 book ai didi

c++ - SetWindowsHookEx 在谷歌浏览器中失败。错误代码 87 参数无效

转载 作者:可可西里 更新时间:2023-11-01 12:04:55 24 4
gpt4 key购买 nike

我正在制作一个基于教程的程序,并希望能够将我的代码挂接到某些应用程序中,以使教程与该应用程序进行交互。

我的钩子(Hook)代码适用于除 google chrome 之外的大多数应用程序。我已将我的代码简化为以下内容,这样您就可以看到它出了什么问题。

main.cpp

#include <Windows.h>
#include <iostream>
#include <psapi.h>
#include <Tlhelp32.h>

unsigned long GetProcId( const std::string& name )
{
unsigned long res = 0 ;

HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 processInfo ;
processInfo.dwSize=sizeof(PROCESSENTRY32W);

if( !Process32First( hSnapShot, &processInfo ) )
{
CloseHandle( hSnapShot );
return res ;
}

do
{
if( NULL != ( strstr ( strlwr ( processInfo.szExeFile ), name.c_str() ) ) )
{
res = processInfo.th32ProcessID ;
break ;
}
} while(Process32Next( hSnapShot,&processInfo ));

CloseHandle( hSnapShot ) ;
return res ;
}

typedef LRESULT (CALLBACK *DllHookProc)(int nCode, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
unsigned int processid = GetProcId( "chrome.exe" ) ;

if (processid == 0)
{
return 0 ;
}

HINSTANCE dllInstance = LoadLibrary("mydll.dll") ;

if (dllInstance == NULL)
{
return 0 ;
}

DllHookProc hookProc = (DllHookProc)::GetProcAddress(dllInstance, "HookProc");

if ( hookProc == NULL)
{
FreeLibrary(dllInstance);
return 0 ;
}

HHOOK hook = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)hookProc,
dllInstance, processid );

if (hook == NULL)
{
FreeLibrary(dllInstance);
return 0 ;
}

return 0 ;
}

测试 Dll (mydll.dll)

LRESULT CALLBACK HookProc (int nCode, WPARAM wParam, LPARAM lParam )
{
//Pass to the next chain in the process list
return CallNextHookEx( 0, nCode, wParam, lParam);
}

BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
return TRUE;
}

定义文件

LIBRARY "MYDLL"
EXPORTS
HookProc @1

一切正常(包括获取 processId 和加载库和 getprocaddress)直到 SetWindowsHookEx 返回 NULL,错误代码为 87(无效参数)。

chrome.exe 和我的代码都是 32 位的。

这对其他人有用吗?或者有人知道它不起作用吗?

谢谢

最佳答案

您知道 chrome 使用多进程模型,对吗?有许多 chrome 实例在协作,其中一些可能没有事件队列。

很可能您的 GetProcId 代码不适用于 chrome,因为它只能找到一个匹配的进程。

关于c++ - SetWindowsHookEx 在谷歌浏览器中失败。错误代码 87 参数无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6030001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com