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

2016-01-29 11:51 148 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】


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

源代码下载

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

来源:http://www.tulaoshi.com/n/20160129/1483591.html

延伸阅读
使非MFC窗口程序的窗口回调过程成为C++类的成员函数 作者:luzhl 下载源代码     一直以来,编写非MFC下的窗口程序,都习惯把窗口过程及消息处理函数编写成全局函数。为了把窗口回调过程及窗口消息处理函数封装成C++窗口类的成员函数,于是我编写了抽象类CWndProc: ...
标签: 电脑入门
在Windows系统中,利用软件借助系统底层命令快速关闭无响应程序。 使用Windows的朋友一定遇到过,电脑中的程序在运行的过程中,因为种种原因经常没有响应,就需要到进程列表中将无响应的程序关闭。但是在众多进程中快速找到无响应的进程不是一件容易的事情,需要花费半天的时间才能够找到。如果你一直为这个事而困惑的话,可以试试一款名字为P...
标签: 电脑入门
我们常常会遇到程序无法响应的情况,这时我们该怎么关闭呢,本教程为大家介绍一下自动关闭无法响应程序的方法。 新建一个文本文档。 将下列代码拷入文本文件中。 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USERControl PanelDesktop] "AutoEndTasks"="1" 点击菜单栏上的文件另存为。 然后选...
celluloid如何创建和编辑按钮   创建按钮:按钮有点击前和点击后两个状态,这需要您准备两张图片作为按钮的点击样式。在页面中创建按钮,有两种方式: 1.点击交互工具栏中 按钮 即可在页面中央生成空白按钮。 2.也可以选中任意的两个图形、图片或是文本框,选择右键菜单中创建为按钮 即可将被选中的两个对象作为点击...
标签: ASP
  启动pb7.0,创建一个不可视的用户对象"uo_customer",新建"object",选择"custom  class" 类型,点击"ok"。 在新创建的用户对象中编写如下程序: 1.声明实例变量"instance  variables",对于com中不支持的类型,请声明为protected类型。protected: datastore  ds_datastore 2.新建三个成员函数: int  uf_connect...

经验教程

967

收藏

97
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部