C# 需要C夏普win32,PInvoke API

C# 需要C夏普win32,PInvoke API,c#,winapi,interop,pinvoke,C#,Winapi,Interop,Pinvoke,长时间侦听器,第一次调用。有人知道Win32API有一个好的互操作库吗 我找到了pinvok.net,没问题。 (FWIW我通过以下说明获得了与MSVS 2010合作的加载项: \PInvoke\KB200711000198.htm 使用10.0而不是9.0) …而且MSDN中的Windows API代码包1.1似乎没有user32.dll中的基本Win32功能,或者我遗漏了什么 更多细节。。。 我试图获取一个外部窗口,并使其成为我的managed System.Windows.Form(主窗体

长时间侦听器,第一次调用。有人知道Win32API有一个好的互操作库吗

我找到了pinvok.net,没问题。 (FWIW我通过以下说明获得了与MSVS 2010合作的加载项: \PInvoke\KB200711000198.htm 使用10.0而不是9.0)

…而且MSDN中的Windows API代码包1.1似乎没有user32.dll中的基本Win32功能,或者我遗漏了什么

更多细节。。。
我试图获取一个外部窗口,并使其成为我的managed System.Windows.Form(主窗体的面板或选项卡中的嵌入式GUI)中控件的子窗口。在这里和谷歌上研究一下,Win32/user32.dll似乎是一条出路。我的应用程序是一个启动第三方GUI(DLL和EXE)的框架。第三方代码/表单都是非托管(主要是MSVC)代码。这些非托管表单是从我的流程层次结构中启动的。如果可能的话,我会选择留在.NET中。

大部分Windows 32 API都是在框架本身的.NET中公开的,因此很少需要p/调用user32.dll。您最好使用框架的托管版本


当您确实需要设置p/Invoke调用时,对于调用大多数Win32 API所需的特定API来说,是一个很好的资源。

可用的最佳互操作库是.NET Framework。User32.dll被Windows窗体包装得非常好

Windows API代码包集中于包装在Vista和Win7中添加的API。这些并不是user32的新增内容,主要是shell内容

如果您能够确切地说明您想要使用什么user32api,您可能会得到更好的答案


查看编辑后:Win32 SDK文档明确禁止您尝试执行的操作。窗口的父级必须属于同一进程。不过,Windows中存在一些appcompat黑客,旨在支持不存在此限制的Windows 3.x程序。因为它不支持线程


你可以试试,但小心你会使保修失效的。P/Invoke SetParent()。请访问pinvoke.net以获取所需的声明。

Win32 API的一些包装器的问题在于它们没有很好地公开。Directory.GetFiles不正确。当底层Win32 API允许流式传输时,为什么它会返回数组?直到第4版才修复>@Bear:是的,如果API在以后编写的话,有些地方的生活会更好(Directory.GetFiles早于泛型,所以当时IEnumerable不是一个选项…)。然而,我仍然认为,由于各种原因,包括其他人的可维护性、易用性、开发时间等,与使用框架相比,包装自己的方法更好,这是一种罕见的情况。@Bear:(和Directory.GetFiles()在.NET 4中仍然返回字符串[]-尽管DirectoryInfo.EnumerateFiles可以工作,并且是.NET 3.5:)@里德:是的,你说得对,我不是说他们改变了文件。很抱歉,当我说他们已经修复了枚举文件方法时,我正在考虑它。@Reed。实际上,根据您的链接,DirectoryInfo.EnumerateFiles仅在版本4中受支持。Sysinternals procexp.exe将子窗口的进程显示为“我的主进程”下的节点。。。那有帮助吗?没有。父子进程关系在Windows中几乎没有实际优势。唯一的角度是控制台应用程序默认情况下可以继承父控制台。以及由CreateJobObject启动的“作业”概念,它允许将进程作为一个组进行终止。在Vista+中彻底搞砸了。Windows和*nix之间有很大区别。顺便说一句,Windows中没有fork()。