2013-12-20 35 views
2

我試圖從Windows任務管理器恢復某些項目。 有了這個代碼,我從恢復進程選項卡的SysListView32手柄: (dlgItem)如何訪問Windows任務管理器中的SysListView32服務選項卡

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); 

我如何可以恢復SysListView32服務選項卡手柄?

一些API定義即時通訊使用:

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); 
} 
+1

貌似[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),這將是很容易如果你能告訴你想要達到什麼效果,可以提供幫助 –

回答

0

必須使用FindWindowEx與類名(lpszClass)等於 「#32770」 和窗口標題(lpszWindow)等於 「服務」。子SysListView32的ID然後是(0x0000db0)。

這些數據來自Spy ++,用於法語Windows Seven Pro 32位操作系統。

Task Manager Windows Tree

SysListView32 properties

+0

這就是解決方案,使用正確的控制ID(3504代替1009) – user3122306

相關問題