Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Delphi запустить и задать координаты окна cmd

Евгений Попов Мастер (1570), на голосовании 7 лет назад
Здравствуйте. Нужно запустить cmd и указать координаты положения этого окна. Например по центру экрана или Х 20 у 40. Желательно чтобы это влияло только на запускаемых командную строку. Тоесть если запустить самому cmd то не учитывались координаты предыдущего расположения. У меня 2 экрана и требуется чтобы на 2 показывало cmd когда вызывает делфи приложение, но все остальные окна cmd появлялись только на первом экране.
Голосование за лучший ответ
Андванс Чесс Просветленный (31949) 7 лет назад
Подгружайте user32.dll, используйте функции FindWindow, GetWindowRect и SetWindowPos. На координатах запуска нового приложения это не скажется. Для поиска ответов на подобные вопросы активно используйте справочную базу MSDN.
... Гений (84891) 7 лет назад
Используйте CreateProcess для вызова cmd
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx
В STARTUPINFO задаёте координаты и не забудьте про правильные флаги dwFlags
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686331(v=vs.85).aspx

В структуру PROCESS_INFORMATION попадает ID процесса и потока
https://msdn.microsoft.com/ru-ru/library/bb145563.aspx

И делаете там уже что хотите с процессом =)
В т. ч. н-р по ID потока можно через EnumThreadWindows найти дескриптор окна
https://msdn.microsoft.com/en-us/library/windows/desktop/ms633495(v=vs.85).aspx
и с помощью MoveWindow задать размеры окна в дальнейшем (ну вдруг захотите программно перенести уже после запуска)

На C++ выглядит так:
(Delphi под руками нет, а где-нить случайно наврать не хочется, но изменения будут только немного синтаксические, т. к. обычные вызовы WINAPI)

STARTUPINFO startupInfo;
PROCESS_INFORMATION processInfo;
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.dwX = 20;
startupInfo.dwY = 40;
startupInfo.dwFlags = STARTF_FORCEONFEEDBACK + STARTF_USESHOWWINDOW + STARTF_USEPOSITION;
startupInfo.cb = sizeof(startupInfo);
startupInfo.wShowWindow = SW_SHOWNORMAL;

TCHAR szCmdLine[] = "cmd.exe";
TCHAR szPath[] = "C:\\"; //Ну или какой там рабочий путь захотите =)

CreateProcess(NULL, szCmdLine, NULL, NULL, false, 0, NULL, szPath, &startupInfo, &processInfo);

P.S: Скрин не стал уже присылать (ну окно в заданной позиции =), но поверьте код рабочий
Похожие вопросы