0

同じユーザーが複数の同時セッションでWindows7ステーションにログインしています(同時RDPまたはステーションでログインしてからRDP経由でログインするなど)。

更新: わかりました、この質問での私の研究はこの時点で立ち往生しています(それほど複雑でないコードを書くためのPythonの例):

#!/usr/bin/env python
import ctypes
import ctypes.wintypes as wintypes
def enum_desktops():
    GetProcessWindowStation = user32.GetProcessWindowStation

    EnumDesktops = user32.EnumDesktopsW
    EnumDesktopsProc = ctypes.WINFUNCTYPE(wintypes.BOOL, wintypes.LPWSTR, wintypes.LPARAM)
    hwinsta = GetProcessWindowStation()

    def foreach_desktop(desk_name, lparam):
        print("Desktop %s"%desk_name)
        return True
    EnumDesktops(hwinsta, EnumDesktopsProc(foreach_desktop), desk_lparam)

この関数は、「デフォルト」および「Winlogon」デスクトップに関する情報を出力します。ウィンドウステーションを列挙しようとすると、「WinSta0」のみが表示されますが、別のログオンセッションで開始された可能性のあるターゲットプロセスを確認できます。

では、ターゲットデスクトップのウィンドウを見つけるために何を使用すればよいですか?

現時点では、デーモンはオプションではありません。

4

2 に答える 2

2

すべてのデスクトップ セッションで起動されるバックグラウンド アプリまたはタスク トレイ アプレットを用意します。(次のレジストリ キーに EXE パスを追加することで簡単にインストールできます: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\Run)。

そのインストールされたアプリケーションにあるコードは、次の 2 つのことを行います。

  1. すべてのデスクトップ ウィンドウの列挙と操作は、ローカル デスクトップとしか対話できません。

  2. 別のデスクトップ セッションで実行される「サーバー」アプリの「クライアント」として機能します。サーバーアプリは、クライアントがウィンドウスキャンを実行するようにトリガーします。これには、ほぼすべてのプロセス間通信メカニズムを使用できます。

于 2013-03-09T23:30:20.393 に答える