Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.49 MB
Время: 0.049 c
15-1174976654
Post_
2007-03-27 10:24
2007.04.22
Целесообразно ли...


15-1174680887
iZEN
2007-03-23 23:14
2007.04.22
Онлайн Интервью с Ольгой Дергуновой


1-1172328976
EgorovAlex
2007-02-24 17:56
2007.04.22
Как лучше сделать межпотоковое взаимодействие: есть несколько


15-1174675545
VirEx
2007-03-23 21:45
2007.04.22
подскажите компонент локальной базы данных


2-1175671186
Gentos
2007-04-04 11:19
2007.04.22
Глобальная переменная





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский