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

源代码下载

环境: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

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

  1. WIN7 UAC/结构体的Equals方法/C# 开发wince程序,窗口上总留有一块空白区域/静态构造函数...

    1. vs2005在win7下通过IIS7调试时,调用dll失败,但在XP下正常.相信是权限问题,请问应该如何解决?能不能设置dll默认以管理员身分运行? 备注:此DLL已注册成功! 回复引用 全部回 ...

  2. VS创建 Win32 应用程序(实现窗口的创建)

    VS创建 Win32 应用程序(实现窗口的创建)(二) 程序框架如下: 一.VS演示流程 打开VS----文件----新建----项目----Windows 桌面应用程序 二.生成代码:(大部分函数在 ...

  3. close函数 qt_QT5笔记:关闭应用程序和窗口的函数

    23333 QT一坨,求一门面向傻瓜的语言. QT中 quit(),exit()以及close():常用的三个槽 对主程序的退出,可以调用成员函数exit(),同时也可以调用槽quit(),二者此时都 ...

  4. Delphi非应用程序主窗口创建MDI

    对Delphi很熟悉的人,都知道MDI窗口的创建方式,是将主窗口的formstyle设置成MDIForm,然后将各个要设置成MDI的窗口的FormStyle都设置成MDIChild,运行就可以看到效果 ...

  5. win32程序窗口的创建

    尽管Windows应用程序千变万化,令人眼花缭乱,但,消息机制和窗口过程却始终它们的基础,掌握了这两项技术,也就相当于把握住了问题的关键. 如果你以前是C程序员或是MFC的忠实用户,只要你学习过C语言 ...

  6. Linux从头开始学--学习笔记9知识点补充-ubuntu,centos;在linux上创建c程序;linux基础命令,shell命令,vi命令,man帮助手册

    这是我从头开始学习Linux的学习笔记,后续还会更新. 记录自己的技术成长,也希望和大家分享交流,欢迎关注~ 本笔记为coursera网站课程<Linux for Developers>的 ...

  7. 在Heroku上创建node.js应用程序时,我应该将node_modules检入git吗?

    本文翻译自:Should I check in node_modules to git when creating a node.js app on Heroku? I followed the ba ...

  8. 【Visual Studio 2019】创建 MFC 桌面程序 ( 安装 MFC 开发组件 | 创建 MFC 应用 | MFC 应用窗口编辑 | 为按钮添加点击事件 | 修改按钮文字 | 打开应用 )

    文章目录 一.安装 MFC 开发组件 二.创建 MFC 应用 三.MFC 应用窗口编辑 四.为按钮添加点击事件 五.修改按钮文字 六.打开系统其它应用 七.博客源码 一.安装 MFC 开发组件 打开 ...

  9. linux java services_在 Linux 上创建第一个 Service Fabric Java 应用程序

    先决条件 开始之前,请安装 Service Fabric SDK.Azure CLI,并在 Linux 开发环境中设置开发群集. 如果使用 Mac OS X,则可使用 Vagrant 在虚拟机中设置 ...

最新文章

  1. 9型转x型 cobol_【科研模型100例32】A型/X型分子筛
  2. WKWebView中经常用到的操作
  3. vue 组件属性监听_Vue.js 监听属性
  4. java el表达式 if else_jsp EL表达式和JSTL标签if-else if-else用法
  5. Good Bye 2017 G. New Year and Original Order 数位dp + 按数贡献
  6. php 取数组数量_PHP array_slice():截取数组的一部分
  7. WebFlux响应式编程基础之 5 webflux服务端开发讲解
  8. SharePoint 2010之LINQ与SPMetal
  9. Spring @Repository批注
  10. 桌面有u盘符计算机里没有了,教你电脑不显示u盘盘符怎么办
  11. HDU 2028Lowest Common Multiple Plus
  12. 【夯实基础】Spring在ssh中的作用
  13. Kindle刷安卓双系统的方法
  14. html中header怎么设置,HTML中的header标签怎么用?
  15. 服务器如何设置内网IP地址
  16. Web前端:木兰花令网页案例设计
  17. 1. stm32h7 移植RTX5(AC6) 基于CUBEMX
  18. 推荐5款小众实用神器软件,功能强大,值得你去收藏
  19. 【数组】#66 加一
  20. 无需插件修改chrome浏览器UA标识为手机版

热门文章

  1. 为什么我放弃饿了么产品总监,却要从事自由职业?
  2. mysql 查询效率测试,mysql innode和myisam引擎查询性能比较测试
  3. “2019大数据与实体经济深度融合全国行”盛大启动
  4. 作者:陈卫, 男, 微软亚洲研究院高级研究员, 清华大学客座教授。
  5. RabbitMq topic
  6. 【面向对象】可变对象和不可变对象
  7. 【操作系统】页置换算法
  8. 【Java】Java反射机制重点总结
  9. 【XML】XML语法格式提要
  10. 【Java】OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes…… 的解决方法