Форум: "WinAPI";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизCreateProcess консольной программы Найти похожие ветки
← →
Вольный Стрелок © (2006-11-23 18:37) [0]Из одной консольной программы вызываю другую и хочу, чтобы "консоль" для них была общая, а не отдельное окно для вызванной программы. Какие параметры установить надо?
ЗЫ вызываемая программа - посторонняя, есть только ЕХЕ
← →
Rouse_ © (2006-11-23 18:58) [1]Консоль общая? Это как?
← →
Вольный Стрелок © (2006-11-23 19:10) [2]Ну, как из фара вызывается консольная программа в том же окне.
← →
Rouse_ © (2006-11-23 19:19) [3]WinExec вестимо...
← →
Вольный Стрелок © (2006-11-23 20:05) [4]Я спрашивал про параметры, а не про функцию.
Кроме того, в справке написано про winexec такThis function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.
так что вернулись к [0]
← →
BiN © (2006-11-23 21:40) [5]
> Вольный Стрелок ©
typedef struct _STARTUPINFO {
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags; // or STARTF_USESTDHANDLES
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput; //= GetStdHandle(STD_INPUT_HANDLE)
HANDLE hStdOutput; //= GetStdHandle(STD_OUTPUT_HANDLE)
HANDLE hStdError; //= GetStdHandle(STD_OUTPUT_HANDLE)
} STARTUPINFO,
*LPSTARTUPINFO;
← →
Чапаев © (2006-11-24 09:58) [6]> [0] Вольный Стрелок © (23.11.06 18:37)
AttachConsole? Сам не пробовал, сапогами не пинайте. Да и если сработает, то только в том случае, если вызываемая программа сама этого захочет. :-)
← →
Rouse_ © (2006-11-24 10:52) [7]
> Я спрашивал про параметры, а не про функцию.
> Кроме того, в справке написано про winexec так
а ты попробуй прежде чем ворчать. В саправке так и написано что использовать ее нельзя?
← →
Вольный Стрелок © (2006-11-27 17:47) [8]BiN © (23.11.06 21:40) [5]
hStartupInfo.dwFlags := hStartupInfo.dwFlags or STARTF_USESTDHANDLES;
hStartupInfo.hStdInput := GetStdHandle( STD_INPUT_HANDLE );
hStartupInfo.hStdOutput := GetStdHandle( STD_OUTPUT_HANDLE );
hStartupInfo.hStdError := GetStdHandle( STD_OUTPUT_HANDLE );
if( CreateProcess( PChar( cAppName ), PChar( cCommandLine ), nil, nil,
False, 0, nil, nil, hStartupInfo, hProcInfo ) ) then
begin
WriteLn( "Can""t start process."#13#10"Reason: " + GetSystemError() );
Exit;
end;
if( WaitForSingleObject( hProcInfo.hProcess, INFINITE ) = WAIT_FAILED ) then
begin
WriteLn( "Process execution failed." );
Exit;
end;
Правильно?
Процесс не стартует, возвращает ошибку "Не удается найти указанный файл." Но:
Rouse_ © (24.11.06 10:52) [7]
Однако WinExec с теми же параметрами (вызываемый следом) нормально стартует, правда если запускать из фара, то синие панели ползут по экрану вверх. А после окончания они восстанавливаются только если мышой наехать на окно. Иначе остается какая-то синяя пятнистость вперемежку с сообщениями моей (и вызываемой ею) программы.
Что я не учел?
← →
BiN © (2006-11-27 17:50) [9]
> Вольный Стрелок © (27.11.06 17:47) [8]
>
> Процесс не стартует, возвращает ошибку "Не удается найти
> указанный файл." Но:
> ...
> Однако WinExec с теми же параметрами (вызываемый следом)
> нормально стартует,
CreateProcess( nil, PChar( cAppName+" "+cCommandLine )...
← →
Rouse_ © (2006-11-27 18:09) [10]
> Что я не учел?
Очитску экрана не произвел перед запуском. (это я про синие панельки)
← →
Вольный Стрелок © (2006-11-27 18:23) [11]BiN © (27.11.06 17:50) [9]
Заработало, спасибо.
Хотя не пойму, почему мой вариант не катит :(
Ведь в справке написано:
lpApplicationName
Pointer to a null-terminated string that specifies the module to execute.
The string can specify filename of the module to execute. The specified module can be a Win32-based application. It can be some other type of module (for example, MS-DOS or OS/2) if the appropriate subsystem is available on the local computer. Windows NT: If the executable module is a 16-bit application, lpApplicationName should be NULL, and the string pointed to by lpCommandLine should specify the executable module.
Проверил TDump"ом вызываемый EXE. Требуемая версия винды - 4.
Как определить, 16 или 32-битное приложение?
← →
Вольный Стрелок © (2006-11-27 18:28) [12]Rouse_ © (27.11.06 18:09) [10]
Допустим, хотя почему с тем же CreateProcess нету таких фиговин?
А что скажешь про неживость после окончания? Ожидает ведь проезда мышей над окном, тогда "впрыгивает" назад в фар (завершается процесс). Специально ничего такого не делал.
← →
Вольный Стрелок © (2006-11-27 18:32) [13]Rouse_ © (24.11.06 10:52) [7]
> В саправке так и написано что использовать ее нельзя?
И если уж совсем придираться :)
то фраза из справкиApplications should use
означает настоятельную рекомендацию, ну очень близкую к обязательному требованию.
← →
Вольный Стрелок © (2006-11-28 11:03) [14]Так, ясно...
Как только сказал, что получилось, все резко потеряли интерес к теме...
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c