加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何从Windows任务管理器(应用程序选项卡)获取应用程序在Delphi

发布时间:2020-12-14 04:27:48 所属栏目:Windows 来源:网络整理
导读:我想获得在 Windows任务管理器的应用程序选项卡(不是进程选项卡)中运行和可见的程序列表,并获取它们在HDD上的位置? ?我需要在Delphi中完成它.有人可以帮忙吗? 解决方法 据我所知,任务管理器中的“应用程序”选项卡是顶级窗口的列表,这些窗口不属于其他窗口
我想获得在 Windows任务管理器的应用程序选项卡(不是进程选项卡)中运行和可见的程序列表,并获取它们在HDD上的位置?
?我需要在Delphi中完成它.有人可以帮忙吗?

解决方法

据我所知,任务管理器中的“应用程序”选项卡是顶级窗口的列表,这些窗口不属于其他窗口,没有父窗口,也不是工具窗口.在我的 Process Info中,我有一个名为AppInfo.pas的单元,它返回一个具有这些特征的窗口列表,该列表与您在任务管理器中看到的相匹配.以下是代码的主要部分,它是作为EnumWindows API函数的回调函数编写的:

{$IFDEF DELPHI2007UP}
class function TAppWindowCollection.EnumWinProc(wHandle: HWND; lparam: integer): Bool;
{$ELSE}
function EnumWinProc(wHandle: HWND; lparam: integer): Bool; stdcall;
{$ENDIF}
Const
  MAX_TEXT = MAX_PATH;
var
  WindowItem : TWindowItem;
  strText,strClass : array [0..MAX_TEXT] of char;
  IsAppMainWin : Boolean;
begin
  //Check if the window is a visible application main window.
  IsAppMainWin := IsWindowVisible(wHandle)          AND                        //Visible
                  (GetWindow(wHandle,GW_OWNER) = 0) AND                        //Not owned by other windows
                  (GetParent(wHandle) = 0)          AND                        //Does not have any parent
                  (GetWindowLong(wHandle,GWL_EXSTYLE) AND WS_EX_TOOLWINDOW = 0); //Not a tool window

  if IsAppMainWin then
  begin
    WindowItem := TAppWindowCollection(lparam).Add;

    GetWindowText(wHandle,strText,MAX_TEXT);
    GetClassName(wHandle,strClass,MAX_TEXT);

    WindowItem.FCaption := strText;
    WindowItem.FHandle := wHandle;
    WindowItem.FWindowClass := strClass;
    GetWindowThreadProcessId(wHandle,WindowItem.FProcessID);
  end;

  Result := True;
end;

有关完整源代码,请参阅AppInfo.pas.

and get their locations on HDD

这些只是窗户.如果要获取与每个项目对应的EXE文件的路径,则应首先使用GetWindowThreadProcessID API函数找到拥有此窗口的进程.这就是我在上面的代码中所做的.获得进程ID后,您可以从中获取进程句柄,并枚举其模块.第一个模块是主EXE文件.我在我的TProcessInfo组件中实现了它,它与AppInfo.pas包含在同一个包中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读