Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CreateProcess консольной программы [D7, WinXP]


Вольный Стрелок ©   (2006-11-23 18:37:00) 

Из одной консольной программы вызываю другую и хочу, чтобы "консоль" для них была общая, а не отдельное окно для вызванной программы. Какие параметры установить надо?
ЗЫ вызываемая программа - посторонняя, есть только ЕХЕ


Вольный Стрелок   (2006-11-28 11:03:00) [1]

Так, ясно...
Как только сказал, что получилось, все резко потеряли интерес к теме...


Вольный Стрелок   (2006-11-27 18:32:00) [2]

Rouse_ ©   (24.11.06 10:52) [7]
> В саправке так и написано что использовать ее нельзя?
И если уж совсем придираться :)
то фраза из справки Applications shoulduseозначает настоятельную рекомендацию, ну очень близкую к обязательному требованию.


Вольный Стрелок   (2006-11-27 18:28:00) [3]

Rouse_ ©   (27.11.06 18:09) [10]
Допустим, хотя почему с тем же CreateProcess нету таких фиговин?
А что скажешь про неживость после окончания? Ожидает ведь проезда мышей над окном, тогда "впрыгивает" назад в фар (завершается процесс). Специально ничего такого не делал.


Вольный Стрелок   (2006-11-27 18:23:00) [4]

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-битное приложение?


Rouse_   (2006-11-27 18:09:00) [5]


> Что я не учел?

Очитску экрана не произвел перед запуском. (это я про синие панельки)


BiN   (2006-11-27 17:50:00) [6]


> Вольный Стрелок ©   (27.11.06 17:47) [8]
>
> Процесс не стартует, возвращает ошибку "Не удается найти
> указанный файл." Но:
> ...
> Однако WinExec с теми же параметрами (вызываемый следом)
> нормально стартует,

CreateProcess( nil, PChar( cAppName+' '+cCommandLine )...


Вольный Стрелок   (2006-11-27 17:47:00) [7]

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 с теми же параметрами(вызываемый следом) нормально стартует, правда если запускать из фара, то синие панели ползут по экрану вверх. А после окончания они восстанавливаются только если мышой наехать на окно. Иначе остается какая-то синяя пятнистость вперемежку с сообщениями моей (и вызываемой ею) программы.

Что я не учел?


Rouse_   (2006-11-24 10:52:00) [8]


> Я спрашивал про параметры, а не про функцию.
> Кроме того, в справке написано про winexec так

а ты попробуй прежде чем ворчать. В саправке так и написано что использовать ее нельзя?


Чапаев   (2006-11-24 09:58:00) [9]

> [0] Вольный Стрелок ©   (23.11.06 18:37)
AttachConsole? Сам не пробовал, сапогами не пинайте. Да и если сработает, то только в том случае, если вызываемая программа сама этого захочет. :-)


BiN   (2006-11-23 21:40:00) [10]


> Вольный Стрелок ©

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-23 20:05:00) [11]

Я спрашивал про параметры, а не про функцию.
Кроме того, в справке написано про winexec так
This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.
так что вернулись к [0]


Rouse_   (2006-11-23 19:19:00) [12]

WinExec вестимо...


Вольный Стрелок   (2006-11-23 19:10:00) [13]

Ну, как из фара вызывается консольная программа в том же окне.


Rouse_   (2006-11-23 18:58:00) [14]

Консоль общая? Это как?


Наверх

Титульная страница Поиск, карта сайта Написать письмо