4

Windows 7 で作業しており、Sysinternals Desktops ユーティリティを使用して複数のデスクトップを使用しています。すべてのデスクトップで実行されているすべてのプロセスを一覧表示したいだけです。

Process[] processlist = Process.GetProcesses();
foreach (Process p in processlist)
{
    listBox1.Items.Add(p.ProcessName + " " + p.Id + " " + p.MainWindowTitle); 
}

このコードを使用すると、現在のデスクトップで実行されているすべてのプロセスを取得できますが、別のデスクトップ内で実行されているプロセスを取得することはできません。

デスクトップのみが単一のプロセスとして表示されます。

複数のデスクトップ内で子プロセスを取得するにはどうすればよいですか?

4

1 に答える 1

2

うん、私はそれを得た.. RnD を行った後。

私は user32.dll とこれらのメソッドのいくつかを使用しています。

何かを達成したい場合は、これらの関数を使用してください。

[DllImport("user32.dll", EntryPoint = "EnumDesktopWindows", ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool EnumDesktopWindows(IntPtr hDesktop, EnumDelegate lpEnumCallbackFunction, IntPtr lParam);

[DllImport("user32.dll", EntryPoint = "GetWindowText", ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)]
private static extern int _GetWindowText(IntPtr hWnd, StringBuilder lpWindowText, int nMaxCount);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindowVisible(IntPtr hWnd);

[DllImport("user32.dll")]
private static extern bool EnumDesktops(IntPtr hwinsta, EnumDesktopProc lpEnumFunc, IntPtr lParam);

[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr SetActiveWindow(IntPtr hWnd);

[DllImport("user32.dll", SetLastError = false)]
private static extern IntPtr GetDesktopWindow();


[DllImport("user32.dll")]
private static extern IntPtr GetProcessWindowStation();

[DllImport("user32.dll")]
private static extern IntPtr OpenDesktop(string lpszDesktop, uint dwFlags, bool fInherit, uint dwDesiredAccess);

[DllImport("user32.dll")]
private static extern bool SwitchDesktop(IntPtr hDesktop);

これらの方法を使用することで、すべての仮想デスクトップで実行中のすべてのプロセスを一覧表示できます。

于 2013-06-27T12:51:07.733 に答える