與桌面的執行緒連線

進程連接到視窗月臺之後,系統會將桌面指派給建立連線的執行緒。 系統會根據下列規則決定要指派給執行緒的桌面:

  1. 如果執行緒已呼叫 SetThreadDesktop 函式,它會連線到指定的桌面。
  2. 如果執行緒未呼叫 SetThreadDesktop,它會連線到繼承自父進程的桌面。
  3. 如果執行緒未呼叫 SetThreadDesktop 且未繼承桌面,系統會嘗試開啟以MAXIMUM_ALLOWED存取並聯機到桌面,如下所示:
    • 如果在建立進程時所使用的STARTUPINFO結構的lpDesktop成員中指定桌面名稱,執行緒就會連接到指定的桌面。
    • 否則,執行緒會連接到進程所連接之視窗月臺的預設桌面。

呼叫 CloseDesktop 函式,無法關閉此連線程式期間指派的桌面。

當進程連接到桌面時,系統會搜尋進程的控制碼資料表中是否有繼承的控制碼。 系統會使用找到的第一個桌面控制碼。 如果您想要讓子進程連線到特定的繼承桌面,您必須確定唯一所需的控制碼標示為可繼承。 如果子進程繼承多個桌面控制碼,則未定義桌面連線的結果。

將進程連接到桌面時,系統開啟的桌面控制碼無法繼承。

處理視窗月臺的連線