Winapi 全力以赴

Winapi 全力以赴,winapi,handle,Winapi,Handle,如何通过Win32获取窗口的所有句柄?我找到了这个代码,但我不知道它是如何工作的 [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam); private List<IntPtr> GetChild

如何通过Win32获取窗口的所有句柄?我找到了这个代码,但我不知道它是如何工作的

[DllImport("user32.dll")]
  [return: MarshalAs(UnmanagedType.Bool)]
  static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc,   IntPtr lParam);

  private List<IntPtr> GetChildWindows(IntPtr parent)  
  {  
    List<IntPtr> result = new List<IntPtr>();  
    GCHandle listHandle = GCHandle.Alloc(result);  
    try  
    {  
         EnumWindowProc childProc = new EnumWindowProc(EnumWindow);  
         EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));  
    }  
    finally  
    {  
         if (listHandle.IsAllocated)  
               listHandle.Free();  
    }  
    return result;  
   }
[DllImport(“user32.dll”)]
[返回:Marshallas(UnmanagedType.Bool)]
静态外部bool EnumChildWindows(IntPtr hwndpresent、EnumWindowsProc lpEnumFunc、IntPtr lParam);
私有列表GetChildWindows(IntPtr父级)
{  
列表结果=新列表();
GCHandle listHandle=GCHandle.Alloc(结果);
尝试
{  
EnumWindowProc childProc=新的EnumWindowProc(EnumWindow);
EnumChildWindows(父、childProc、GCHandle.ToIntPtr(listHandle));
}  
最后
{  
if(listHandle.IsAllocated)
Free();
}  
返回结果;
}

您可以通过阅读Win32文档了解这一点。发布的代码不完整且有缺陷。写下你自己的,最好的理解方法。你的问题不清楚。你在找什么把手?试着准确地描述你想要达到的目标。此外,您的问题被标记为
winapi
。这通常意味着
c
c++
。但是,您介绍的代码是用
c#
编写的。您可能还应该重新标记您的问题,并包括除代码之外的<代码> pJunk> /Cube(或者您喜欢哪种互操作程序)。@提姆WiAPI当然不意味着C或C++。它意味着可以从数百种不同语言访问Win32。@David Win32以C API的形式公开。因此,任何能够使用C接口的语言自然都能够使用Win32。但是,如果一个问题被标记为
winapi
,而没有任何语言标记,那么它就意味着一个C解决方案。这与问题中公布的代码不一致。因此,我建议适当地更新标记。