获取当前焦点所在窗口句柄,通过 句柄获取执行路径
来源:互联网 发布:企业软件开发资质 编辑:程序博客网 时间:2024/05/18 17:00
获取当前焦点所在窗口句柄,通过 句柄获取执行路径
- 实现方法
void CShowFocusDlg::Initstr(){ CWinThread* pThread = AfxBeginThread(CShowFocusDlg::MYThread, this); CloseHandle(pThread->m_hThread);}UINT CShowFocusDlg::MYThread(LPVOID lParam){ CShowFocusDlg* p = (CShowFocusDlg*)lParam; HWND m_hwnd; char WindowTitle[200] = { 0 }; char path[MAX_PATH + 1] = { 0 }; while (true) { m_hwnd = ::GetForegroundWindow(); ::GetWindowText(m_hwnd, WindowTitle, 200); DWORD idProcess; GetWindowThreadProcessId(m_hwnd, &idProcess); HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, idProcess); p->GetDlgItem(IDC_PATH)->SetWindowText(""); p->GetDlgItem(IDC_NAME)->SetWindowText(""); if (NULL != hProcess) { HMODULE hMod; DWORD cbNeeded; if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) { GetModuleFileNameEx(hProcess, hMod, path, MAX_PATH); p->GetDlgItem(IDC_PATH)->SetWindowText(path); } } p->GetDlgItem(IDC_NAME)->SetWindowText(WindowTitle); p->UpdateData(FALSE); CloseHandle(hProcess); Sleep(100); } return 1;}
- 运行效果
API解释
static CWnd* PASCAL GetForegroundWindow( );//返回指向前台窗口(使用用户当前)的窗口。
DWORD WINAPI GetWindowThreadProcessId( _In_ HWND hWnd, //A handle to the window. _Out_opt_ LPDWORD lpdwProcessId //返回的窗口进程ID);//在得到窗口句柄后,我们可以通过句柄获取 该窗口所属进程ID和线程ID,从而判断创建窗口的进程和线程。
HANDLE WINAPI OpenProcess( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ DWORD dwProcessId);参数说明:1、dwDesiredAccess:想拥有的该进程访问权限PROCESS_ALL_ACCESS //所有能获得的权限PROCESS_CREATE_PROCESS //需要创建一个进程PROCESS_CREATE_THREAD //需要创建一个线程PROCESS_DUP_HANDLE //重复使用DuplicateHandle句柄PROCESS_QUERY_INFORMATION //获得进程信息的权限,如它的退出代码、优先级PROCESS_QUERY_LIMITED_INFORMATION /*获得某些信息的权限,如果获得了PROCESS_QUERY_INFORMATION,也拥有PROCESS_QUERY_LIMITED_INFORMATION权限*/PROCESS_SET_INFORMATION //设置某些信息的权限,如进程优先级PROCESS_SET_QUOTA //设置内存限制的权限,使用SetProcessWorkingSetSizePROCESS_SUSPEND_RESUME //暂停或恢复进程的权限PROCESS_TERMINATE //终止一个进程的权限,使用TerminateProcessPROCESS_VM_OPERATION //操作进程内存空间的权限(可用VirtualProtectEx和WriteProcessMemory) PROCESS_VM_READ //读取进程内存空间的权限,可使用ReadProcessMemoryPROCESS_VM_WRITE //读取进程内存空间的权限,可使用WriteProcessMemorySYNCHRONIZE //等待进程终止2、bInheritHandle:表示所得到的进程句柄是否可以被继承3、dwProcessId:被打开进程的PID如果函数调用成功将返回一个进程句柄值,否则将返回NULL注意:在使用完所获得的进程句柄后一定要调用CloseHandle(handle)来关闭进程的句柄。
BOOL WINAPI EnumProcessModules( _In_ HANDLE hProcess, //A handle to the process. _Out_ HMODULE *lphModule, //An array that receives the list of module handles. _In_ DWORD cb, //The size of the lphModule array, in bytes. _Out_ LPDWORD lpcbNeeded //he number of bytes required to store all module handles in the lphModule array.);
DWORD WINAPI GetModuleFileNameEx( _In_ HANDLE hProcess, //A handle to the process that contains the module. _In_opt_ HMODULE hModule, _Out_ LPTSTR lpFilename, _In_ DWORD nSize);
1 0
- 获取当前焦点所在窗口句柄,通过 句柄获取执行路径
- 根据窗口句柄获取所在程序路径
- VC通过窗口句柄获取应用程序路径
- 获取当前焦点控件句柄
- 获取当前具有输入焦点控件的窗口句柄
- 获取当前具有输入焦点控件的窗口句柄
- 通过ProcessID获取窗口句柄
- 通过鼠标获取窗口句柄
- MFC 获取当前窗口句柄,或者父子窗口句柄
- 通过窗口句柄获取窗口指针!
- MFC 获取当前活动窗口的句柄
- 获取当前活动窗口句柄和标题
- MFC 获取当前活动窗口的句柄
- MFC 获取当前活动窗口的句柄
- 获取当前活动窗口\视图句柄
- C# 通过窗口句柄获取程序运行路径 通过程序运行路径获取程序图标
- 获取进程名,获取进程路径,获取当前进程的窗口句柄。
- 通过VirtualQuery获取当前模块的句柄
- python 一堆业务需要消耗资源(vm), 一批硬件服务器,应该如何安排资源建设?
- C++接口
- Pjax是什么以及为什么推荐大家用
- 设计模式---外观模式(C++实现)
- js2个数组合并并去重
- 获取当前焦点所在窗口句柄,通过 句柄获取执行路径
- java的super和this用法
- java.net.UnknownHostException异常
- Java可变参数方法
- linux-0.11内核深度剖析视频
- Eclipse快捷键
- HttpClient发送get请求
- MySQL数据库的高可用性分析
- 笔试面试经