如何在其他程序的窗口上创建按钮并使之能响应
生活随笔
收集整理的這篇文章主要介紹了
如何在其他程序的窗口上创建按钮并使之能响应
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
如何在其他程序的窗口上創(chuàng)建按鈕并使之能響應(yīng)
| 源代碼下載 環(huán)境:Windows NT/2000 實現(xiàn)方法:采用將動態(tài)連接庫注入到其他進程中的方法來實現(xiàn)。 ??? 為了便于選擇窗口,我借用了另一個程序"2000下顯示帶*號"來選擇窗口。 如果要在98下實現(xiàn)你可用鉤子同樣實現(xiàn)。 程序運行界面如圖一: |
| 圖一 將動態(tài)連接庫注入其他進程的代碼如下: |
| 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; } |
| 環(huán)境:win2000 professional + VC6.0+SP5 + PlatformSDK 2001.8 |
總結(jié)
以上是生活随笔為你收集整理的如何在其他程序的窗口上创建按钮并使之能响应的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将servlet数据传到html_Ser
- 下一篇: 华为手机asph啥机型_华为正式宣布!1