wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用SetWindowsHookEx和WH_KEYBOARD挂钩外部进程大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我试图挂钩例如记事本没有成功.制作全局钩子似乎工作正常. 在XP SP2上测试. 编辑:修改后的代码现在有效. MyDLL代码 #include <windows.h> #include <iostream> #include <stdio.h> HINSTANCE hinst; #pragma data_seg(".shared") HHOOK hhk; #pragma data_seg()
我试图挂钩例如记事本没有成功.制作全局钩子似乎工作正常.

在XP SP2上测试.

编辑:修改后的代码现在有效.

@H_163_15@myDLL代码

#include <windows.h>
#include <iostream>
#include <st@L_944_3@.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,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;
}

我的节目

#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;
}
三个问题:

您应该在使用线程ID时使用进程ID.

你的HHOOK需要进入共享内存:

#pragma data_seg(".shared")
HHOOK hhk = NULL;
#pragma data_seg()
#pragma comment(linker,RWS")

您需要将HHOOK传递给CallNextHookEx:

return CallNextHookEx( hhk,lParam);

大佬总结

以上是大佬教程为你收集整理的如何使用SetWindowsHookEx和WH_KEYBOARD挂钩外部进程全部内容,希望文章能够帮你解决如何使用SetWindowsHookEx和WH_KEYBOARD挂钩外部进程所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。