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

用HOOK机制让自绘菜单栏控件模拟系统菜单栏行为 在Windows的UI开发中,我们经常需要对窗口和控件进行自绘,以实现独特的UI风格,满足软件的个性化需求,提升用户的视觉体验。目前市面上流行的软件,大都有自己别具一格的界面,许多软件还提供多种界面供用户选择,我们称之为skin。应用程序的类型,按M$通俗粗略的划分,可以分为:对话框程序、单文档程序(SDI)、多文档程序(MDI)。在换肤功能的开发中,对话框程序是最简单的,单文档和多文档程序是 阅读详情
如何在其他程序的窗口上创建按钮并使之能响应

源代码下载

环境: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
C++同时注册两窗口,点击按钮打开另一窗口 //Aother:CYhuq //越禾信息:志在记录和技术交流 //QQ:421160052 #include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> #include <iostream> #include "resource.h" #... 阅读详情

相关推荐

Qt快速入门:点击按钮改变按钮文本(QPushButton)

widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QPushButton> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); private: QPushButton b2; public: void change_

qq_32162235的博客 1万+

android hook截取其他程序的按钮事件_ScyllaHide的Hook原理

Hook是通过修改程序代码或数据,达到改变程序逻辑的目的。Hook种类很多,ScyllaHide主要使用的是inline hook,也就是在运行的流程中插入跳转指令(call/jmp)来抢夺程序运行流程的一个方法。Hook根据系统版本(win7、win8、win10等)、cpu架构(x86、x64)、子系统类型(是否是wow64进程),实现由细微差别。本节只讨论win7、x64下32位进...

weixin_39946460的博客 342

进阶01:C# 加载外部EXE程序,并触发程序中的按钮

本文介绍了如何通过Windows API将外部EXE程序嵌入到主程序中并实现控制交互。主要步骤包括:1)创建被调用程序(WinFormSub.exe),包含随机数生成功能;2)使用Spy++工具获取目标控件句柄;3)在主程序中通过Process类启动外部程序,使用SetParent API将其嵌入Panel控件;4)通过FindWindowEx和SendMessage等API实现按钮触发、控件状态读取(包括文本内容、背景色等)。该方案适用于在没有源码的情况下集成第三方程序,可应用于工业自动化设备集成等场景。

weixin_38637405的博客 1826

按钮 java_java如何创建并设置一个按钮

java如何创建并设置一个按钮AWT(抽象窗口工具包):是java提供用来建立和设置java的图形用户界面的基本工具Swing(轻量级的图形界面组件):是以AWT平台为基础构建起来的新组件与AWT相比,Swing组件在实现时不包括任何依赖特定平台的代码,因此具有更高的平台无关性和良好的移植性,所以Swing成为图形用户界面开发的首选。下面介绍如何创建一个窗口程序并设置一个按钮。1、首先导入必要的包...

weixin_36073895的博客 5063

Win32程序添加按钮和点击响应

如果有多个按钮

m0_60352504的博客 1618

Win32程序创建按钮并响应单击

码; #include <windows.h> #include "resource.h" LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); HINSTANCE hInst; TCHAR szClassName[] = TEXT("win32ButtonDemo"); int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrev

bcbobo21cn的专栏 1102

win32程序之子窗口编程

一丶简介.什么是子窗口   在前边我们已经讲解了窗口的本质.以及如何注册窗口类跟创建窗口. 还讲了消息循环. 那么有很多窗口其实Windows已经帮我们创建出来了.我们直接使用即可. 而这些窗口都有自己的消息循环. 只有改变状态的时候.才会发送消息给我们的父窗口通知. 此时我们捕获消息就可以进行处理了. 子窗口其实就是绘制在主窗口的一个窗口. 这些窗口包含了 BUTTON (按钮控件...

qq_39529180的博客 687

易语言自动点击外部窗口上的按钮

根据窗口类名搜索出对应的句柄,调用PostMessageA自动点击外部程序上的按钮。本压缩包内包含主程序和外部程序的源代码,其中外部程序源码供调试试用。

win32(002) 创建窗口和 子窗口 事件处理

win32(002)  创建窗口和 子窗口 事件处理 不处理了自己上代码 我会上传 // win3202.cpp : Defines the entry point for the application. // #include "stdafx.h" #define    begbuttonid 0x100 #define    stopbuttonid 0x

h1028962069的专栏 3585

易语言API创建窗口按钮执行代码例程

易语言 API创建窗口例程 创建按钮组件执行代码例程

易语言给外部窗口添加按钮并响应事件

给外部窗口添加按钮并响应事件系统结构:GetMsgProc,NewWndProc,位置,画按钮1,画按钮2,SetWindowsHookEx,CallNextHookEx,UnhookWindowsHookEx,SetPropA,RemovePropA,GetPropA,CopyMemory_MSG,SetWindowLongA,GetWindowLongA,CallWin

Win32窗口控件的创建与响应的源代码(附带源码)

通过这个简单的 Win32 程序示例,你可以看到如何创建并响应常见的窗口控件,如按钮、文本框和标签。Win32 提供了非常灵活的控件机制,能够满足大多数桌面应用程序的需求。通过修改控件的样式和属性,还可以定制控件的外观和行为,进一步提升用户体验。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 961

在银河麒麟V10上部署Atlas 300i Duo:从固件到驱动的一站式踩坑笔记

日期:2025-09-09关键词:鲲鹏920、Atlas 300i Duo、银河麒麟V10、NPU、驱动、固件。

weixin_41544125的博客 2817

Qt5+VS2017点击按钮打开新窗口

居然没找到相关教程,一个人搞了好久… 1.新建新工程 使用VS新建一个qt工程:点击“Qt GUI Application”或者“创建新项目”创建新工程。 然后“Next”—&amp;gt;“Next”—&amp;gt;&quot;Finish&quot;完成,中间不用更改任何参数。 2.添加按钮和槽函数 双击“解决方案资源管理器”中的“XXX.ui”打开ui编辑界面,拖一个PushButton在中间去。 保存之后回到VS,...

有关人士的博客 8395

西门子S7-200 SMART与施耐德ATV变频器Modbus通讯实战:从接线到稳定运行的完整指南

本文详细介绍了西门子S7-200 SMART PLC与施耐德ATV变频器之间实现稳定Modbus通讯的完整实战指南。内容涵盖从硬件接线、参数配置、PLC程序编写到触摸屏设计的全流程,并分享了提升通讯稳定性的关键技巧和常见故障排查方法,助力工业自动化系统可靠运行。

kkk56的博客 1108

华南理工大学电子与信息学院23年预推免复试面试经验贴

华南理工大学电子与信息学院23年预推免复试面试经验贴

Scut_Ty的博客 3299
上一篇: 交换网站 iframe 有意请进
下一篇: 跨进程实现在Tree中快速定位节点
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值