Вопрос

I'm trying to recover some items from Windows taskmanager. With this code i recovered the SysListView32 handle from Process TAB: (dlgItem)

IntPtr mainWindowHandle = Process.GetProcessesByName("taskmgr")[0].MainWindowHandle;
Api.WindowPlacement lpwndpl = new Api.WindowPlacement();
lpwndpl.length = Marshal.SizeOf((object) lpwndpl);
Api.GetWindowPlacement(mainWindowHandle, ref lpwndpl);
bool flag1 = lpwndpl.showCmd == 1 || lpwndpl.showCmd == 3;
IntPtr dlgItem = Api.GetDlgItem(Api.FindWindowEx(mainWindowHandle, IntPtr.Zero, (string) null, (string) null), 1009);

How can i recover the handle for SysListView32 Services TAB?

Some API definitions im using:

internal static class Api
{
    public struct Rect
    {
      private int left;
      private int top;
      private int right;
      private int bottom;
    }

    public struct Point
    {
      private int x;
      private int y;
    }

    public struct WindowPlacement
    {
      public int length;
      public int flags;
      public int showCmd;
      public Api.Point ptMinPosition;
      public Api.Point ptMaxPosition;
      public Api.Rect rcNormalPosition;
    }


    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool GetWindowPlacement(IntPtr hWnd, ref Api.WindowPlacement lpwndpl);

    [DllImport("user32.dll")]
    public static extern IntPtr GetDlgItem(IntPtr hDlg, int nIDDlgItem);


    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
}
Это было полезно?

Решение

You must use FindWindowEx with a class name (lpszClass) equal to "#32770" and a Window Title (lpszWindow) equal to "Services". The ID of the child SysListView32 is then 3504 (0x0000db0).

Those datas come from Spy++, used on a French Windows Seven Pro 32bits OS.

Task Manager Windows Tree

SysListView32 properties

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top