Autor Beitrag
Bart Simpson
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 01.08.02 22:31 
Wenn ich mit Hilfe der Funktion CreateProcess(...) eine Anwendung starte, ist es kein Problem mich an die ranzuhängen und zu warten bis mein "Client" beendet ist.

Andererseits kann ich mittels ShellExecute(...) nicht nur Programme starten, sondern auch "Dokumente" wobei Windows für micht ermittelt, welche Applikation verknüpft ist und diese dann entsprechend startet.

Meine Frage nun: Gibt's das auch kombiniert? Ich möchte Doc's starten, und trotzdem auf das Ende der Bearbeitung warten...

Oder Alternativ: Gibt's Bordmittel um die richtige Anwendung zu finden, oder muss ich mich tatsächlich selbst durch die Registry wühlen???
Das einzige was ich darüber _irgendwo_ finden konnte war eine url.dll. Von der scheint aber nicht mal die komplette MSDN was zu wissen...

Bart Simpson

_________________
NAESSER'S GESETZ: Man kann etwas narrensicher machen, aber nicht _verdammt_ narrensicher!
DBR
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Fr 02.08.02 03:22 
Schon mal so versucht?
---------------------------
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
uses shellapi;

var
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
doc:string;
buf:array[0..max_path-1]of char;

function start:boolean;
begin
StartupInfo.cb := Sizeof(StartupInfo);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_MAXIMIZE;
result:=CreateProcess(
nil,
pchar(string(buf)+#32+doc),
nil,
nil,
false,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
doc:='C:\test.doc';
findexecutable(pchar(doc),nil,buf);
if not start then
showmessage('Fehler')
else begin
repeat
Application.ProcessMessages;
// hier können bei Bedarf weitere Dinge
// passieren, während der andere Prozess läuft
until
(WaitforSingleObject(ProcessInfo.hProcess,0)<>WAIT_TIMEOUT)
or(application.terminated);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
showmessage('Das aufgerufenen Fenster wurde soeben geschlossen');
end;
end;


gruss DBR
Bart Simpson Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 02.08.02 13:07 
ausblenden Quelltext
1:
findexecutable(pchar(doc),nil,buf);					


Das war's, was ich gesucht hatte! Danke!

_________________
NAESSER'S GESETZ: Man kann etwas narrensicher machen, aber nicht _verdammt_ narrensicher!