Entwickler-Ecke
Windows API - einem programm mehrere parameter übergeben
bensch - Do 06.12.07 21:49
Titel: einem programm mehrere parameter übergeben
hi
ich starte über mein programm eine andere anwendung mit parameterübergabe. dazu habe ich folgenden befehl benutzt:
Delphi-Quelltext
1:
| ShellExecute(Application.Handle,'open','pfad zur exe','textdatei.txt',NIL, SW_HIDE); |
wie kann ich nun der eben gestarteten anwendung einen 2ten parameter übergeben, ohne dass diese nochmal gestartet wird? oder gibt es da einen speziellen befehl, mit dem man ein anderes programm mit mehreren parametern starten kann?
und dann eine 2te frage: das SW_HIDE am ende des befehls sagt doch eigentlich aus, dass dieses aufzurufende programm versteckt gestartet werden soll, oder? denn bei mir öffnet sich die anwendung ganz normal... hab da schon mehrere befehle ausprobiert, zb sw_minimize, aber das funktioniert auch nicht...
würde mich sehr freuen, wenn mir jemand helfen könnte.
mfg bensch
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
Dunkel - Fr 07.12.07 01:35
Titel: Re: einem programm mehrere parameter übergeben
Hallo!
Probier es mal so:
Delphi-Quelltext
1:
| ShellExecute(Application.Handle,'open','pfad zur exe','textdatei.txt textdatei2.txt',NIL, SW_HIDE); |
Wobei das von Programm zu Programm unterschiedlich sein kann wie die Parameter übergeben werden müssen. Einige erwarten die Parameter Komma-separiert, andere wiederum in Anführungszeichen eingeschlossen, ganz andere nehmen die Parameter so entgegen wie oben gezeigt, dann gibt es noch welche die nur einen Parameter berücksichtigen. Musst Du halt ausprobieren.
Blawen - Fr 07.12.07 13:09
Titel: Re: einem programm mehrere parameter übergeben
Dunkels Methode geht problemlos. Unterscheiden kannst Du mit "Paramstr"
Delphi-Quelltext
1: 2: 3:
| if (Paramstr(1) = 'Parameter1') and (Paramstr(2) = 'Parameter2') and (Paramstr(3) = 'Parameter3') then |
Bezüglich "Fehlverhalten" - Versuch's mal mit ShellExecute.
Zitat dsdt.info:
Zitat: |
Mit ShellExecute können Sie Dateien und Dokumente ausführen bzw. öffnen. Falls die angegebende Datei keine ausführbare Datei ist, z.B. eine Textdatei (*.txt), so wird das Programm welches mit dem Dateityp verknüpft ist gestartet. ShellExecute ist auch in der Lage Verknüpfungen auszuführen (*.lnk).
Informationen darüber, welche Aktion letztendlich ausgeführt wird, holt sich die Funktion aus der Registry. Sollten Sie versuchen ausführbare Dateien zu starten, verwenden Sie anstatt ShellExecute besser CreateProcess. Früher wurde auch häufig auf die Funktion WinExec verwiesen. Diese Funktion ist aber inzwischen veraltet und es besteht die Gefahr, dass diese in zukünftigen Windows-Versionen nicht mehr funktionieren wird.
Hier ein Beispiel:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); begin if ShellExecute(Application.Handle, 'open', PChar('C:\index.html'), Nil, Nil, SW_NORMAL) <= 32 then ShowMessage('Es ist ein Fehler aufgetreten'); end; |
|
bensch - Fr 07.12.07 15:55
gut, danke euch beiden. ich werd das heute nachmittag mal probieren.
könnt ihr mir bezüglich der 2ten frage auch helfen?
bensch hat folgendes geschrieben: |
und dann eine 2te frage: das SW_HIDE am ende des befehls sagt doch eigentlich aus, dass dieses aufzurufende programm versteckt gestartet werden soll, oder? denn bei mir öffnet sich die anwendung ganz normal... hab da schon mehrere befehle ausprobiert, zb sw_minimize, aber das funktioniert auch nicht... |
wenn ich da wiederum den wert sw_maximize angebe, wird die anwendung maximiert gestartet. warum funktioniert das nicht mit sw_minimize oder sw_hide?
Dunkel - Fr 07.12.07 16:04
bensch hat folgendes geschrieben: |
wenn ich da wiederum den wert sw_maximize angebe, wird die anwendung maximiert gestartet. warum funktioniert das nicht mit sw_minimize oder sw_hide? |
Wahrscheinlich funkt Dir da das aufgerufene Programm dazwischen. Es wird zwar dazu angehalten minimiert zu starteten, beim Auswerten der Parameter (z.B. lade Dokument X) setzt es sich wahrscheinlich automatisch in den Vordergrund.
bensch - Fr 07.12.07 16:26
hm, kann eigentlich nicht sein, denn wenn ich das programm manuell starte, und die textdatei laden lasse, kann ich es minimieren, ohne dass es sich wieder aufpoppt. ich hab hier im forum auch schon rumgesucht, und da hatte ein user das gleiche problem. nämlich dass sw_hide nichts bewirkt hat. gibts da eventuell noch andere möglichkeiten, ein laufendes programm vom vordergrund sozusagen unsichtbar zu machen? sprich, den task aus der taskleiste entfernen und das programm minimieren?
Blawen - Fr 07.12.07 16:48
bensch hat folgendes geschrieben: |
...und die textdatei laden lasse, kann ich es minimieren, ohne dass es sich wieder aufpoppt... |
Soll also heissen, zuerst startet es im Vollbildmodus - oder?
Somit dürfte dieses Verhalten also normal sein...
bensch - Fr 07.12.07 16:58
das externe programm startet ganz normal, weder minimiert noch maximiert. wenn ich aber auf minimieren klicke, minimiert es sich auch ganz normal. bloß eben über den shellexecute-aufruf lässt es sich nicht minimieren. wenn man es also nicht minimiert starten kann, könnte man ja versuchen, nach dem start das programm zu minimieren bzw. in den sw_hide modus zu setzen. weiß aber nicht, ob das im nachhinein möglich ist...
Dunkel - Fr 07.12.07 17:05
bensch hat folgendes geschrieben: |
wenn man es also nicht minimiert starten kann, könnte man ja versuchen, nach dem start das programm zu minimieren bzw. in den sw_hide modus zu setzen. weiß aber nicht, ob das im nachhinein möglich ist... |
Hol Dir das Handle der gestarteten Anwendung und sende eine entsprechende Nachricht an das Fenster.
Du solltest einiges zu diesen Themen hier im Forum finden.
FINDWINDOW &
POSTMESSAGE sollten Dir weiterhelfen.
Blawen - Fr 07.12.07 18:29
bensch hat folgendes geschrieben: |
hm, kann eigentlich nicht sein, denn wenn ich das programm manuell starte, und die textdatei laden lasse, kann ich es minimieren, ohne dass es sich wieder aufpoppt. |
Das Programm wird in diesem Falle ja auch nicht neu gestartet, sondern es wird lediglich das Dokument geöffnet.
bensch hat folgendes geschrieben: |
gibts da eventuell noch andere möglichkeiten, ein laufendes programm vom vordergrund sozusagen unsichtbar zu machen? sprich, den task aus der taskleiste entfernen und das programm minimieren? |
Hat mit der eigentlichen Fragestellung eigentlich nichts mehr zu tun (Taskmanager) und ist eine andere Baustelle.
bensch - Fr 07.12.07 20:17
so, hab die vorschläge nun getestet. funktionieren leider nicht :(
also zuerst zum programm mit parameter starten:
wenn ich dem programm mehrere parameter mit einem mal übergebe, kommt in diesem externen programm die fehlermeldung: Datei existiert nicht! ich müsste also erst das programm mit einfacher parameterübergabe starten, und dann später noch eine text-datei übergeben.
in diesem externen programm befindet sich ein opendialog, mit dem man die textdatei auswählen kann. ich müsste also irgendwie das handle des externen programmes bekommen, und muss dem opendialog eine textdatei übergeben.
da wären wir aber beim 2ten problem:
ich hab folgenden code probiert:
Delphi-Quelltext
1: 2:
| WindowHandle:=FindWindow(nil,'Fenstertitel'); postmessage(WindowHandle,WM_close,0,0); |
ich wollte probieren, ob ich den fensterhandle der externen anwendung erhalte, und wollte die danach schließen. aber es tut sich beim ausführen meines programmes nichts. ich starte also das externe programm von hand, drücke dann den button der wiederum oben stehenden code ausführt. aber es schließt sich die externe anwendung nicht. nach dem klick auf den button kann ich mein fenster auch nicht mehr schließen, da ich anscheinend das handle auf meine anwendung verloren habe. ich muss dann mein programm per taskmanager beenden...
Blawen - Fr 07.12.07 20:50
bensch hat folgendes geschrieben: |
wenn ich dem programm mehrere parameter mit einem mal übergebe, kommt in diesem externen programm die fehlermeldung: Datei existiert nicht! ich müsste also erst das programm mit einfacher parameterübergabe starten, und dann später noch eine text-datei übergeben. |
Wenn das externe Programm nicht von Dir stammt, wird es schon so sein wie Du schreibst. Ob ein 2. oder 3. Parameter korrekt ausgewertet wird hängt schliesslich vom Programmierer ab.
Das starten des Programm mit NUR EINEM Parameter (Datei) klappt nicht (?)
(oder nur nicht, wenn mehrere Parameter übergeben werden?)
bensch hat folgendes geschrieben: |
Delphi-Quelltext 1: 2:
| WindowHandle:=FindWindow(nil,'Fenstertitel'); postmessage(WindowHandle,WM_close,0,0); |
|
Du musst nur das Handle wieder umbiegen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1Click(Sender: TObject); begin WindowHandle:=FindWindow(nil,'Dokument2 - Microsoft Word'); postmessage(WindowHandle,WM_close,0,0); WindowHandle:=FindWindow(nil,'Form1'); end; |
Sinspin - Fr 07.12.07 20:51
bensch hat folgendes geschrieben: |
wenn ich dem programm mehrere parameter mit einem mal übergebe, kommt in diesem externen programm die fehlermeldung: Datei existiert nicht! ich müsste also erst das programm mit einfacher parameterübergabe starten, und dann später noch eine text-datei übergeben.
|
Ist das externe Programm von dir? Also, hast du die Quelltexte?
Hast du mal via "Ausführen..." oder über CMD ausprobiert ob das Programm überhaupt mehrere Dateien haben will?
Wenn nicht, musst du dir was anderes überlegen. Wenn es dort aber geht machst du was falsch.
bensch hat folgendes geschrieben: |
ich wollte probieren, ob ich den fensterhandle der externen anwendung erhalte, und wollte die danach schließen. aber es tut sich beim ausführen meines programmes nichts. ich starte also das externe programm von hand, drücke dann den button der wiederum oben stehenden code ausführt. aber es schließt sich die externe anwendung nicht. nach dem klick auf den button kann ich mein fenster auch nicht mehr schließen, da ich anscheinend das handle auf meine anwendung verloren habe. ich muss dann mein programm per taskmanager beenden... |
Wenn du sowas tust:
Delphi-Quelltext
1: 2:
| WindowHandle:=FindWindow(nil,'Fenstertitel'); postmessage(WindowHandle,WM_close,0,0); |
Dann solltest du vor dem PostMessage auch prüfen ob due überhaupt ein Handle bekommen hast:
Delphi-Quelltext
1: 2: 3:
| WindowHandle := FindWindow(nil,'Fenstertitel'); if WindowHandle <> 0 then postmessage(WindowHandle,WM_close,0,0); |
WindowHandle ist selbstverständlich eine lokale Variable vom Typ Integer.
Auf keinen Fall solltest du mit dem WindowHandle deines Fensters arbeiten!
Und dazu sein noch gesagt, dass an die Stelle von "Fenstertitel", der Text hin muss den das Programm im Titel hat was du erwischen willst.
Die Win SDK Hilfe sagt dazu : "Points to a null-terminated string that specifies the window name (the window's title)"
bensch - Fr 07.12.07 21:31
Blawen hat folgendes geschrieben: |
Das starten des Programm mit NUR EINEM Parameter (Datei) klappt nicht (?)
(oder nur nicht, wenn mehrere Parameter übergeben werden?) |
das starten mit einem parameter funktioniert bestens, nur mit 2 funktionierts nicht. und da das externe prog nicht von mir ist, kann ich da leider auch nicht im quelltext rumpfuschen :(
Sinspin hat folgendes geschrieben: |
Hast du mal via "Ausführen..." oder über CMD ausprobiert ob das Programm überhaupt mehrere Dateien haben will?
Wenn nicht, musst du dir was anderes überlegen. Wenn es dort aber geht machst du was falsch. |
habs grad über cmd versucht, da nimmts auch nur einen parameter an...
Sinspin hat folgendes geschrieben: |
Wenn du sowas tust:
Delphi-Quelltext 1: 2:
| WindowHandle:=FindWindow(nil,'Fenstertitel'); postmessage(WindowHandle,WM_close,0,0); |
Dann solltest du vor dem PostMessage auch prüfen ob du überhaupt ein Handle bekommen hast:
Delphi-Quelltext 1: 2: 3:
| WindowHandle := FindWindow(nil,'Fenstertitel'); if WindowHandle <> 0 then postmessage(WindowHandle,WM_close,0,0); |
WindowHandle ist selbstverständlich eine lokale Variable vom Typ Integer. |
achso, ich hab WindowHandle als THandle deklariert. aber selbst wenn ich es als integer deklariere, schließt sich die andere anwendung nicht.
edit: an der stelle wo ich im quelltext oben 'Fenstertitel' stehen hab, habe ich im programm den korrekten fenstertitel der externen anwendung angegeben, der scheint aber das fenster nicht zu finden...
hab auch versucht, das handle über den exe-namen der anwendung zu erhalten, funzt auch nicht :(
Blawen - Fr 07.12.07 21:41
bensch hat folgendes geschrieben: |
Das starten des Programm mit NUR EINEM Parameter (Datei) klappt nicht (?)
(oder nur nicht, wenn mehrere Parameter übergeben werden?)
das starten mit einem parameter funktioniert bestens, nur mit 2 funktionierts nicht. und da das externe prog nicht von mir ist, kann ich da leider auch nicht im quelltext rumpfuschen :( |
Somit kannst Du mehrere Parameter schlicht vergessen. Was nicht vorgesehen ist, kannst Du auch nicht nutzen!
bensch hat folgendes geschrieben: |
Wenn du sowas tust:
Delphi-Quelltext 1: 2:
| WindowHandle:=FindWindow(nil,'Fenstertitel'); postmessage(WindowHandle,WM_close,0,0); |
Dann solltest du vor dem PostMessage auch prüfen ob du überhaupt ein Handle bekommen hast:
Delphi-Quelltext 1: 2: 3:
| WindowHandle := FindWindow(nil,'Fenstertitel'); if WindowHandle <> 0 then postmessage(WindowHandle,WM_close,0,0); |
WindowHandle ist selbstverständlich eine lokale Variable vom Typ Integer.
achso, ich hab WindowHandle als THandle deklariert. aber selbst wenn ich es als integer deklariere, schließt sich die andere anwendung nicht.
edit: an der stelle wo ich im quelltext oben 'Fenstertitel' stehen hab, habe ich im programm den korrekten fenstertitel der externen anwendung angegeben, der scheint aber das fenster nicht zu finden...
hab auch versucht, das handle über den exe-namen der anwendung zu erhalten, funzt auch nicht :( |
Hast Du meinen Tipp beachtet? Bei mir funktioniert es problemlos (auch wenn die Handle-Überprüfung fehlt...)
Somit dürfte die Lösung in der Verschmelzung der beiden Tipps liegen.
bensch - Fr 07.12.07 21:50
Blawen hat folgendes geschrieben: |
Du musst nur das Handle wieder umbiegen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1Click(Sender: TObject); begin WindowHandle:=FindWindow(nil,'Dokument2 - Microsoft Word'); postmessage(WindowHandle,WM_close,0,0); WindowHandle:=FindWindow(nil,'Form1'); end; | |
wenn du das meinst, das hab ich getan. aber davon wird die andere anwendung leider auch nicht geschlossen, jedoch kann ich damit mein fenster wieder normal schließen. danke.
Blawen hat folgendes geschrieben: |
Somit kannst Du mehrere Parameter schlicht vergessen. Was nicht vorgesehen ist, kannst Du auch nicht nutzen! |
ja. jetzt versuch ich das korekte handle von der externen anwendung zu erhalten, um den darin vorkommenden opendialog die textdatei zu übergeben. aber ich scheitere ja am handle der externen anwendung :(
Blawen - Fr 07.12.07 21:58
bensch hat folgendes geschrieben: |
jetzt versuch ich das korekte handle von der externen anwendung zu erhalten, um den darin vorkommenden opendialog die textdatei zu übergeben. aber ich scheitere ja am handle der externen anwendung :( |
Ich habe es in meinem Fall mit Word versucht und es hat problemlos geklappt. Somit wird Dein verwendeter Fenstername falsch sein.
Beachte, dass ich in meinem Fall das Fenster mit dem
Dokument 2 geschlossen habe. Beim Dokument 1 würde es also so aussehen:
Delphi-Quelltext
1:
| WindowHandle := FindWindow(nil,'Dokument1 - Microsoft Word'); |
bensch - Fr 07.12.07 23:12
so, jetzt hab ich das fensterhandle. der entwickler der externen anwendung hat hinter dem fenstertitel einige leerzeichen angehängt, deswegen hab ich am anfang kein handle bekommen.
da ich jetzt das handle habe, könnte ich ja eigentlich dem opendialog der sich öffnet, wenn ich auf den button "Container laden" drücke, eine datei übergeben, oder?
hier ein ausschnitt der externen anwendung:
oder kann ich gar nicht auf den opendialog zugreifen, der sich hinter diesem button verbirgt?
schonmal ein großes dankeschön, dass ihr mir bis hierher geholfen habt :)
Dunkel - Sa 08.12.07 07:00
bensch hat folgendes geschrieben: |
oder kann ich gar nicht auf den opendialog zugreifen, der sich hinter diesem button verbirgt? |
Prinzipiel geht es sicherlich. Lade Dir das Programm XSpy (heisst es so?!) runter, besorge Dir damit das Handle des Buttons und "drücke" diesen via Messages.
btw.: "Container laden" hört sich für mich nicht nach einem "Container hinzufügen" an. Du möchtest doch immer noch 2-n Datein öffnen - bist Du Dir sicher dass das überhaupt mit dieser Applikation geht?
bensch - Sa 08.12.07 15:49
ja, das geht. ich starte das programm mit dem code
Delphi-Quelltext
1:
| ShellExecute(Application.Handle,'open','pfad zur exe','textdatei.txt',NIL, SW_HIDE); |
und versuch dann später eben nochmal eine datei über den opendialog zu laden. wenn ich es manuell mache, funktioniert es zumindest...
das mit xspy werde ich versuchen, danke!
bensch - Sa 08.12.07 16:05
ja, danke. hab ich auch gerade bemerkt :)
bensch - So 09.12.07 01:20
so, das mit winspy hat leider nicht funktioniert, da der programmierer der externen anwendung keine TWinControl - objekte (TButton, TListbox, TTreeview, etc.) benutzt hat, sondern Objekte vom Typ TControl. damit kann winspy leider nichts anfangen :(
damit liegt mein vorhaben erstmal auf eis und ich muss mir was komplett anderes überlegen. nochmals vielen dank für eure hilfe!!!
macht weiter so :)
bensch - Fr 21.12.07 23:22
ich meld mich nochmal zurück!
hab jetzt ne neuere version der externen anwendung gefunden und mit der funktioniert mein vorhaben wunderbar.
greez bensch
Wotan89 - Di 25.12.07 12:51
Wieso habt ihr das Programm, welches versteckt werden soll nicht einfach mit ShowWindow "versteckt":
Delphi-Quelltext
1: 2: 3:
| HWND:=FindWindow(nil,'FensterTiel'); ShowWindow(HWND,sw_minimize); ShowWindow(HWND,sw_hide); |
Ich denke so ist es einfacher.
bensch - Sa 29.12.07 01:25
wunderbar! danke, hat gefunzt! :D
DrRzf - Sa 29.12.07 06:59
Ich hatte vor Jahren mal an einem Programm mitgewirkt, das ein anderes Fernsteuern konnte.
Die Buttons haben wir auf diese Art gesucht
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| if not RivalRunning then Exit; sleep(500); LogOn := GetLastActivePopup(RivalHandle); LogOnBtn := FindWindowEx(LogOn,0,PCHAR('Button'),PCHAR('&Weiter')); SendMessage(LogOnBtn,BM_Click,0,0); sleep(500); LogOn := GetLastActivePopup(RivalHandle); LogOnBtn := FindWindowEx(LogOn,0,PCHAR('Button'),PCHAR('&Verbinden')); SendMessage(LogOnBtn,BM_Click,0,0); |
bensch - Do 03.01.08 16:45
hab jetzt nochmal ne frage: wieviele startparameter kann ich einer delphi-anwendung übergeben?
ich übergebe meiner exe beim starten sehr viele parameter. bei 20 parameter funktioniert alles wunderbar, aber sobald ich mehr parameter beim starten übergebe, sagt mir das programm, dass es keine gültige datei sei. (ich übergebe meinem programm dateinamen. die dateien sind alle vom selben file-typ und befinden sich im selben ordner wie die anwendung...)
gibts da ne feste grenze, dass man bei anwendungen, die mit delphi 6 entwickelt wurden, nur max. 20 parameter übergeben kann?
Blawen - Do 03.01.08 23:40
bensch hat folgendes geschrieben: |
hab jetzt nochmal ne frage: wieviele startparameter kann ich einer delphi-anwendung übergeben?
ich übergebe meiner exe beim starten sehr viele parameter. bei 20 parameter funktioniert alles wunderbar, aber sobald ich mehr parameter beim starten übergebe, sagt mir das programm, dass es keine gültige datei sei. (ich übergebe meinem programm dateinamen. die dateien sind alle vom selben file-typ und befinden sich im selben ordner wie die anwendung...)
gibts da ne feste grenze, dass man bei anwendungen, die mit delphi 6 entwickelt wurden, nur max. 20 parameter übergeben kann? |
Da musst Du ev. mal das msn kontaktieren...
Allerdings: Ist Dein Vorgehen wirklich "sinnvoll" - solltest Du Dir nicht eine grundsätzlich andere Strategie überlegen?
Fabian E. - Fr 04.01.08 01:52
also einer anwendung 20 parameter zu übergeben halte ich auch für fragwürdig...
das kann man bestimmt besser und übersichtlicher lösen...
inwieweit hast du denn einfluss auf die entgegennahme der parameter?
gruß
bensch - Fr 04.01.08 11:29
Fabian E. hat folgendes geschrieben: |
also einer anwendung 20 parameter zu übergeben halte ich auch für fragwürdig...
das kann man bestimmt besser und übersichtlicher lösen...
inwieweit hast du denn einfluss auf die entgegennahme der parameter?
gruß |
naja, also mein programm dient mehr oder weniger als editor für die dateien (die ich als parameter übergebe). d.h entweder ich starte mein programm und lade die dateien per opendialog in ein memo-feld, oder ich machs bequemer und übergebe die dateinamen als startparameter.
das erklärt natürlich einiges. aber komisch, dass immer bei mehr als 20 dateien ein fehler auftritt, obwohl die dateinamen (bzw. parameternamen) sehr unterschiedliche namen (und somit zeichenlängen) haben...
dann werd ich mein prog wohl so umbauen müssen, dass ich beim starten überprüfe, wieviele dateien sich im ordner befinden und dass der "öffnen-vorgang" dann halt für jede datei im ordner wiederholt wird...
Blawen - Sa 05.01.08 12:06
bensch hat folgendes geschrieben: |
...oder ich machs bequemer und übergebe die dateinamen als startparameter. |
So ist es doch eindeutig "nicht brauchbar" - im Prinzip müsstest Du die Startparameter (im Bedarfsfall) ja jeweils manuell anpassen --> unübersichtlich und Fehlerträchtig.
Wieso lässt Du den Benutzer die Dateien nicht via "Open"-Dialog auswählen und merkst Dir die letzten 30 Dateien (z.B.) in einer ini-Datei und lädst diese beim nächsten Programmstart mit Hilfe der ini-Datei?
Nur so nebenbei: werden die (z.B.) 30 Dateien wirklich jedesmal benötigt?
DrRzf - Sa 05.01.08 20:51
Irgendwie hab ich noch was im Hinterkopf (noch aus DOS Zeiten) dass 20 Parameter das maximum darstellt.
Diese Parameterzahl wurde damals auch in die ersten Windows Versionen (1.x, 3.x) und danach in Win95 mit übernommen.
Ob sich da aber seiddem was getan hat kann ich nicht sagen.
bensch - So 06.01.08 22:41
Blawen hat folgendes geschrieben: |
So ist es doch eindeutig "nicht brauchbar" - im Prinzip müsstest Du die Startparameter (im Bedarfsfall) ja jeweils manuell anpassen --> unübersichtlich und Fehlerträchtig.
|
ne, eigentlich net. ich hab sonst immer die dateien, die geöffnet werden sollen, markiert, und per drag&drop auf die exe gezogen. somit wurde die anwendung gestartet und die markierten dateien als parameterübergabe in die öffnen-routine aufgenommen.
jetzt hab ich es so gemacht, dass ich eine invisible file-list-box auf dem formular platziert hab, und die öffnen-routine für jedes element in der list-box durchführe. somit hab ich alle dateien, die sich zum ausführungszeitpunkt im selben ordner wie die exe befinden, mit einem klick geöffnet und im programm verarbeitet. das hätte ich schon von anfang an so machen können, bin aber erst später drauf gekommen :)
somit brauche ich jetzt keine parameter mehr übergeben, da alle dateien im ordner automatisch eingelese werden, bzw. einzelne dateien auch per opendialog hinzugefügt werden können.
danke nochmal für eure hilfe :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!