仿照网上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);
}
分享到:
相关推荐
内涵完整的windows与RTX之间通讯的完整代码,通过共享内存等IPC对象实现。
使用 TCP/IP 协议, 当传输的数据包长度低于1460 上限时, RTX 下数据包传输的实时性明显优于 Windows 。当传输数据包长度超过 1460 上限的大包时, RTX 在应用层分包, Windows 下在 IP 层自动分包。由于 TCP 协议数据...
RTX 3.4 SDK 基于Windows
用于在windows程序下,通过反射光纤卡,读取数据,写入共享内存。
Windows RTX 8.1SP2 应用过程
RTX实时平台实现RS232通讯代码 关于windows开发 RTX下试试通讯的代码
使用Windows实时扩展RTX的串口编程API及示例,大大提高了串口通信的实时性。
通过扩展Windows操作系统,RTX使得除了非实时应用组件外的应用程序组件和模块运行在一个普通的Windows系统中时拥有确定性的、高速的相应时间成为可能。利用RTX,你可以用一个单一的低成本的平台来满足一个广泛地实时...
RTX 3.6 RTX 3.6 Runtime实时操作系统
RTX 3.6 SDK
此软件为实时Windows操作系统扩展,安装此软件后Windows操作系统...此为测试版,教学、学习和了解Windows RTX的性能没有限制,过期后修改系统时间又可运行。可“不受限制”光明正大使用。(不是盗版所以不受版权限制)
Windows RTX下PCI设备的读写寄存器与中断
keil 下 RTX 系统安装包,自带破解文件。在 keil 4.0 上可用。
rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤rtx皮肤0
RTX操作系统具有自己的RT-TCP/IP协议栈,这样,在增加RTX网络应用的同时,又保证了RTSS环境下的实时处理。...为了最大限度的方便WINDOWS和RTX环境下的移植,RTX提供的API函数遵循Windows Sockets 2.0 (Winsock)子集。
在分析多任务实时操作系统RTX51 的主要任务处理策略的基础上,设计实现一个基于RTX51 的数据采集系统。该系统中的数据 采集工作和接口设备的管理按其执行顺序被划分为5 项任务,任务间的协调通过调用库函数发送信号...
RTX51FULL 库,使用时复制到Keil\C51\LIB下
西门子_SIMATIC Windows 自动化中心 RTX WinAC RTX 2009pdf,
本实例完成RTX与Windows进程通信,包含两个工程:1、Windows MFC 程序,创建共享内存,并可完成对共享内存的读写操作;2、RTX进程通过读共享内存完成通信。开发环境:MS VS2005。参考资料: RTX Help文档。推荐资料...