如何在其他程序的窗口上创建按钮并使之能响应

原创 2005年05月31日 15:44:00
如何在其他程序的窗口上创建按钮并使之能响应

源代码下载

环境:Windows NT/2000

实现方法:采用将动态连接库注入到其他进程中的方法来实现。

    为了便于选择窗口,我借用了另一个程序"2000下显示带*号"来选择窗口。
如果要在98下实现你可用钩子同样实现。
程序运行界面如图一:
图一
将动态连接库注入其他进程的代码如下:
BOOL WINAPI RT_CTRL_BTN(LPCSTR lpszLibFile, HWND hWnd, DWORD dwID, LPRECT pRtBtn, LPCTSTR szCaptionBtn)
{
	try {
		DWORD dwProcessID;
		GetWindowThreadProcessId(hWnd, &dwProcessID);
		HANDLE hProcess = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION |
				PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, dwProcessID );
		if (!hProcess){
			return FALSE;
		}

		INJECT_DLL InjectInfo;
		InjectDLL_Info(&InjectInfo, lpszLibFile, hWnd, dwID, pRtBtn, szCaptionBtn);

		LPBYTE lpThreadAddr=(LPBYTE)::VirtualAllocEx(hProcess, NULL, MAXINJECTSIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

		LPINJECT_DLL param = (LPINJECT_DLL) VirtualAllocEx( hProcess, 0, sizeof(INJECT_DLL), MEM_COMMIT, PAGE_READWRITE );

		WriteProcessMemory(hProcess, lpThreadAddr,&RemoteControlThread,	MAXINJECTSIZE, 0);
		WriteProcessMemory( hProcess, param, &InjectInfo, sizeof(InjectInfo), 0 );

		DWORD dwThreadId;
		HANDLE hThread = ::CreateRemoteThread(hProcess,NULL,0,
			(unsigned long (__stdcall *)(void *))lpThreadAddr,
			param, 0, &dwThreadId);


		if (!hThread){
			CloseHandle(hProcess);
			VirtualFreeEx( hProcess, lpThreadAddr, 0, MEM_RELEASE );
			VirtualFreeEx( hProcess, param, 0, MEM_RELEASE );
			return FALSE;
		}
		else {
			CloseHandle(hThread);
			CloseHandle(hProcess);
			VirtualFreeEx( hProcess, lpThreadAddr, 0, MEM_RELEASE );
			VirtualFreeEx( hProcess, param, 0, MEM_RELEASE );
		}
	
	}
	catch (...){
		return FALSE;
	}
	return TRUE;
}
环境:win2000 professional + VC6.0+SP5 + PlatformSDK 2001.8

相关文章推荐

MFC在程序窗口中创建按钮

  • 2013年07月28日 18:38
  • 218KB
  • 下载

48.java编程思想——创建窗口和程序片 按钮及事件

48.java编程思想——创建窗口和程序片 按钮及事件 制作一个按钮非常简单:只需要调用Button 构建器,并指定想在按钮上出现的标签就行了(如果不想要标签,亦可使用默认构建器,但那种情况极少出现...
  • notbaron
  • notbaron
  • 2016年04月30日 20:21
  • 30493

在C++/MFC框架应用程序里,当浮动工具条被拖离主窗口后,一般都有一个“关闭”按钮,

在C++/MFC框架应用程序里,当浮动工具条被拖离主窗口后,一般都有一个“关闭”按钮,如图一所示: 图一  本来这个按钮完全是按照Windows应用程序的UI设计规范而设计的,也就...

C#隐藏其他程序窗口以及添加最小化/最大化按钮

博客处女作,写一篇关于C#隐藏第三方应用程序窗口以及给窗口添加最小化/最大化的实现方法: 引入命名空间: using System.Runtime.InteropServices; 导入库: ...

Chapter9——分析下面的程序,写出其运行时的输出结果/将程序第5行改为Date(int=1,int=1,int=2005);修改程序使之能通过编译

#include using namespace std; class Date { public: Date(int,int,int); Date(int,int); Date(int...

WIN32汇编语言在窗口添加按钮,点击按钮实现跳转到一个程序或者一个URL。。。

你是否遇见过点开一个窗口,窗口上遇见一个漂亮妹子或者帅哥或者也许是一个非常吸引你的东西,(“点我,脱衣服”你遇见过吧。。。我遇见过)当时感觉这种方式确实很有创意,也没有继续研究,这次我就用WIN32汇...

Android响应按钮的程序结构

图形界面的按钮是最普通的控件,Android响应按钮的程序结构大体分成如下两种:     (1)采样匿名内部类的按钮实现方式:     如下面的Java程序,在声明Class时只是从Act...
  • idulx
  • idulx
  • 2012年03月08日 15:19
  • 593

在其他程序窗体创建按钮

  • 2008年11月04日 23:02
  • 3KB
  • 下载

cocos2d-x 基础系列 (01) 创建一个只有退出程序按钮的demo

在之前的文章中已经熟悉了coco2d-x的基本用法,这个系列主要分析它的一些类,结合官网提供coco2d-x Programmers Guide v3.12.pdf pdf下载地址 https://...
  • WAN_EXE
  • WAN_EXE
  • 2017年03月24日 22:51
  • 269
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在其他程序的窗口上创建按钮并使之能响应
举报原因:
原因补充:

(最多只允许输入30个字)