ShellExecute vs exec*
-
ShellExecute(0,"open","prog1.xyz",0,0,SW_SHOWDEFAULT);geht bei mir einwandfrei

-

also ich habe das 1:1 bei mir eingespielt und es passiert garnichts.
die execl arbeitet. das verstehe ich nun garnicht das dies bei dir gehen soll.
es gibt ja rückgabewerte der funktion. wie gebe ich diese aus?
beispiel ERROR_BAD_FORMAT
-
okok.. Probieren wir mal was!
Starte ein neues Projekt.
Plaziere einen Button drauf und geh in das Event OnClick davon!
Füge dort:ShellExecute(0,"open","main.cpp",0,0,SW_SHOWDEFAULT);ein!
Speichere die unit als main und das projekt als irgendwas!
Kompilier!
Drück auf den Button!
Jetzt müsstest du main.cpp (also die src vom projekt) öffnen! So isses bei mir!Und öffnet sich die main.cpp?
[edit] wenns nich geht dann includier mal die shellapi.h!
Glaub ich aber net, dass es daran liegt
-
ja ne das problem ist ja folgendes
shellexecute startet das programm womit der dateityp verbunden ist.
bei txt wird es also notepad sein und bei doc word.
aber xyz ist kein bekannter dateityp also wird kein entsprechendes programm gestartet. anders gesagt shellexecute ist wie der doppelklick, nur das kein "öffnen mit" dialog erscheint wenn dateityp unbekannt ist.ich brauch was wie execl() was aber das sich selbst nicht beendet.
-
Könnte sein, das Windows da manschmal nachhilfe braucht
Systemsteuerung -> System -> Erweitert -> Umgebungsvariablen -> Systemvariablen
Da die Variable PATHEXT.
Dort einfach .xyz eintraten und vielleicht geht es.Wenns klappt, musste dann nur noch ins Programm einbauen, das es automatisch gesetzt wird und fertig

Das ändern machst du mit SETSET PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.xyzACHTUNG: solltest vorher mit
SET PATHEXTdie aktuellen Einstellungen holen und mitübernehmen

Also is kein Garantiertes mittel aber versuch das einfach mal aus

NebeninfO: Eigentlich sorge die Variable nur dafür, das Datein mit den angegebenen endungen in der Shell nicht mit Erweiterung aufgerufen werden müssen...
Aber wer weis vielleicht funktioniert es dann...
Bei mir definitiv schon....
Oups bei gehts auch ohne den Eintrag...
Egal versuch mach klug
Ach ja.. ich habe es direkt in der Shell versucht... Und ich habe bestimmt keine erweiterung xyz registiert

Is schon was anders ls Doppelklick.
-
also in cmd kann man text.xyz aufrufen.
wenn ich test.xyz in test.exe umbenenne dann macht es shellexecute .. heisst sie wieder test.xyz passiert nix.
also egal was ihr da macht, auf jedenfall ruft shellexecute nicht diese umbenannte exe auf.
-
es weiss keiner wie das nun geht?

-
Lösung:
WinExec('test,xyz', SW_SHOWNORMAL);
-
Wollte ich dir auch grad vorschlagen.

Trotzdem nochmal der Hinweis, dass der ganze Ansatz mit den einzelnen Exes "suboptimal" ist.
Bei Gelegenheit solltest du dich mal ernsthaft mit der Modularisierung per DLL beschäftigen.
-
hmm ich habs probiert hat nicht funktioniert ...

hab auch path gesetzt aber vielleicht braucht windows dazu ein reboot wie auch immer, keine akzeptable lösung

WinExec(ClientInfo1.ClientName.c_str(), SW_SHOWNORMAL); geht dagegen suppa
danke ^^