Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];

Вниз

CreateProcess и Winexec при работе с консольным приложением.   Найти похожие ветки 

 
Rash   (2002-07-18 00:16) [0]

Здравствуйте. Люди, объясните пожалуйста:
почему при таком коде:
if winexec(arjpchar, SW_HIDE) <= 31 then label3.caption:="Архивация не произведена"
else label3.caption:="Архивация завершена";
окно консоли не открывалось вообще,
а при этом :
sui.dwFlags := startf_UseShowWindow;
sui.wshowWindow:= SW_hide;

if not CreateProcess(nil, arjpchar, nil, nil, false, 0, nil, nil, sui, psi) then
begin
label3.caption:="failed";
Exit;
end;
CloseHandle(Psi.hThread);
WaitForSingleObject(Psi.hProcess, INFINITE);
CloseHandle(Psi.hProcess);

окно по окончанию архивации не закрывается? в справке написано, что winexec - это вызов CreateProcess. Мне надо чем-то заменить waitforsingleobject? (Делаю по примерам с форума)


 
Almaz   (2002-07-18 01:58) [1]


> Rash © (18.07.02 00:16)

Я запустил ваш пример под Win2000 - окно не появлялось не в одном из случаев. А какую систему используете вы ?

Удачи.


 
Rash   (2002-07-18 10:34) [2]

У меня 98 Windows.
Если убрать эту строку:
WaitForSingleObject(Psi.hProcess, INFINITE);
то все работает. Вопрос теперь в том, насколько корректным этот код будет как для 98 так и для 2000. Обязательно ли должна быть какая-нибудь функция ожидания события, или может, в этой должны быть какие-то другие параметры?


 
FLAME   (2002-07-18 16:11) [3]

>if winexec(arjpchar, SW_HIDE) <= 31 then >label3.caption:="Архивация не произведена"
>else label3.caption:="Архивация завершена";
>окно консоли не открывалось вообще
виной тому наверное SW_HIDE

>if not CreateProcess(nil, arjpchar, nil, nil, false, 0, nil, nil, sui, psi)
Почему dwCreationFlags=0? И зачем нужен CloseHandle(Psi.hThread)?
Я бы сделал так (IMHO):
IF not CreateProcess(nil, arjpchar, nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, sui, psi)then
begin
label3.caption:="failed";
Exit;
end else
begin
WaitForSingleObject(psi.hProcess,infinite);
CloseHandle(psi.hProcess);
//...//
end;
Чтобы окно закрывалось нужно создать соответствующий pif, либо вместо //...// программно закрывать консольное окно.


 
Rash   (2002-07-18 20:34) [4]

>виной тому наверное SW_HIDE
Так оно и есть, мне требуется , чтобы процесс был незаметен для пользователя.

WaitForSingleObject(psi.hProcess,infinite) - приводит к бесконечному ожиданию действия. Поэтому окно "сеанс завершен" остается. По его закрытию программа работает дальше. Мне же нужно, чтобы программа начинала работать дальше по завершению архивации, а не по закрытию окна.


 
Proton   (2002-07-18 22:47) [5]

> if winexec(arjpchar, SW_HIDE) <= 31 then
!!!! SW_HIDE - окно консоли все равно висит в памяти что не совсем корректно
> sui, psi
а вы их нулями заполняете ? и sizeof присваиваете?
я бы вам порекомендовал пользоваться не досовским архиватором а конслоным (win32) - все ваши проблемы сразу исчезнут
напрмер rar32 (если надо кину на мыло)

в консолнных архиваторах консоль сама закрывается а не ждет пока ее закроют
вот восмотри что я тебе придумал

procedure TForm1.Button1Click(Sender: TObject);
var si:STARTUPINFO;
pi:PROCESS_INFORMATION;
xc:cardinal;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
si.wShowWindow := SW_HIDE;
si.dwFlags := STARTF_USESHOWWINDOW;

CreateProcess(nil,
{$ifdef home}
PCHAR("rar32 a test.zip "+"C:\Video\nge\nge-01.viv")
{$else}
PCHAR("rar32 a test.zip "+Application.EXENAME)
{$endif}
,nil,nil,false,NORMAL_PRIORITY_CLASS,nil,nil,si,pi);
CloseHandle(Pi.hThread);
with tanimate.Create(self) do
begin
Parent := self;
Align := alClient;
BringToFront;
CommonAVI := aviCopyFiles;
Active := True;
StopFrame := 34;
while WaitForSingleObject(Pi.hProcess, 10) = WAIT_TIMEOUT do
Application.ProcessMessages;
free;
end;
if GetExitCodeProcess(Pi.hProcess,xc) then
showMessage(inttostr(xc));
CloseHandle(Pi.hProcess);
end;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
7-27245
Alexander Vorobyov
2002-06-21 16:51
2002.09.09
Ловушка в Сервисе (CBT Hook in NT Service)


1-27025
id_privin
2002-08-26 18:15
2002.09.09
Ускорение работы COM


1-27043
arcoant
2002-08-26 00:18
2002.09.09
Chuzhoie okno...


1-27044
V.exeR
2002-08-27 22:53
2002.09.09
Отрисовка итема и субитемов в ListView.


1-27069
Skif
2002-08-28 09:07
2002.09.09
Удаление файлов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский