RunProgram und Ladezeiten
RunProgram und Ladezeiten
Kann man irgendwie feststellen, wann ein Programm, das mit RunProgram gestartet wurde, komplett fertig geladen ist?
Hallo,
hier mal ein kurzes Beispiel zu der Frage:
Folgendes Problem tritt dabei auf: bei einem ersten Start von Word krachts beim zweiten Dokument. Fehler mit der Normal.dot. Ruft man das ganze dann nochmal auf, gehts natürlich ohne Probleme, weil Word dann schon mal geladen wurde.
Ein Delay macht in diesem Fall ja auch keinen Sinn, da sich die Ladezeit u.U. recht lange hinziehen kann. Ich hab auch mal das RunProgramEx von Rings probiert, wo mit CreateProcess gearbeitet wird, aber leider krachts auch da.
Hat jemand eine Idee wie man das lösen kann? Danke.
hier mal ein kurzes Beispiel zu der Frage:
Code: Alles auswählen
programm$ = "C:\Programme\Microsoft Office\Office10\winword.exe"
datei1$ = "c:\test\doc1.doc"
datei2$ = "c:\test\doc2.doc"
datei3$ = "c:\test\doc3.doc"
RunProgram(Programm$, datei1$,"",0)
RunProgram(Programm$, datei2$,"",0)
RunProgram(Programm$, datei3$,"",0)
Ein Delay macht in diesem Fall ja auch keinen Sinn, da sich die Ladezeit u.U. recht lange hinziehen kann. Ich hab auch mal das RunProgramEx von Rings probiert, wo mit CreateProcess gearbeitet wird, aber leider krachts auch da.
Hat jemand eine Idee wie man das lösen kann? Danke.
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Und eine If-Abfrage ungleich NULL geht auch nicht? Also sollte das zweite
Runprogramm erst ausgeführt werden können, wenn die vorherige IF-Abfrage ungleich NULL ist, usw. ...
Zusätzlich könnte man auch noch folgende Fehler Prüfen:
Dann sollte es schon gehen.
Gruß Falko
Runprogramm erst ausgeführt werden können, wenn die vorherige IF-Abfrage ungleich NULL ist, usw. ...
Zusätzlich könnte man auch noch folgende Fehler Prüfen:
Code: Alles auswählen
0 The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.
ERROR_BAD_FORMAT The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image).
SE_ERR_ACCESSDENIED The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE The file name association is incomplete or invalid.
SE_ERR_DDEBUSY The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL The DDE transaction failed.
SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND The specified dynamic-link library (DLL) was not found.
SE_ERR_FNF The specified file was not found.
SE_ERR_NOASSOC There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.
SE_ERR_OOM There was not enough memory to complete the operation.
SE_ERR_PNF The specified path was not found.
SE_ERR_SHARE A sharing violation occurred. Dann sollte es schon gehen.
Gruß Falko
Falko, su hast ihn falsch verstanden. Das Proggy (Word) wird ja gestartet nur läd Word am Anfang die "Normal.dot". Wenn das aber mehrere "Words" auf einmal machen gibts Probleme, desswegen will Robert warten bis Word die Datei geladen hat, was man aber warscheinlich nicht abfragen kann..

[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Hallo Falko, hallo Deeem2031,
sorry, hat ein bißchen gedauert. So wie es aussieht, kann man es wahrscheinlich wirklich nicht abfragen, wann ein Programm geladen und die übergebene Datei geöffnet parat steht. Interessieren würde es mich schon, aber rausbekommen hab ich's nicht. Dafür aber folgendes:
1. Wenn man wie im obigen Beispiel mehrere Dateien öffnen will, muß man den Befehl Shellexecute_ verwenden.
Das läuft einwandfrei, der Befehl regelt das Open irgendwie intern und es gibt keinerlei Probleme. Ein Programm muß man nicht angeben, das sucht sich der Befehl selbst.
2. Will man mehrere Dokumente mit einem anderen Programm öffnen, als wie in der Dateiverknüpfung angegeben, übergibt man diese am besten auf einmal an das Programm. Hier kann man jetzt auch RunProgram verwenden.
Beispiel: Html-Dateien in Word bearbeiten, obwohl dem IE zugeordnet.
Bei gleichem Pfad geht auch:
Auch hier gibt's jetzt keine Probleme mehr. Die Dateien werden alle in einem String übergeben - was natürlich auch gleich der "Nachteil" hierbei ist. Denn die meisten Programme arbeiten in der Regel mit einer Commandline-Länge von max. 2048 Byte. Man kann also nicht unendlich viele Dateien auf einmal damit laden. Word z.B. läßt mit dieser Methode nur max. 10 Dateien zu.
Vielleicht kann's ja jemand brauchen.
Gruß Robert
sorry, hat ein bißchen gedauert. So wie es aussieht, kann man es wahrscheinlich wirklich nicht abfragen, wann ein Programm geladen und die übergebene Datei geöffnet parat steht. Interessieren würde es mich schon, aber rausbekommen hab ich's nicht. Dafür aber folgendes:
1. Wenn man wie im obigen Beispiel mehrere Dateien öffnen will, muß man den Befehl Shellexecute_ verwenden.
Code: Alles auswählen
Datei1$ = "c:\Test\doc1.doc"
Datei2$ = "c:\Test\doc2.doc"
Datei3$ = "c:\Test\doc3.doc"
ShellExecute_(0, "open", Datei1$, 0, 0, #SW_SHOWNORMAL)
ShellExecute_(0, "open", Datei2$, 0, 0, #SW_SHOWNORMAL)
ShellExecute_(0, "open", Datei3$, 0, 0, #SW_SHOWNORMAL)
2. Will man mehrere Dokumente mit einem anderen Programm öffnen, als wie in der Dateiverknüpfung angegeben, übergibt man diese am besten auf einmal an das Programm. Hier kann man jetzt auch RunProgram verwenden.
Beispiel: Html-Dateien in Word bearbeiten, obwohl dem IE zugeordnet.
Code: Alles auswählen
programm$ = "C:\Programme\Microsoft Office\Office10\winword.exe"
Datei1$ = "c:\Test\html1.html"
Datei2$ = "c:\Test\html2.html"
Datei3$ = "c:\Test\html3.html"
Datei$ = chr(34) + datei1$ + chr(34) + " " + chr(34) + datei2$ + chr(34) + " " + chr(34) + datei3$ + Chr(34)
RunProgram(Programm$(i),Datei$,"",0)
Code: Alles auswählen
programm$ = "C:\Programme\Microsoft Office\Office10\winword.exe"
Path$ = "c:\Test\"
Datei1$ = "html1.html"
Datei2$ = "html2.html"
Datei3$ = "html3.html"
Datei$ = chr(34) + datei1$ + chr(34) + " " + chr(34) + datei2$ + chr(34) + " " + chr(34) + datei3$ + Chr(34)
RunProgram(Programm$,Datei$,Path$,0)
Vielleicht kann's ja jemand brauchen.
Gruß Robert
Wenn das Programm (hier Word) keine Rückmeldung gibt, ist es nahezu unmöglich rauszufinden, ob alles fertig geladen wird.
Das System kann dir höchstens sagen, ob das Programm jetzt vollständig in speicher ist und es gestartet wird. Was danach kommt, geht das OS nicht mehr so wirklich was an (außer das Programm greift wieder auf OS-Routinen zu).
Das System kann dir höchstens sagen, ob das Programm jetzt vollständig in speicher ist und es gestartet wird. Was danach kommt, geht das OS nicht mehr so wirklich was an (außer das Programm greift wieder auf OS-Routinen zu).
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Wird dir in Falle von Word nicht helfen, weil erst nach diesen Zeitpunkt die "normal.dot" geöffnet wird...Robert hat geschrieben:Das mit "jetzt vollständig im Speicher ist" klingt gut.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Man könnte ja den Pfad zur normal.dot rausfinden und abfragen ob man sie benutzen darf und dann so lange warten bis das so ist. Ich weiß zwar nicht wie man das abfragt ohne die Datei zu öffnen, aber man kanns ja versuchen.

[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
qGPI, stimmt, da hast du recht. Spätestens da ist Ende der Fahnenstange.
@Deem231, dein Vorschlag könnte für Word klappen ...
Aber summa summarum glaube ich, daß die Lösung mit ShellExecute_ von Beispiel 1 die beste ist. Hab ich mittlerweile eingebaut und dreht wunderbar, egal mit welchem Programm.
Danke euch. Gruß Robert
@Deem231, dein Vorschlag könnte für Word klappen ...
Aber summa summarum glaube ich, daß die Lösung mit ShellExecute_ von Beispiel 1 die beste ist. Hab ich mittlerweile eingebaut und dreht wunderbar, egal mit welchem Programm.
Danke euch. Gruß Robert
