Winapi 不使用GetWindowThreadProcessId(c#.net 4.0)从窗口句柄获取进程id
我们的应用程序最近从.NET3.5切换到.NET4。出现的一个问题是GetWindowThreadProcessId不再工作 微软有一个可用的热修复程序,但在每台客户机器上安装它会很痛苦,而且可能会导致其他问题。我更喜欢在附近工作 如microsoft所述,问题在于: 在.NET Framework远程处理应用程序中,您有一个MarshallByRefObject对象。该对象包含一个返回IntPtr类型的方法。该对象通过进程边界传递。当对象序列化时,会引发SerializationException异常,您会收到以下错误消息: 流“Invalid”中的类型代码无效 出现此问题的原因是,当CLR序列化IntPtr时,远程处理代码将IntPtr类型视为基元类型。但是,当二进制格式化程序序列化IntPtr时,远程处理代码将IntPtr类型视为无效类型。”Winapi 不使用GetWindowThreadProcessId(c#.net 4.0)从窗口句柄获取进程id,winapi,c#-4.0,.net-4.0,interprocess,intptr,Winapi,C# 4.0,.net 4.0,Interprocess,Intptr,我们的应用程序最近从.NET3.5切换到.NET4。出现的一个问题是GetWindowThreadProcessId不再工作 微软有一个可用的热修复程序,但在每台客户机器上安装它会很痛苦,而且可能会导致其他问题。我更喜欢在附近工作 如microsoft所述,问题在于: 在.NET Framework远程处理应用程序中,您有一个MarshallByRefObject对象。该对象包含一个返回IntPtr类型的方法。该对象通过进程边界传递。当对象序列化时,会引发SerializationExcept
那么,还有其他选择吗?是否有其他方法可以从窗口句柄获取进程id?或者我可以以不同的方式封送我的IntPtr以避免此错误吗?是否尝试将返回值替换为空值?(因为我认为您不需要线程id) 而不是:
[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);