#include "stdafx.h"
#include <windows.h>
#include <iostream>
HHOOK g_MsgHook;
//LRESULT CALLBACK MsgHookproc(int nCode, WPARAM wParam, LPARAM lPARAM)//回呼函式
//{
// MessageBoxW(nullptr, L"搶劫到了", L"來自搶到的溫馨提醒", MB_OK);
// return CallNextHookEx(g_MsgHook, nCode, wParam, lPARAM);
//};
typedef bool(* FUN)();/*定義FUN為bool函式指標*/
int _tmain(int argc, _TCHAR* argv[])
{
//g_MsgHook = SetWindowsHookEx(WH_GETMESSAGE, MsgHookproc, nullptr,NULL);
HINSTANCE hDll = LoadLibrary(L"DLL.dll");/*申請一個DLL載入句柄*/
if (hDll)
{
//bool(__cdecl *)(void)
bool(*fun)() = (bool(*)())GetProcAddress(hDll, "StartHook");/*檢索(DLL)中的輸出庫函式地址。*/
//FUN fun = (FUN)GetProcAddress(hDll, "StartHook");/**/
{
if (fun)
{
fun();
}
}
}
char szInput[MAXBYTE] = { 0 };/*定義255個字串陣列*/
while (true)
{
std::cin >> szInput;
if (0 == strcmp(szInput, "yes"))
{
break;
}
}
return 0;
}
這是DLL:
// dllmain.cpp : 定義 DLL 應用程式的入口點。
#include "stdafx.h"
#include <iostream>
HINSTANCE g_h;
//HINSTANCE g_h = (HINSTANCE)::FindWindow(L"TXGuiFoundation", L"QQ');
HHOOK g_MsgHook;
LRESULT CALLBACK MsgHookproc(int nCode, WPARAM wParam, LPARAM lPARAM)//回呼函式
{
if (HC_ACTION== nCode)/*HC_ACTION鍵盤或滑鼠資訊*/
{
/*PMSG訊息結構體,typede使用后可以宣告*/
PMSG pmsg = (PMSG)lPARAM;
switch (pmsg->message)
{
case WM_CHAR:/*發送字符的訊息*/
{
//它按下了哪個字符
char szkey = pmsg->wParam;
char szWindowsName[MAXBYTE] = { 0 };
char szBuffer[MAXBYTE] = { 0 };
GetWindowTextA(pmsg->hwnd, szWindowsName, MAXBYTE);
sprintf_s(szBuffer, MAXBYTE, "視窗%s獲取了訊息%c", szWindowsName, szkey);
MessageBoxA(nullptr, szBuffer, szWindowsName, MB_OK);
}
break;
default:
break;
}
}
//MessageBoxW(nullptr, L"搶劫到了", L"來自搶到的溫馨提醒", MB_OK);
return CallNextHookEx(g_MsgHook, nCode, wParam, lPARAM);
};
extern "C"
__declspec(dllexport)bool StartHook()/*匯出函式*/
{
g_MsgHook = SetWindowsHookEx(WH_GETMESSAGE, MsgHookproc, g_h, NULL);
if (g_h)
return true;
return false;
}
bool Unhook()
{
return UnhookWindowsHookEx(g_MsgHook);
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_h = hModule;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
Unhook();
break;
}
return TRUE;
}
uj5u.com熱心網友回復:
在安裝鉤子時指定的回呼函式MsgHookproc的最開始:加入GetProcessName()獲得行程名,這樣判斷一下是不是你想要監視的行程,是的話就要注入了。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/128930.html
標籤:進程/線程/DLL
上一篇:服務管理器
