簡體   English   中英

獲取處理Metro應用程序的句柄

[英]Get handle to process for a Metro app

從桌面應用程序,我使用ActivateApplication啟動一個metro應用程序,我想將out參數進程id轉換為進程句柄,以便我可以使用WaitForSingleObjectExGetExitCodeProcess 我看到OpenProcess應該完全符合我的要求,但它不起作用。 返回的句柄始終為null。 我猜兩種可能性之一:

  1. 啟動的應用程序是一個城域應用程序,而不是桌面應用程序,這就是為什么我不被允許處理其進程。
  2. 我在OpenProcess中請求的訪問權限未經應用程序流程批准。 我可以使用哪種訪問權限來確保它不是這個? 我正在尋找任何人都可以使用的訪問權限。 有這樣的事嗎? 如果沒有,有沒有辦法可以控制ActivateApplication調用的訪問權限?

您可能想嘗試這個,循環瀏覽窗口並比較進程ID以找到正確的句柄。

HWND GetProcessWindow( DWORD processId )
{
// Now need to run a loop to get the correct window for process.
bool bFound = false;
HWND prevWindow = 0;

while ( ! bFound ) {
    HWND desktopWindow = GetDesktopWindow();
    if ( ! desktopWindow )
        break;

    HWND nextWindow = FindWindowEx( desktopWindow, prevWindow, NULL, NULL );
    if ( ! nextWindow )
        break;

    // Check whether window belongs to the correct process.
    DWORD procId = -1;
    GetWindowThreadProcessId( nextWindow, &procId );

    if ( procId == processId ) {
        // Add additional checks. In my case, I had to bring the window to front so these checks were necessary.
        wchar_t windowText[ 1024 ];
        if ( IsWindowVisible( nextWindow ) && ! IsIconic( nextWindow ) && GetWindowText( nextWindow, ( LPWSTR )windowText, sizeof( windowText ) / sizeof( wchar_t ) )
            && ! GetParent( nextWindow ) )
            return nextWindow;
    }

    prevWindow = nextWindow;
}

return 0;

}

參考: https//social.msdn.microsoft.com/forums/windowsdesktop/en-us/7e25e104-36cb-41ac-8f36-0e4c6b6146a3/finding-hwnd-of-metro-app-using-win32-api

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM