博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mfc钩子
阅读量:6924 次
发布时间:2019-06-27

本文共 7853 字,大约阅读时间需要 26 分钟。

dll钩子检测二维码扫描器和右击事件

// dllmain.cpp : Defines the entry point for the DLL application.#include "stdafx.h"#include "MouseHook.h"#pragma data_seg(".JOE")HWND hWndServer = NULL;#pragma data_seg()#pragma comment(linker, "/section:.JOE,rws")HINSTANCE hInst;UINT UWM_MOUSEMOVE;HHOOK hook;HHOOK keybroadhook;#define MAX_QRCODE_LENGTH 80CString m_qrcode;//char m_qrcode[MAX_QRCODE_LENGTH];int m_qrcodepos = 0;DWORD    m_starttime = 0;static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam);static LRESULT CALLBACK keyhook(UINT nCode, WPARAM wParam, LPARAM lParam);HANDLE defaultMouse = NULL;char ch;#include 
#include
#include
bool _trace(TCHAR *format, ...){ TCHAR buf[32 * 1024] = { 0 }; va_list args; va_start(args, format); wvsprintf(buf, format, args); va_end(args); OutputDebugString(buf); return true;}BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch (ul_reason_for_call) { /* reason */ case DLL_PROCESS_ATTACH: hInst = hModule; UWM_MOUSEMOVE = RegisterWindowMessage(UWM_MOUSEMOVE_MSG); return TRUE; case DLL_PROCESS_DETACH: if (hWndServer != NULL) clearMyHook(hWndServer); return TRUE; } /* reason */ return TRUE;}/***************************************************************************** setMyHook* Inputs:* HWND hWnd: Window to notify* Result: BOOL* TRUE if successful* FALSE if error* Effect:* Sets the hook****************************************************************************/__declspec(dllexport) BOOL setMyHook(HWND hWnd){ if (hWndServer != NULL) return FALSE; // already hooked! hook = SetWindowsHookEx( WH_GETMESSAGE, (HOOKPROC)msghook, hInst, 0); keybroadhook= SetWindowsHookEx( WH_KEYBOARD, (HOOKPROC)keyhook, hInst, 0); if (hook != NULL&& keybroadhook!=NULL) { /* success */ hWndServer = hWnd; return TRUE; } /* success */ return FALSE; // failed to set hook} // setMyHook /**************************************************************************** * clearMyHook * Inputs: * HWND hWnd: Window hook * Result: BOOL * TRUE if successful * FALSE if error * Effect: * Removes the hook that has been set ****************************************************************************/__declspec(dllexport) BOOL clearMyHook(HWND hWnd){ if (hWnd != hWndServer || hWnd == NULL) return FALSE; BOOL unhooked = UnhookWindowsHookEx(hook); if (unhooked) { hWndServer = NULL; } bool unhookkeyed = UnhookWindowsHookEx(keybroadhook); if (unhookkeyed) { keybroadhook = NULL; } return unhooked;} // clearMyHook /**************************************************************************** * msghook * Inputs: * int nCode: Code value * WPARAM wParam: * LPARAM lParam: * Result: LRESULT * Either 0 or the result of CallNextHookEx * Effect: * Hook processing function. If the message is a mouse-move message, * posts the coordinates to the parent window ****************************************************************************/static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam){ if (nCode < 0) { /* pass it on */ CallNextHookEx(hook, nCode, wParam, lParam); return 0; } /* pass it on */ LPMSG msg = (LPMSG)lParam; if (msg->message == WM_KEYDOWN) { switch (msg->wParam) { case VK_UP: case VK_DOWN: case VK_LEFT: case VK_RIGHT: case VK_SPACE: case 'q': case 'Q': case 'e': case 'E': case 'a': case 'A': case 's': case 'S': case 'd': case 'D': case 'W': case 'w': { HWND wnd = ::FindWindow(NULL, L"TOPHOTOART_SCENE"); if (IsWindow(wnd)) { PostMessage(wnd, WM_USER + 10005, msg->wParam, msg->lParam); } } break; } //MessageBox(NULL , L"key down", L"", MB_OK); } if (msg->message == WM_RBUTTONDOWN) { HWND find = FindWindow(NULL, L"ToPhotoArtCameraCtrl"); if (IsWindow(find)) { SendMessage(find, WM_USER + 10001, 0, 0); } } return CallNextHookEx(hook, nCode, wParam, lParam);} // msghookLRESULT keyhook(UINT nCode, WPARAM wParam, LPARAM lParam){ if (nCode < 0){ CallNextHookEx(hook, nCode, wParam, lParam); return 0; } if (!((DWORD)lParam & 0x40000000) && (HC_ACTION == nCode)) { if ((wParam == VK_RETURN) || (wParam >= 0x2f) && (wParam <= 0x100)) { DWORD tmp = GetTickCount() - m_starttime; BYTE ks[256]; GetKeyboardState(ks); WORD w; UINT scan = 0; ToAscii(wParam, scan, ks, &w, 0); ch = char(w); if (tmp < 50) { if (wParam != VK_RETURN) { //_trace(_T("get enter %c \n"), ch); _trace(_T("get enter %s \n"), m_qrcode.GetString()); m_qrcode += ch; m_qrcodepos++; } else if (wParam == VK_RETURN && m_qrcodepos > 35) { //TRACE("get enter %c\n", pMsg->wParam); //_trace(_T("get entersssss %d \n"), m_qrcode.GetLength()); m_qrcodepos = 0; char qr[MAX_QRCODE_LENGTH]; memset(qr, 0, MAX_QRCODE_LENGTH); memcpy(qr, m_qrcode.GetString(), MAX_QRCODE_LENGTH); //_trace(_T("get enter %s \n"), qr); HWND find = FindWindow(NULL, L"ToPhotoArtCameraCtrl"); if (IsWindow(find)) { SendMessage(find, WM_USER + 12002, NULL, (WPARAM)qr); } } } else { //_trace("clear %c\n", pkbhs->vkCode); //TRACE("clear %c\n", pMsg->wParam); m_qrcodepos = 0; m_qrcode = L""; m_qrcode += ch; m_qrcodepos++; } m_starttime = GetTickCount(); } } return CallNextHookEx(hook, nCode, wParam, lParam);}//LRESULT CALLBACK MouseProc(int nCode, WPARAM wparam, LPARAM lparam)//{// LPMOUSEHOOKSTRUCT pMouseHook =// (MOUSEHOOKSTRUCT FAR *)lparam;// if (nCode >= 0)// {// HWND glhTargetWnd =// ::WindowFromPoint(pMouseHook->pt);// if ((glhTargetWnd != g_hPrevTarWnd) &&// (NULL != glhTargetWnd))// {// char szCaption[256];// GetWindowText(glhTargetWnd, szCaption, 100);// //取目标窗口标题// if (IsWindow(g_hDisplayWnd))// {// SendMessage(g_hDisplayWnd, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)szCaption);// }// g_hPrevTarWnd = glhTargetWnd;//保存目标窗口// }// }// return CallNextHookEx(g_hHook, nCode, wparam, lparam);// //继续传递消息//}////_declspec(dllexport) void StartHook(HWND hWnd)//{// g_hHook = SetWindowsHookEx(WH_MOUSE, MouseProc, GetModuleHandle("Hook"), 0);// //全局钩子最后一个函数要为零// g_hDisplayWnd = hWnd;//}////卸载钩子//_declspec(dllexport) void StopHook()//{// BOOL bResult;// bResult = UnhookWindowsHookEx(g_hHook);// if (bResult)// {// g_hPrevTarWnd = NULL;// g_hDisplayWnd = NULL;// g_hHook = NULL;// }//}//启动钩子

 关于钩子的官方介绍

 

dll 注入

 

转载于:https://www.cnblogs.com/baldermurphy/p/9367656.html

你可能感兴趣的文章
黄聪:WordPress: 使用 wp_insert_attachment 上传附件
查看>>
旧手机作为USB无线网卡使用(分享WIFI、蓝牙连接)
查看>>
使用XML序列化器生成XML文件和利用pull解析XML文件
查看>>
git 本地提交后如果让服务器上的GIT 自动更新拉取
查看>>
我所了解的WEB开发(2) - PS切片
查看>>
UML学习小结
查看>>
结合Jexus + Kestrel 部署 asp.net core 生产环境
查看>>
shutdown命令用法
查看>>
Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
查看>>
vim快速指南
查看>>
Strlcpy和strlcat——一致的、安全的字符串拷贝和串接函数【转】
查看>>
同态加密-Homomorphic encryption
查看>>
【C语言入门教程】2.4 浮点型数据
查看>>
【Shiro】Apache Shiro架构之自定义realm
查看>>
[nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC
查看>>
Arc Engine 中添加气泡提示框
查看>>
瀑布式开发和敏捷开发区别
查看>>
如何使用NUnit
查看>>
AOS – 另外一个独特的页面滚动动画库(CSS3)
查看>>
springmvc 中将MultipartFile转为file,springboot 注入CommonsMultipartResolver
查看>>