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



多亏了谷歌,我知道我可以使用第三方应用程序,如nircmdcmdow来调整我的窗口位置,但我想知道是否有机会实现同样的事情与windows默认的cmd工具。

我正在写一个简单的C代码,在两个单独的窗口中运行两个可执行文件。下面是我并行启动两个应用程序的方式:

int main (void)
{
   system("cmd /c start app1");
   system("cmd /c start app2");
}

问题是它们都在相同的位置打开,并且彼此重叠,让我手动移动其中一个。

有任何机会我可以设置他们的位置,虽然我的代码?

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

当然。我现在至少能想到两种方法。

一个有点困难:你必须使用Win32调用以编程方式找到它们的窗口并将它们移动到你想要的位置。我想你不会想那样做的,所以算了吧。

另一种方法是:

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

,然后转到\HKEY_CURRENT_USERConsolea\HKEY_CURRENT_USERConsoleb,并为WindowSizeWindowPosition创建值,就像您在\HKEY_CURRENT_USERConsole中找到的值一样。

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

最简单的方法可能是使用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);
}

最新更新