Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.043 c
6-1162023817
Sinkler
2006-10-28 12:23
2007.04.22
VPN соеденение


9-1148506360
lstalkerl
2006-05-25 01:32
2007.04.22
Нужна помощь по формам


3-1170165529
s_t_d
2007-01-30 16:58
2007.04.22
QReport - сохранение отчета(путь и имя файла)?


1-1172477752
Kav
2007-02-26 11:15
2007.04.22
Delphi 10 и Delphi 7 совместимость


15-1174820545
Kostafey
2007-03-25 15:02
2007.04.22
Работа с окнами как в Deplhi IDE