获取任务栏打开的程序

来源:互联网 发布:自由与荣耀 知乎 编辑:程序博客网 时间:2024/09/21 06:18


添加一个列表控件,并为列表控件添加一个变量: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 ;
}

原创粉丝点击