微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何获取 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 举报,一经查实,本站将立刻删除。