SetWindowsHookEx失败,谷歌浏览器。错误代码87无效参数
|
我正在制作一个基于教程的程序,希望能够将我的代码挂接到某些应用程序中,以使该教程与该应用程序进行交互。
我的摘机代码适用于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位。
这是否对其他任何人有用,或者有人知道它不起作用吗?
谢谢
没有找到相关结果
已邀请:
2 个回复
逝媳蘑贩茄
是32位(或者相反)。 [请参阅评论和更新,情况并非如此。] 您的代码中有一个可疑的事情是您没有调用
,而这似乎是必需的。参见示例:拍摄快照和查看过程。 最后建议:您正在将进程ID传递给
,但这需要一个线程ID。
渐首洽陈染
代码不适用于chrome,因为它只能找到一个匹配的进程。