首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

简单实现windows上RTX尾巴(下)(c语言)

2012-12-20 
简单实现windows下RTX尾巴(上)(c语言)仿照网上QQ尾巴的例子实现一个简单的RTX尾巴,运行后会从固定的服务器

简单实现windows下RTX尾巴(上)(c语言)
仿照网上QQ尾巴的例子实现一个简单的RTX尾巴,运行后会从固定的服务器下载键盘钩子(由于不会获取发送按钮的句柄,目前只实现了键盘钩子),然后安装钩子。在用户使用ctrl+enter发送消息时,会在消息的尾部添加如下一段话:[**********The brown quick fox jumps over the lazy dog.**********]。

ps:希望高手能教教我如何获得发送按钮的句柄,在下感激不尽!

rtxkeyhook.h

#ifdef KEYHOOKLIB_EXPORTS#define KEYHOOKLIB_API __declspec(dllexport)#else#define KEYHOOKLIB_API __declspec(dllimport)#endifBOOL KEYHOOKLIB_API WINAPI SetHook(HANDLE);BOOL KEYHOOKLIB_API WINAPI DropHook();void PasteText(HANDLE);int GetTextLen(HANDLE);


rtxkeyhook.c
#include <windows.h>#include <stdio.h>#define KEYHOOKLIB_EXPORTS#include "rtxkeyhook.h"#pragma data_seg("HOOKShared")HHOOK g_hKey = NULL;HANDLE g_hRich = NULL;#pragma data_seg()#pragma comment(linker, "/section:HOOKShared,RWS")LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam) {if(wParam == VK_RETURN && GetAsyncKeyState(VK_CONTROL) < 0 && lParam >= 0){if(g_hRich != NULL && GetTextLen(g_hRich) > 0){ PasteText(g_hRich);}}return CallNextHookEx(g_hKey, nCode, wParam, lParam);}int GetTextLen(HANDLE hRich){char szText[1000];SendMessage(hRich, WM_GETTEXT, sizeof(szText), (LPARAM)szText);return strlen(szText);}void PasteText(HANDLE hRich) {HGLOBAL hMem;char *pStr;char gStr[100] = "\n**********The brown quick fox jumps over the lazy dog.**********\n";hMem = GlobalAlloc(GHND | GMEM_SHARE, sizeof(gStr));pStr = GlobalLock(hMem);lstrcpy(pStr, gStr);GlobalUnlock(hMem);OpenClipboard(NULL);EmptyClipboard();SetClipboardData(CF_TEXT, hMem);CloseClipboard();SendMessage(hRich, WM_PASTE, 0, 0);}HMODULE WINAPI ModuleFromAddress(PVOID pv){MEMORY_BASIC_INFORMATION mbi;if(VirtualQuery(pv, &mbi, sizeof(mbi)) != 0){return (HMODULE)mbi.AllocationBase;}else{return NULL;}}BOOL WINAPI SetHook(HANDLE hDlg){DWORD dwThreadId = GetWindowThreadProcessId(hDlg, NULL);g_hRich = FindWindowEx(hDlg, NULL, "RichEdit20W", NULL);if(g_hRich == NULL){printf("can not find edit control !\n");return FALSE;}g_hKey = SetWindowsHookEx(WH_KEYBOARD,   KeyHookProc,   ModuleFromAddress(KeyHookProc),   dwThreadId);if(g_hKey != NULL){printf("hook ready !\n");return TRUE;}return FALSE;}BOOL WINAPI DropHook(){return UnhookWindowsHookEx(g_hKey);}

热点排行