zoukankan      html  css  js  c++  java
  • 动态链接库

    键盘鼠标HOOK Demo

    1,------------------------ 导出代码

    // keyHooker.cpp : 定义 DLL 应用程序的导出函数。
    //
    
    #include "stdafx.h"
    
    #include "windows.h"
    HINSTANCE h_st;
    HHOOK g_KeyBoardHook;
    //HHOOK g_MouseHook;
    HWND g_wnd;
    
    /*
    LRESULT CALLBACK MouseProc(
    	int nCode,      // hook code
    	WPARAM wParam, // message identifier
    	LPARAM lParam   // mouse coordinates
    	)
    {
    	return 1;
    }
    */
    
    LRESULT CALLBACK KeyboardProc(
    	int code,       // hook code
    	WPARAM wParam, // virtual-key code
    	LPARAM lParam   // keystroke-message information
    	)
    {
    	if(VK_F7 == wParam)
    	{	
    		//UnhookWindowsHookEx(g_MouseHook);
    		UnhookWindowsHookEx(g_KeyBoardHook);
    		return 1;
    	}
    #ifndef _DEBUG
    	if(VK_F12 == wParam)
    	{	
    		return 1;
    	}
    #endif
    
    	if (VK_ESCAPE == wParam)
    	{
    		return 1;
    	}
    
    	return CallNextHookEx(g_KeyBoardHook, code, wParam, lParam);
    }
    
    void SetHook(HWND hwnd)
    {
    	g_wnd=hwnd;
    	//g_MouseHook=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle(L"keyHooker"),0);
    	g_KeyBoardHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle(L"keyHooker"),0);
    }
    

    2, 动态导入代码

    #ifndef ___KEYHOOKER_H___
    #define ___KEYHOOKER_H___
    
    #include "stdafx.h"
    #include <cassert>
    #include <WinBase.h>
    #define KEYAPI __cdecl
    
    namespace Common {
    	namespace Hook {
    #pragma region Declaration
    
    		typedef void (KEYAPI *Proc_SetHook)(HWND h);
    
    		class KeyHooker {
    		public:
    			void SetHook(HWND h);
    			
    		private:
    			Proc_SetHook pSetHook;
    			// dll 句柄
    			HINSTANCE _hmsc;
    
    			KeyHooker();
    			virtual ~KeyHooker();
    			friend class std::auto_ptr<KeyHooker>;
    			static std::auto_ptr<KeyHooker> _instance;
    		public:
    			static KeyHooker* Inst() {
    				if (0 == _instance.get()){  
    					_instance.reset(new KeyHooker);  
    				}  
    				return _instance.get(); 
    			}
    		};  // end of KeyHooker
    #pragma endregion
    #pragma region Definition
    		KeyHooker::KeyHooker() {
    			HINSTANCE hmscdll = LoadLibraryEx(_T("./keyHooker.dll"),NULL,0);
    
    			assert(hmscdll != NULL);
    			
    			_hmsc = hmscdll;
    		}
    
    		KeyHooker::~KeyHooker() {
    			if (_hmsc != NULL) {
    				FreeLibrary(_hmsc);
    			}
    		}
    
    		std::auto_ptr<KeyHooker> KeyHooker::_instance; 
    
    		void KeyHooker::SetHook(HWND h) {
    			pSetHook = (Proc_SetHook)GetProcAddress(_hmsc,"SetHook");
    			assert(pSetHook != NULL);
    			return pSetHook(h);
    		}
    #pragma endregion
    	}
    }
    #endif // end of define ___KEYHOOKER_H___





  • 相关阅读:
    C#中异步和多线程的区别
    猫 老鼠 人的编程题
    C#中数组、ArrayList和List三者的区别
    经典.net面试题目
    sql有几种删除表数据的方式
    内存池的实现
    A*算法为什么是最优的
    传教士与野人问题
    d3d导致cairo不正常
    c++中的signal机制
  • 原文地址:https://www.cnblogs.com/wjchang/p/3671668.html
Copyright © 2011-2022 走看看