| Autor |
Beitrag |
Gewuerzgurke
      
Beiträge: 152
Win XP
Lazarus
|
Verfasst: Mi 15.10.08 15:55
Hallo, ich hab' vermutlich nur wieder so ein Anfängerproblem aber dieses Mal weis ich nicht mehr weiter...
Ich möchte mit ShellExecute ein Programm starten. Dafür habe ich Folgendes geschrieben:
Delphi-Quelltext 1:
| ShellExecute(Handle,'open','TestStarter\Programm1.exe',nil,nil,SW_MINIMIZE); |
Jedoch wird das Programm nicht minimiert gestartet. Ich kann für SW_MINIMIZE auch SW_HIDE, SW_SHOWMINIMIZED, 0 oder 6 einsetzen - ohne Erfolg.
Programm1.exe ist ein ganz einfaches Formular ohne alles.
Was muss ich ändern?
|
|
Stübi
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: Mi 15.10.08 16:09
Hallo
Zwischenfrage: Programm1.exe ist dieses Programm von Dir?
Dann müsstest Du nämlich kein ShellExecute benutzen sondern könntest das Formular direkt einfügen.
Grüsse
Stübi
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
Gewuerzgurke 
      
Beiträge: 152
Win XP
Lazarus
|
Verfasst: Mi 15.10.08 16:12
Programm1.exe ist von mir, das hab' ich mir aber auch nur zum testen von ShellExecute gemacht. Wenn ShellExecute dann ginge, wollte ich statt Programm1.exe etwas anderes starten.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 15.10.08 16:13
Trag mal anstatt "Handle" 0 ein.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 15.10.08 16:14
Das Problem könnte sein, dass es bei Delphiprogrammen ein unsichtbares Anwendungsfenster gibt. Vielleicht wird nur das minimiert. Ich habe es nie ausprobiert.
Klar ist: relative Pfade sind böse...
www.delphi-library.d...ewtopic.php?p=499701
|
|
Gewuerzgurke 
      
Beiträge: 152
Win XP
Lazarus
|
Verfasst: Mi 15.10.08 16:53
Statt Handle 0 einsetzen bringt leider nichts, schade, denn das währe so einfach gewesen...
Ich hab' Programm1.exe jetzt durch winmine.exe aus Windows\system32 ersetzt und es wurde minimiert! Ich wollte statt Programm1.exe sowiso etwas anderes starten, deshalb ist es jetzt für mich egal, aber was könnte man denn machen, wenn das "andere Zielprogramm" auch so ein unsichtbares Anzeigefenster hätte?
Und heist das, dass man in seinen eigenen, mit Delphi compilierten, Programmen immer die Möglichkeit zum minimieren offen halten sollte? - Und wie?
Übrigens binn ich mit den "Referenzier-Verkettungen" bei relativen Pfaden bestens vertraut und finde wenn man immer darauf achtet, kann eigentlich gar nichts schief gehen.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 15.10.08 16:56
Dabei kann sehr wohl etwas schief gehen, da das aktuelle Verzeichnis nicht unbedingt das Programmverzeichnis ist.
|
|
Gewuerzgurke 
      
Beiträge: 152
Win XP
Lazarus
|
Verfasst: Mi 15.10.08 17:10
Um sicher zu gehen kann man ja immer ExtractFilePath(ParamStr(0)) verwenden, nur was macht man, wenn man mit Batch-Files arbeitet? Denn da kenne ich so eine Methode nicht; währe aber trotzdem froh, wenn jemand zufällig eine wüsste.
Aber was ist denn jetzt mit dem unsichtbaren Anzeigefenster - hat da noch jemand eine Idee?
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 15.10.08 17:49
In Batchdateien passiert bei relativen Pfaden etwas anderes als in Delphi, dort und nur dort gelten diese relativ zu der Batchdatei.
Wie es in Delphi ist siehst in meinem Beitrag, den ich verlinkt habe. Schau dir einfach die Demo dort an, dass es nicht immer geht.
|
|
Gewuerzgurke 
      
Beiträge: 152
Win XP
Lazarus
|
Verfasst: Mi 15.10.08 18:51
Auch in Batch-Files wird nicht relativ zur .bat - Datei referenziert - zumindest bei mir nicht. Muss man sich eben 'dran gewöhnen.
Aber ich habe noch eine andere Frage. 'Binn gerade dabei, meinen Autostart aufzuräumen - aber wie muss ich denn so etwas als ShellExecute schreiben: "rundll32 C:\PROGRA~1\ThinkPad\UTILIT~1\PWRMGRTR.DLL,PwrMgrBkGndMonitor" ?
ShellExecute(Handle,'open',PChar('rundll32'),PChar('C:\PROGRA~1\ThinkPad\UTILIT~1\PWRMGRTR.DLL,PwrMgrBkGndMonitor'),nil,sw_shownormal); - oder anders?
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 15.10.08 19:49
Das sollte so schon stimmen, wenn du aber ohnehin nur Strings direkt angibst und keine Stringvariablen nimmst, dann kannst du dir den Cast auf PChar auch sparen  .
Bei Batchdateien kann man sich anders als in Delphi darauf verlassen, dass sich das aktuelle Verzeichnis nicht ändert und deshalb funktioniert dort die relative Pfadangabe auch wenn es sich nicht auf den Batchdateipfad bezieht. (Das weiß ich nicht genau wie das da geht, ich habe es nie ausprobiert.)
|
|
Gewuerzgurke 
      
Beiträge: 152
Win XP
Lazarus
|
Verfasst: Mi 15.10.08 20:21
| Zitat: | | Das weiß ich nicht genau wie das da geht, ich habe es nie ausprobiert |
Ist ganz einfach:
1. Ordner anlegen (z.B. auf Desktop)
2. Neue Bitmap-Datei in Ordner erstellen mit dem Namen test.bmp
3. Neue Text-Datei in Ordner erstellen mit dem Namen A.bat und dem Inhalt START test.bmp
4. Neue Text-Datei auf Desktop erstellen mit dem Namen B.bat und dem Inhalt Start Odrner\A.bat
5. B.bat "ausführen"
(So kann man's am schnellsten prüfen)
Bei mir findet er dann test.bmp nicht, was doch eigentlich bedeutet, dass auch bei Batch-Files nicht immer von der .bat-Datei aus referenziert wird. 
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 15.10.08 20:24
Ja, stimmt, ich habe ja auch immer von der aufrufenden aus referenziert. Das kann man ja gut mit Platzhaltern machen. Der Unterschied ist eben einfach, dass Delphi auch im Hintergrund den aktuellen Ordner ändert, das in Batchdateien aber normalerweise nicht passiert.
|
|
Gewuerzgurke 
      
Beiträge: 152
Win XP
Lazarus
|
Verfasst: Do 16.10.08 12:07
| Zitat: | | ...dass Delphi auch im Hintergrund den aktuellen Ordner ändert, das in Batchdateien aber normalerweise nicht passiert. |
Klar, denn Batch-Files sind ja auch nicht so umfangreich.
Ich hab' noch einen Tipp für alle, die eine Anwendung nicht minimiert gestartet bekommen:
Man kann auch einfach einen Link zu der zu startenen Anwendung machen, in den "Linkoptionen" dann minimiert starten einstellen und dann mit ShellExecute den Link aufrufen (Link-Name + .lnk). Bei mir hat's funktioniert.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 16.10.08 13:29
Dann macht CreateProcess an der Stelle etwas anderes als ShellExecute, denn CreateProcess wird soweit ich weiß benutzt, wenn du einen Link anklickst.
|
|
Gewuerzgurke 
      
Beiträge: 152
Win XP
Lazarus
|
Verfasst: Do 16.10.08 14:57
| Zitat: | | ...denn CreateProcess wird soweit ich weiß benutzt, wenn du einen Link anklickst |
Echt? Muss ich mal ausprobieren.
|
|