如何获取 UWP 托管应用程序的 PID?

问题描述

我正在遍历所有窗口。

我找到了一个名称如下的窗口:“Groove-Musik”。 它有 hwnd 1111。

我想知道它的进程名称/PID。

当我在任务管理器中查看它时,我看到以下内容

enter image description here

我右键单击它们的项目并选择“详细信息”,我看到以下内容

enter image description here

现在我尝试通过代码来做同样的事情。

我使用以下内容

Dim ProcID&
GetwindowThreadProcessId(1111,ProcID) 

ProcID 不是 8028。

相反,它返回以下进程的 proc id:

enter image description here

它与所有 UWP 托管应用程序(如计算器、Groove、照片、电影)相同。任务管理器指向Music.UI.exe、Video.UI.exe,但我的代码总是指向这个愚蠢的ApplicationFrameHost.exe。

我怎样才能获得正确的 PID/我做错了什么?

谢谢!

编辑:根据建议,我现在尝试了以下操作: 我在 hwnd 1111 上运行了“EnumChildWindows”。

结果是:

window hwnd: 1111
window text: "Groove-Musik"
window process: "applicationframehost.exe",PID: 22216
    ----------------
    childwindow #1
    child window hwnd: 0
    child window classname: ""
    child window text: ""
    child window process: "applicationframehost.exe",PID: 22216
    ----------------
    childwindow #2
    child window hwnd: 196874
    child window classname: "ApplicationFrameTitleBarWindow"
    child window text: ""
    child window process: "applicationframehost.exe",PID: 22216
    ----------------
    childwindow #3
    child window hwnd: 197220
    child window classname: "ApplicationFrameTitleBarWindow"
    child window text: ""
    child window process: "applicationframehost.exe",PID: 22216
    ----------------
    childwindow #4
    child window hwnd: 131488
    child window classname: "ApplicationFrameInputSinkWindow"
    child window text: ""
    child window process: "applicationframehost.exe",PID: 22216

我被要求发布 calc.exe 的结果。 在这里,但我想指出的是,此时,它的进程并未暂停。

enter image description here

这是我单击计算器应用程序时的详细信息视图:

enter image description here

window hwnd: 202848
window text: "Rechner"
window process: "applicationframehost.exe",PID: 16500
    ----------------
    childwindow #1
    child window hwnd: 0
    child window classname: ""
    child window text: ""
    child window process: "[system process]",PID: 0
    ----------------
    childwindow #2
    child window hwnd: 201864
    child window classname: "ApplicationFrameTitleBarWindow"
    child window text: ""
    child window process: "applicationframehost.exe",PID: 16500
    ----------------
    childwindow #3
    child window hwnd: 398148
    child window classname: "Windows.UI.Core.CoreWindow"
    child window text: "Rechner"
    child window process: "calculator.exe",PID: 17600
    ----------------
    childwindow #4
    child window hwnd: 201862
    child window classname: "ApplicationFrameTitleBarWindow"
    child window text: ""
    child window process: "applicationframehost.exe",PID: 16500
    ----------------
    childwindow #5
    child window hwnd: 464044
    child window classname: "ApplicationFrameInputSinkWindow"
    child window text: ""
    child window process: "applicationframehost.exe",PID: 16500

通过这里的请求是我如何获得初始窗口:

' The desktop is the highest window
hw = GetDesktopWindow()
' It's first child is the 1st top level window
hw = Getwindow(hw,GW_CHILD)
' Now load all top level windows

Do
    lCaptionLen = GetwindowTextLength(hw)
    sCaption = VBA.Space(lCaptionLen + 1)
    lCaptionLen = GetwindowText(hw,sCaption,lCaptionLen + 1)
    
    'Some initial checks if the window is visible to the user
    'like IsVisible(hw),IsWindow(hw),etc

    hw = Getwindow(hw,GW_HWNDNEXT)
    
Loop While hw <> 0

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)