首页 > 系统相关 >如何获取Windows应用程序列表

如何获取Windows应用程序列表

时间:2023-01-29 12:34:19浏览次数:72  
标签:Function Windows hwnd Long 列表 pWnd 应用程序 ByVal Declare


Windows任务管理器的应用程序栏包含任务窗口的列表。要获取此列表,窗口必须满足以下几个条件:

(1) 必须可见(2) 包含一个标题
(3) 不能被其他窗口包含

下面我给出源程序和调用示例:

VC++源代码(使用VC6):
//获取任务列表且添加到列表框中.
BOOL GetAppList(CListBox &LstBox)
{
CString strCaption;
LstBox.ResetContent();
ASSERT_VALID(AfxGetMainWnd());
CWnd *pWnd=AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
if(pWnd==NULL) return FALSE;
while(pWnd)
{
if(pWnd->IsWindowVisible() && pWnd->GetWindowTextLength() && !pWnd->GetOwner())
{
pWnd->GetWindowText(strCaption);
LstBox.AddString(strCaption);
}
pWnd=pWnd->GetWindow(GW_HWNDNEXT);
}
return TRUE;
}//调用示例:
void CGetAppListDlg::OnGetAppList()
{
GetAppList(m_ListBox1);
}

VB源代码(使用VB6,具体调用很简单,我就不写了)

Option Explicit
Private Declare Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As LongPrivate Const GW_OWNER = 4
Private Const GWL_EXSTYLE = (-20)Private Const WS_EX_TOOLWINDOW = &H80
Private Const WS_EX_APPWINDOW = &H40000//判断窗口是否为任务应用函数,参数为窗口句柄
Public Function IsTaskbarApp(ByVal hwnd As Long) As Boolean
Dim ExtendStyle As Long
Dim hParent As Long
Dim BoolIsTaskBarApp As Boolean
ExtendStyle = GetWindowLongPtr(hwnd, GWL_EXSTYLE)
hParent = GetParent(hwnd)
BoolIsTaskBarApp = CBool((IsWindowVisible(hwnd) <> 0) And _
(GetWindow(hwnd, GW_OWNER) = 0) And _
(hParent = 0 Or hParent = GetDesktopWindow()))
If (ExtendStyle And WS_EX_TOOLWINDOW) Then BoolIsTaskBarApp = False
If (ExtendStyle And WS_EX_APPWINDOW) Then BoolIsTaskBarApp = True
IsTaskbarApp = BoolIsTaskBarApp
End Function

'-------------------------------------------
' 作者:唐细刚
 

标签:Function,Windows,hwnd,Long,列表,pWnd,应用程序,ByVal,Declare
From: https://blog.51cto.com/u_8260968/6025684

相关文章

  • 利用火绒随意关停windows的defender
     共两步: 第一步:    第二步:   ......
  • windows server 2012 R2 内存占用过高优化
    现象:windowsserver 2012R2 使用中,任务管理器经常显示占用内存>96%,将所有进程占用内存加起来并没有占到系统内存这么多分析办法:使用RAMMap查看了机器内存使用情况,如......
  • Oracle行转多行 字符串列表转数字
    原格式转换后格式适用于3,4这样逗号分隔的数字组成的字符串类型转换成3和4两行sql:SELECTREGEXP_SUBSTR(guarantee_method,'[^,]+',1,LEVEL)guarantee_method......
  • 记录windows2012部署asp项目
    安装mysql5.6安装本地环境.NET4.6.1环境安装IIS部署......
  • windows11预览版装WSA心得
    windows11预览版装WSA心得这两天心血来潮想要装个WSA(安卓windows子系统),原来一直用的安卓模拟器(mumu啊蓝叠啊逍遥啊),但感觉像wsa这种安卓系统与主系统融合的模式更带感,于......
  • 重装系统及Windows软件设置流程记录
    前言本文主要是记录给小白(女朋友)重装系统的流程,包括重装系统使用的工具和进入新系统后的软件配置。一、重装系统1.1启动盘工具ventoy可以满足一个U盘安装多个系统,下载......
  • 提高程序员工作效率的工具合集windows+ios
    提示:集合各种程序员必备工具,望学习收藏~文章目录​​前言​​​​一、Markdowm​​​​1:菜单栏​​​​2:文件​​​​3:编辑​​​​4:段落​​​​5:格式​​​​6:视图​​​......
  • Qt里的QSoundEffect在Linux和Windows平台上的差异
    最近写一个morse码练习软件,使用Qt开发,用到了QSoundEffect。因为Qt跨平台的特性,把Linux下的源代码直接放到Windows下编译可以直接通过,但运行起来却有问题。在Linux下节奏正......
  • 【转】解决 Windows 10 端口被 Hyper-V 随机保留(占用)的问题
    原文地址:https://zhaoji.wang/solve-the-problem-of-windows-10-ports-being-randomly-reserved-occupied-by-hyper-v/ 大概从半年前开始,我发现我的代理软件配置的端口......
  • windows 10安装和配置NeoVim 0.8.2
    安装neovim下载最新版本:https://github.com/neovim/neovim/releases/tag/stable下载成功后,无须安装,解压安装包,放入合适的目录中,比如C:\nvim-win64中。NeoVim有两个启动......