我可以以编程方式设置Windows控制台位置吗?

时间:2015-10-08 00:30:37

标签: c cmd console position

感谢Google,我知道我可以使用nircmdcmdow之类的第三方应用来调整我的窗口位置,但我想知道是否有任何机会在Windows默认情况下实现相同的功能{ {1}}工具。

我正在编写一个简单的C代码,它在两个独立的窗口中运行两个可执行文件。这就是我并行启动两个应用程序的方法:

cmd

问题是他们都在同一个位置打开并且彼此坐在上面让我手动移动其中一个。

我是否有机会通过我的代码设置他们的位置?

为了更清晰起见,我在Windows上使用CygWin。

2 个答案:

答案 0 :(得分:0)

当然。我现在至少有两种方法可以想到。

一个有点困难:你必须使用Win32调用以编程方式找到他们的窗口并将它们移动到你想要的位置。我不认为你想这样做,所以忘掉它。

另一种方法是执行以下操作:

system("cmd /c start \"a\" app1");
system("cmd /c start \"b\" app1");

然后转到\\HKEY_CURRENT_USER\Console\a\\HKEY_CURRENT_USER\Console\b并为WindowSizeWindowPosition创建值,就像您在\\HKEY_CURRENT_USER\Console中找到的值一样。

(请注意,为了在WindowPosition中创建\\HKEY_CURRENT_USER\Console值,您必须首先取消选中"让窗口选择窗口位置"复选框在布局选项卡中命令提示符的选项对话框。)

答案 1 :(得分:0)

执行此操作的最简单方法可能是使用FindWindow查找每个控制​​台窗口的句柄,然后使用SetWindowPos设置其位置:

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

int main(void)
{
     /* start your applications with known window titles */

     HWND handle1 = FindWindow(NULL, "Console Window 1's Title");
     HWND handle2 = FindWindow(NULL, "Console Window 2's Title");

     SetWindowPos(handle1, NULL, newX1, newY1, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
     SetWindowPos(handle2, NULL, newX2, newY2, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}