`
jerry1985
  • 浏览: 30403 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

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);
}
分享到:
评论

相关推荐

    windows-RTX.rar_IPC内存共享_RTX 共享内存_RTX与Windows_WINDOWS R_rtx ipc

    综上所述,这个压缩包“windows-RTX.rar”提供的内容对于理解和实践RTX系统与Windows之间的IPC,尤其是内存共享,有着重要的价值。开发者可以通过学习这些代码,了解如何在实时操作系统和传统桌面操作系统之间构建...

    RTX.rar_RTX_Windows RTX_rtx windows_rtx 反射内存_光纤

    "安晓风第一学期末RTX接收发送"可能是某个教学或实践项目中,用户创建的一个示例或测试文件,用于演示如何在Windows环境下使用RTX进行数据的接收和发送操作。这个文件可能包含了源代码、配置文件或实验报告,帮助...

    使用Windows实时扩展RTX的串口编程

    在Windows操作系统环境中,为了实现高实时性的串口通信,开发者常常会借助于Windows实时扩展(Real-Time Extension,简称RTX)。RTX是一种针对Windows NT/2000/XP等系统设计的实时扩展库,它提供了低延迟、高优先级...

    RTX 3.6 Runtime Windows实时操作系统

    3. **实时性能**:RTX优化了系统调用和中断处理,确保了在Windows上实现硬实时性能,这对于需要严格时间约束的系统至关重要。 4. **同步与通信机制**:RTX提供了信号量、邮箱、消息队列等同步和通信机制,使得不同...

    RTX 3.4 SDK 基于Windows

    RTX 3.4 SDK是Real-Time eXtensions (RTX)的软件开发工具包,主要用于在Windows操作系统上开发实时应用程序。RTX是Microsoft Windows操作系统的一个扩展,它提供了额外的功能,使开发者能够构建高性能、高可靠性的...

    RTX 8.1 与 RTX 64性能对照.doc

    首先,RTX64 3.6 引入了一个64位的实时子系统(RTSS),它可以在64位Windows上运行,提供精确的中断请求(IRQs)、输入/输出(I/O)和内存控制。这个子系统允许实时线程在Windows崩溃时保持正常运行,确保系统的稳定...

    Windows RTX 8.1SP2 应用过程

    Windows RTX 8.1SP2 应用过程 本文将详细介绍 Windows RTX 8.1SP2 应用过程,包括安装 Visual Studio 2008、IntervalZero RTX81SP2_SDK、安装 RTX、设置环境变量、编译批处理文件、运行编译好的可执行文件等步骤。 ...

    RTX 3.6 SDK 基于Windows实时操作系统

    RTX (Real-Time eXtensions) 是Keil公司开发的一种实时操作系统(RTOS),它为Windows平台提供了一个高效能的实时扩展环境,使得开发者可以在Windows上构建复杂的嵌入式系统。 在Windows RTX中,开发者可以利用...

    Interval zero公司的实时windows RTX 8.0 Demo版

    此软件为实时Windows操作系统扩展,安装此软件后Windows操作系统...此为测试版,教学、学习和了解Windows RTX的性能没有限制,过期后修改系统时间又可运行。可“不受限制”光明正大使用。(不是盗版所以不受版权限制)

    Windows RTX下PCI设备的读写寄存器与中断

    Windows RTX下PCI设备的读写寄存器与中断

    RTX实时平台实现RS232通讯代码

    RTX实时平台实现RS232通讯代码 关于windows开发 RTX下试试通讯的代码

    实时windows扩展的RTX白皮书

    RTX提供了一个实时子系统(Real-Time Subsystem, RTSS),该子系统可以在Windows上运行,并支持对称多处理(Symmetric Multi-Processing, SMP)技术,在多处理器系统中发挥更高效能。 RTX的主要功能包括: 1. **...

    C# 二次开发RTX实现右下角弹窗提醒功能

    本话题涉及的是如何利用C#进行RTX(Real Time eXchange,即时通讯系统)的二次开发,实现一个右下角弹窗提醒功能。这个功能在许多桌面应用中常见,用于向用户发送实时消息或通知。 RTX是腾讯公司推出的一款企业级...

    sharememory_WindowsRTX_RTX共享内存_

    在Windows RTX的场景下,共享内存可能用于以下用途: 1. **消息传递**:RTX进程可以将接收到的消息写入共享内存,Windows应用程序可以通过读取这部分内存获取消息,实现快速的通知和通信。 2. **状态同步**:用户...

    基于Windows RTX运行系统的数控系统软PLC模块开发研究.pdf

    在软PLC运行系统的设计中,本文通过多个实验和测试,证明了基于Windows+RTX平台的软PLC技术能够有效实现数控系统开关控制功能。此外,软PLC技术的应用大大提升了数控系统的开放性及兼容性,为数控系统的进一步发展和...

    Rtx51.rar_RTX51 FULL_RTX51 full下载_keil rtx51_rtx51_rtx51full

    在使用RTX51FULL时,用户需要将其库文件复制到Keil安装目录下的 `\Keil\C51\LIB` 文件夹,这样在项目配置中就可以选择并使用这个RTOS内核。 在实际应用中,开发者首先需要在μVision IDE中创建一个新的C51项目,...

    RTX实时平台实现RS232通讯

    本文将详细介绍如何在IntervalZero的RTX实时操作系统环境下实现RS232通讯,包括必要的硬件配置、软件开发环境搭建以及具体编程步骤。 #### 二、RTX实时平台简介 RTX(Real-Time eXtensions)是由IntervalZero公司...

Global site tag (gtag.js) - Google Analytics