获取任务栏打开的程序

2012年刚接触MFC时,学习如何获取任务栏所打开的程序,方法如下:
添加一个列表控件,并为列表控件添加一个变量:CList m_listTask ;
头文件中申明:
static BOOL CALLBACK EnumWindowProc(HWND hWnd, LPARAM lParam);

在OnInitDialog()中写入:
//获取任务栏上打开的程序
EnumWindows(EnumWindowProc,(LPARAM)this) ;
//函数
BOOL CGetLoginQQDlg::EnumWindowProc( HWND hWnd, LPARAM lParam)
{
CGetLoginQQDlg *pThis = (CGetLoginQQDlg*)lParam ;
TCHAR szWindow[MAX_PATH] = {0} ;
::GetWindowText( hWnd, szWindow, MAX_PATH) ;
if( ::IsWindow( hWnd ) && ::IsWindowVisible( hWnd )&&
(::GetWindowLong(hWnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) != WS_EX_TOOLWINDOW &&
::GetWindowLong(hWnd, GWL_HWNDPARENT) == 0)
{
DWORD dwPID; //保存进程标识符
GetWindowThreadProcessId(hWnd, &dwPID) ;
HANDLE hBrowser = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dwPID) ;
WCHAR exePath[MAX_PATH] = {0};
//添加 #include “Psapi.h”
//#pragma comment(lib, “Psapi.lib”)  ;
//获得某个正在运行的EXE或者DLL的全路径
GetModuleFileNameEx( hBrowser, NULL, exePath, MAX_PATH) ;
CString strTemp = exePath ;
if ( !strTemp.IsEmpty() && strTemp.Find( _T(“explorer.exe”)) == -1)
{
pThis->m_listTask.AddString( szWindow ) ;
}
}
return TRUE ;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

表情
  • 默认
  • 梦幻西游
  • 私人订制