多亏了谷歌,我知道我可以使用第三方应用程序,如nircmd
或cmdow
来调整我的窗口位置,但我想知道是否有机会实现同样的事情与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
,并为WindowSize
和WindowPosition
创建值,就像您在\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);
}