none
如何使用C#获得所有空间的句柄? 或者说枚举之后再从中选择需要的句柄? 谢谢! RRS feed

  • 问题

  • 如何使用C#获得所有空间的句柄? 或者说枚举之后再从中选择需要的句柄? 谢谢!

    我自己写了个:

             try
                  {
                    mainWindowHwnd = FindWindow(null, p.MainWindowTitle.ToString());//枚举子窗口 
                    tabHwnd = FindWindow("WindowsForms10.SysListView32.app.0.202c666", p.MainWindowTitle.ToString());
                     // FindWindowEx(mainWindowHwnd, tabHwnd, "WindowsForms10.Window.8.app.0.202c666", IntPtr.Zero);
                     IntPtr tabHwnd1 = FindWindowEx(mainWindowHwnd, IntPtr.Zero, "WindowsForms10.SysTabControl32.app.0.202c666", null);
                      lvwHwnd = FindWindowEx(mainWindowHwnd, IntPtr.Zero, "WindowsForms10.SysListView32.app.0.202c666", null);
    
                                if (lvwHwnd == (IntPtr)0)
                                    throw new Win32Exception();
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message);  
    			return;
                            }

     

    其中WindowsForms10.Window.8.app.0.202c666和WindowsForms10.SysTabControl32.app.0.202c666以及WindowsForms10.SysListView32.app.0.202c666

    是我使用SPY++捕获的 但是在我的程序中却获取不到WindowsForms10.SysListView32.app.0.202c666,但是

    WindowsForms10.Window.8.app.0.202c666和WindowsForms10.SysTabControl32.app.0.202c666可以获取其句柄。

    WindowsForms10.SysListView32.app.0.202c666属于WindowsForms10.SysTabControl32.app.0.202c666的子窗口)

     

    《---类似这种ListView的句柄 如何获取呢

     

    谢谢各位的帮助!

     


    2011年11月17日 14:50

全部回复

  • 你好 Wenny,

    欢迎来到MSDN中文论坛。

     

    C#语言活得句柄的方法至少有2种:

    1.       C#中有个Handle的属性。

    Control.Handle 属性

    2.       Windows API FindWindow FindWIndowEx

    参考2FAQ

                    FAQsVisual C#.NET中如何返回窗口句柄?

                    FAQ Item: How to retrieve a Window Handle in Visual C#.NET?(英文的)

    希望对您有所帮助。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2011年11月18日 9:38
    版主
  •  

     你好 Rocky,

    谢谢你的回复! 

    我是想获得其他窗口的组件的句柄,使用SPY可以获取,但是在我的程序中使用FindWindowEx(mainWindowHwnd, IntPtr.Zero, "WindowsForms10.SysListView32.app.0.202c666", null);却获取不到。

     



    2011年11月22日 14:02
  •  

     你好 Rocky,

    谢谢你的回复! 

    我是想获得其他窗口的组件的句柄,使用SPY可以获取,但是在我的程序中使用FindWindowEx(mainWindowHwnd, IntPtr.Zero, "WindowsForms10.SysListView32.app.0.202c666", null);却获取不到。

     



    你确定他们是直接父子窗口吗?

    我也有自己的签名档哦!
    2011年11月23日 1:55
  • 是的。 正如我一开始所描述的:

    “(WindowsForms10.SysListView32.app.0.202c666属于WindowsForms10.SysTabControl32.app.0.202c666的子控件)”

    为了验证,我使用SPY++获取了 WindowsForms10.SysListView32.app.0.202c666 的句柄,接着向上寻找父级句柄, 在和程序里的对照发现并没有错误。

    *使用EnumChildWindows 也能找到此控件的句柄 但是 为何不能直接FindWindowEx获取。。

    我尝试了

    HWND hwnd=FindWindow(NULL, "Target app");

    FindWindowEx(hwnd, NULL, "SysListView32", NULL);

    和 FindWindowEx(hwnd, NULL, "WindowsForms10.SysListView32.app.0.202c666", NULL);

    成功 获得窗口句柄 hwnd,但是他的子控件 WindowsForms10.SysListView32.app.0.202c666 却无法获取。

    我之后使用了C++ ,FindWindowEx编写了同样的程序,但是依旧无法获得 WindowsForms10.SysListView32.app.0.202c666 的句柄。

    请指教 谢谢。



    2011年11月23日 5:49
  • 不知道你看过这个链接没有:

    http://www.pinvoke.net/default.aspx/user32.FindWindowEx

     


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2011年11月23日 9:16
    版主