Текущий архив: 2005.07.31;
Скачать: CL | DM;
ВнизWord: запустить, проследить, узнать о результатах. Найти похожие ветки
← →
Andy BitOff © (2005-07-11 10:39) [0]Здравствуйте.
Незнаю в какую конференцию поместить этот вопрос, поэтому напишу здесь, а там пусть модератор решает куда уже дальше ее девать.
Значит задача в следующем:
Запустить некий документ Word, проследить когда он будет закрыт и получить информацию о том был ли он изменен или нет.
С запуском, понятно, проблем нет, а вот дальше... Даже незнаю с кого бока начать. Посоветуйте. Может у кого есть наработки.
← →
Drakosha © (2005-07-11 11:39) [1]у TWordApplication обрабатывай события onClose и onChange
← →
Andy BitOff © (2005-07-11 12:46) [2]Спасибо. Все прекрано работает.
← →
B-S-G (2005-07-11 19:16) [3]function WinExecAndWait(Path: PChar; Visibility: Word): Word;
var
InstanceID: THandle;
Msg: TMsg;
begin
InstanceID := WinExec(Path, Visibility);
if InstanceID < 32 then { значение меньше чем 32 указывает на ошибку }
WinExecAndWait := InstanceID
else
repeat
while PeekMessage(Msg, 0, 0, 0, pm_Remove) do
begin
if Msg.message = wm_Quit then
Halt(Msg.WParam);
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
until
GetModuleUsage(InstanceID) = 0;
WinExecAndWait := 0;
end;
function ExecuteAndWait(FileName: string; HideApplication: boolean): boolean;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
exitc: cardinal;
begin
FillChar(StartupInfo, sizeof(StartupInfo), 0);
with StartupInfo do begin
cb := Sizeof(StartupInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_SHOW;
end;
if not CreateProcess(nil, PChar(FileName), nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil,
StartupInfo, ProcessInfo) then result := false
else begin
if HideApplication then begin
Application.Minimize;
ShowWindow(Application.Handle, SW_HIDE);
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
end else
while WaitforSingleObject(ProcessInfo.hProcess, 100) =
WAIT_TIMEOUT do begin
Application.ProcessMessages;
if Application.Terminated
then TerminateProcess(ProcessInfo.hProcess, 0);
end;
GetExitCodeProcess(ProcessInfo.hProcess, exitc);
result := (exitc = 0);
if HideApplication then begin
ShowWindow(Application.Handle, SW_SHOW);
Application.Restore;
Application.BringToFront;
end;
end;
end;
function SwitchToProg(const Path: string): Boolean;
var
SI: TStartupInfo;
PI: TProcessInformation;
ExitCode: Cardinal;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
Result := CreateProcess(nil, PChar(Path), nil, nil, False, 0, nil, nil,
SI, PI);
if Result then
begin
Application.MainForm.Hide;
while GetExitCodeProcess(PI.hProcess, ExitCode) and
(ExitCode = STILL_ACTIVE) do
; // ждем завершения, пустой цикл
Application.MainForm.Show;
end;
end;
procedure ShellExec(Sender: TObject);
var
ProcInfo: PShellExecuteInfo;
begin
(Sender as TControl).Enabled := False;
GetMem(ProcInfo, SizeOf(ProcInfo^));
with ProcInfo^ do
begin
Wnd := Handle;
cbSize := SizeOf(ProcInfo^);
lpFile := PChar("notepad.exe");
lpParameters := nil;
lpVerb := "open";
nShow := SW_SHOW;
fMask := SEE_MASK_DOENVSUBST or SEE_MASK_NOCLOSEPROCESS;
end;
try
Win32check(ShellExecuteEx(ProcInfo));
while not Application.Terminated and
(WaitForSingleObject(ProcInfo.hProcess, 100) = WAIT_TIMEOUT) do
Application.ProcessMessages;
finally
if ProcInfo.hProcess <> 0 then
CloseHandle(ProcInfo.hProcess);
Dispose(ProcInfo);
(Sender as TControl).Enabled := True;
end;
end;
Взял из Delphi World http://delphiworld.narod.ru. (сейчас 5005 статей)
Страницы: 1 вся ветка
Текущий архив: 2005.07.31;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.041 c