Winapi 创建控制台应用程序的进程,并处理主窗口

Winapi 创建控制台应用程序的进程,并处理主窗口,winapi,createprocess,Winapi,Createprocess,我正在尝试编写一个程序来管理几个控制台窗口,我的程序将能够CreateProcess()用于新的控制台窗口,获得一个窗口主句柄,并使用该句柄来调整大小、关闭、隐藏、更改标题等。但我找不到可靠的方法来获得主窗口句柄。其目的是创建一个选项卡栏,并通过单击选项卡在创建的控制台窗口之间切换 我尝试了几种方法: 1) 使用windows“cmd.exe”功能设置窗口标题,然后FindWindow(“tmp\u title”…) 这有一个问题,我不需要运行cmd.exe,而且我需要一个processID用于

我正在尝试编写一个程序来管理几个控制台窗口,我的程序将能够
CreateProcess()
用于新的控制台窗口,获得一个窗口主句柄,并使用该句柄来调整大小、关闭、隐藏、更改标题等。但我找不到可靠的方法来获得主窗口句柄。其目的是创建一个选项卡栏,并通过单击选项卡在创建的控制台窗口之间切换

我尝试了几种方法:

1) 使用windows
“cmd.exe”
功能设置窗口标题,然后
FindWindow(“tmp\u title”…)
这有一个问题,我不需要运行
cmd.exe
,而且我需要一个
processID
用于目标程序,而不是
cmd.exe
。也许我应该使用这种方式,但检查子进程

2)
EnumWindows()
然后
CreateProcess()
然后等待40毫秒,然后再次
EnumWindows()
并找到新窗口。 这是不可靠的!有时出于奇怪的原因,我买了两扇新窗户

3) 使用
GetWindowThreadProcessId()
+
EnumWindows()
。这在XP上效果最好,但在win7上,找到的窗口似乎是错误的,它是
GetWindowText()
返回
“DefaultTime”
,而隐藏/显示此窗口没有任何作用。所以这显然是错误的


因此,任何关于如何可靠地完成这项工作的想法,如果可能的话,跨平台(跨windows、XP、Vista、7)都是一个坏主意。即使您获得了一个有效的窗口句柄,那么您仍然无法使用它。这是一个XY问题,我们看不到X。不确定你的意思是什么?你是在问我写这个程序的目的吗?我将更新问题。根据您的描述,听起来您希望将控制台窗口嵌入选项卡式窗口中。那是行不通的。如果两个进程之间没有仔细的协调,就无法创建跨进程窗口层次结构,而且控制台窗口肯定不知道您在做什么古怪的事情。不,我不会把它放在我自己的窗口中。只需隐藏/显示、更改标题,或者更改位置。我认为最可靠的方法可能是将代码注入新创建的进程,然后从那里调用
GetConsoleWindow