6
Tôi đang cố gắng móc ví dụ Notepad không thành công. Làm một cái móc toàn cầu dường như hoạt động tốt.Cách móc quá trình bên ngoài bằng SetWindowsHookEx và WH_KEYBOARD
Thử nghiệm trên XP SP2.
Chỉnh sửa: Mã sửa đổi hoạt động ngay bây giờ.
mydll đang
#include <windows.h>
#include <iostream>
#include <stdio.h>
HINSTANCE hinst;
#pragma data_seg(".shared")
HHOOK hhk;
#pragma data_seg()
//#pragma comment(linker, "/SECTION:.shared,RWS") compiler error in VC++ 2008 express
LRESULT CALLBACK wireKeyboardProc(int code, WPARAM wParam,LPARAM lParam) {
if (code < 0) {
return CallNextHookEx(0, code, wParam, lParam);
}
Beep(1000, 20);
return CallNextHookEx(hhk, code, wParam, lParam);
}
extern "C" __declspec(dllexport) void install(unsigned long threadID) {
hhk = SetWindowsHookEx(WH_KEYBOARD, wireKeyboardProc, hinst, threadID);
}
extern "C" __declspec(dllexport) void uninstall() {
UnhookWindowsHookEx(hhk);
}
BOOL WINAPI DllMain(__in HINSTANCE hinstDLL, __in DWORD fdwReason, __in LPVOID lpvReserved) {
hinst = hinstDLL;
return TRUE;
}
chương trình My
#include <Windows.h>
unsigned long GetTargetThreadIdFromWindow(char *className, char *windowName)
{
HWND targetWnd;
HANDLE hProcess;
unsigned long processID = 0;
targetWnd = FindWindow(className, windowName);
return GetWindowThreadProcessId(targetWnd, &processID);
}
int _tmain(int argc, _TCHAR* argv[]) {
unsigned long threadID = GetTargetProcessIdFromWindow("Notepad", "Untitled - Notepad");
printf("TID: %i", threadID);
HINSTANCE hinst = LoadLibrary(_T("MyDLL.dll"));
if (hinst) {
typedef void (*Install)(unsigned long);
typedef void (*Uninstall)();
Install install = (Install) GetProcAddress(hinst, "install");
Uninstall uninstall = (Uninstall) GetProcAddress(hinst, "uninstall");
install(threadID);
Sleep(20000);
uninstall();
}
return 0;
}
GetWindowThreadProcessId() trả về ID chủ đề mà bạn cần (như giá trị trả về của nó) . Bất cứ điều gì bạn đang làm với lắp ráp nội tuyến và ReadProcessMemory là không cần thiết, và gần như chắc chắn không làm việc. – RichieHindle
bạn cũng cần phải khởi tạo 'hhk' thành' 0' hoặc nó sẽ không được chia sẻ đúng cách – yoyoyoyosef
@yoyoyoyosef: Cảm ơn - đã sửa. – RichieHindle