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

2016-01-29 11:51 143 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

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

延伸阅读
使非MFC窗口程序的窗口回调过程成为C++类的成员函数 作者:luzhl 下载源代码     一直以来,编写非MFC下的窗口程序,都习惯把窗口过程及消息处理函数编写成全局函数。为了把窗口回调过程及窗口消息处理函数封装成C++窗口类的成员函数,于是我编写了抽象类CWndProc: ...
标签: 电脑入门
我们常常会遇到程序无法响应的情况,这时我们该怎么关闭呢,本教程为大家介绍一下自动关闭无法响应程序的方法。 新建一个文本文档。 将下列代码拷入文本文件中。 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USERControl PanelDesktop] "AutoEndTasks"="1" 点击菜单栏上的文件另存为。 然后选...
标签: 电脑入门
在Windows系统中,利用软件借助系统底层命令快速关闭无响应程序。 使用Windows的朋友一定遇到过,电脑中的程序在运行的过程中,因为种种原因经常没有响应,就需要到进程列表中将无响应的程序关闭。但是在众多进程中快速找到无响应的进程不是一件容易的事情,需要花费半天的时间才能够找到。如果你一直为这个事而困惑的话,可以试试一款名字为P...
Win32API有很多让你意想不到的功能。要创建特殊的不规则窗口看上去似乎很难。但我们如果我们说我们用几行代码就可以实现,这似乎不可思议。但事实就是如此!请试试: PrivateDeclareFunctionCreateEllipticRgnLib"gdi32"(ByValX1AsLong,ByValY1AsLong,ByValX2AsLong,ByValY2AsLong)AsLong PrivateDeclareFunctionSetWindowRgn...
我们在很多时候都需要那种无Icon的窗口,如“关于……”“查找”等。在VB中,我们可以按以下步骤来创建此类窗口: 1、设置窗口的BorderStyle=3; 2、在Form_Load中加入:Me.Icon=LoadPicture("")->

经验教程

528

收藏

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