我正在製作一個基於教程的程序,並希望能夠將我的代碼掛接到某些應用程序中,以使教程與應用程序進行交互。SetWindowsHookEx因谷歌瀏覽失敗。錯誤代碼87無效參數
我的鉤子代碼適用於除谷歌瀏覽器以外的大多數應用程序。我已經將我的代碼剝離到下面,以便您可以看到它出錯。
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
一切工作正常(包括獲取進程ID和裝載庫和GetProcAddress)直到SetWindowsHookEx返回NULL,錯誤代碼爲87(無效參數)。
chrome.exe
和我的代碼都是32位。
這是否適用於其他人或是否有人知道它不起作用?
感謝
感謝您的回覆,但他們都是32位 – Clive 2011-05-17 11:29:11
與Process32First的好位置。我修復了代碼,但不幸的是仍然是同樣的問題。再次感謝 – Clive 2011-05-17 12:07:42
非常感謝!然而,鉻可能有很多線程在運行,所以有沒有辦法找到主要的GUI線程,所以我知道我的dll不會被卸載,直到它們退出chrome?再次感謝您的幫助 – Clive 2011-05-17 12:51:54