gpt4 book ai didi

.net - 从 .NET 与非托管进程对话

转载 作者:行者123 更新时间:2023-12-01 06:47:09 25 4
gpt4 key购买 nike

我正在使用 Process.Start 从 .NET 创建一个进程。新流程是用 C/C++ 编写的遗留应用程序。为了与它通信,我需要对其主线程执行等效于 PostThreadMessage 的操作。

我很乐意使用 P/Invoke 来调用 PostThreadMessage,但是我看不到如何找到主线程。 Process 对象有一个线程集合,但文档说集合中的第一项不必是主线程。 Thread 对象本身似乎没有任何迹象表明它们是否是主要的。虽然我可以在创建进程后立即查看线程集合,但这并不能保证只有一个。

那么,有没有办法让我从 .NET 确定另一个进程的主线程,或者我是否需要求助于使用 Win32 的 CreateProcess?

谢谢,

鲍勃

最佳答案

如果进程有窗口,可以使用GetWindowThreadProcessId获取 GUI 线程的 API,通常是主线程(使用 Process.MainWindowHandle 获取窗口句柄)。

另一种选择是枚举线程( Process.Threads )并根据 StartTime 选择第一个启动的线程。 :

Process process = Process.Start(...);
process.WaitForInputIdle();
ProcessThread primaryThread = process.Threads.OrderBy(t => t.StartTime).First();

但这可能不是一种非常准确的技术......

关于.net - 从 .NET 与非托管进程对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com