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

Вниз

Статус завершения работы с документом   Найти похожие ветки 

 
Gilk   (2003-11-05 15:35) [0]

Хочу получить статус завершения работы с документом после запуска командами ShellExecuteEx или CreateProcess.
1. WaitforSingleObject не отлавливается при уже открытом Word
2. При запуске с помощью ShellExecuteEx (когда Word еще не открыт до запуска) Word не закрывается


 
clickmaker   (2003-11-05 15:52) [1]

что значит "статус завершения работы с документом"? Статус завершения процесса? Тогда GetProcessExitCode


 
Gilk   (2003-11-05 15:58) [2]

Запускаю документ с помощью процедуры.
Возникают проблемы указанные в топике выше.
procedure TBlobFields.RunFileAndWait(Path:string);
var
SI:TShellExecuteInfo;
begin
ZeroMemory(@SI, SizeOf(SI));
SI.cbSize := SizeOf(TShellExecuteInfo);
with SI do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
lpFile := PChar(Path);
Wnd := Application.Handle;
nShow := SW_SHOWNORMAL;
end;
IF ShellExecuteEx(@SI) then
WaitForSingleObject(SI.hProcess, INFINITE);

end;


 
clickmaker   (2003-11-05 17:10) [3]

А, вордешник небось 2000? Т.е. новый процесс не стартует на новый файл.
Я енту проблему так решил:

FindExecutable(PChar(FileName), PChar(ExtractFilePath(Application.ExeName)), AppName);
ZeroMemory(@pi, SizeOf(PROCESS_INFORMATION));
ZeroMemory(@si, SizeOf(STARTUPINFO));
si.cb := SizeOf(STARTUPINFO);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_SHOWNORMAL;

if (WordVersion > 8) then begin

Result := CreateProcess(nil, PChar(Format(""%s" /n", [AppName])), nil, nil, FALSE, CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS, nil, nil,
si, pi);
if Result then begin

WaitForInputIdle(pi.hProcess, INFINITE);

ddeMgr := TDdeMgr.Create(Application);
DDEClient := TDDEClientConv.Create(nil);
DDEClient.ConnectMode := ddeManual;
try
Reg := TRegistry.Create(KEY_READ);
try
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(Ext, false);
Key := Reg.ReadString("");
Reg.CloseKey;
Key := Key + "\shell\Open\ddeexec";
Reg.OpenKey(Key, false);
Macro := Reg.ReadString("");
Reg.CloseKey;
Reg.OpenKey(Key + "\Application", false);
Service := Reg.ReadString("");
Reg.CloseKey;
Reg.OpenKey(Key + "\Topic", false);
Topic := Reg.ReadString("");
Reg.CloseKey;
finally
Reg.Free;
end;
DDEClient.ServiceApplication := Service;
DDEClient.SetLink(Service, Topic);
Result := DDEClient.OpenLink;
if Result then begin
Result := DDEClient.ExecuteMacro(PChar(StringReplace(Macro, "%1", FileName, [])), false);
DDEClient.CloseLink;
end;
finally
DDEClient.Free;
end;
end;
end else begin

Result := CreateProcess(nil, PChar(Format(""%s" "%s"", [AppName, FileName])), nil, nil, FALSE,
CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS, nil, nil,
si, pi);
end;
if Result then begin

WaitForSingleObject(pi.hProcess, INFINITE);
end;
if (pi.hProcess <> 0) then CloseHandle(pi.hProcess);
if (pi.hThread <> 0) then CloseHandle(pi.hThread);



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

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

Наверх




Память: 0.45 MB
Время: 0.013 c
8-25453
CTAPbIi
2003-09-09 13:51
2004.01.09
Проигрывание TAnimate из ресурса -


14-25514
}|{yk
2003-12-16 11:33
2004.01.09
Можно ли заставить Builder пользоваться делфийским дебуггером?


3-25183
nik4543
2003-12-09 15:12
2004.01.09
Word


6-25471
lesha
2003-11-11 04:10
2004.01.09
Socket


6-25461
pavel_guzhanov
2003-11-10 11:38
2004.01.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский