获取任务栏打开的程序

本文介绍如何使用EnumWindows、GetWindowThreadProcessId和OpenProcess等API获取任务栏上显示的程序窗口,并通过GetModuleFileNameEx获取程序的完整路径,过滤掉explorer.exe,将其他程序名称添加到列表控件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值