Autor Beitrag
fuggaz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: Sa 13.09.08 18:54 
Hallo,

folgendes Problem:
Ich will Launchy starten, aber anscheinend hat das so gar keine Lust dazu...
Ich kann jegliches Programm mittels winexec oder shellexecute starten aber launchy verweigert.
Ich habe mittels dem ProcessExplorer gesehen, dass Launchy gestartet wird aber sich sofort wieder schließt~~

Nach einigem rumspielen habe ich herausgefunden, dass ich aus dem gleichen Pfad, in dem auch Launchy liegt, es mit winexec ausführen kann. Aus einem anderen funktioniert es nicht.
Dann dachte ich mir schreib ich halt ein Programm, welches im Launchy-Pfad liegt und dies dann ausführt.
Dummerweise wird der aktuelle Pfad geändert, wenn ich es ausführe, damit meine ich:
Wenn ich es im Explorer ausführe ist der aktuelle Pfad: Z:\portableapps\launchy\
Da das Programm im selben Verzeichnis liegt brauche ich den Pfad nicht anzugeben.
Wenn ich es, ich habe es mal launch_launchy genannt, ausführe ist der aktuelle Pfad der von dem ausführenden Programm.
In meinem Fall Z:\
Tsja und das heißt, dass ich wieder aus einem anderen Pfad darauf zugreife und es wird nicht ausgeführt......

So sieht meine Zeile aus:

ausblenden Delphi-Quelltext
1:
ShellExecute(Handle, nil, PChar('z:\portableapps\launchy\launchy.exe'), nilnil, SW_SHOW);					


Für irgendwelche Vorschläge wäre ich dankbar.

mfg fuggaz

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Sa 13.09.08 19:18 
1.) Verwende nie wieder WinExec. Das ist obsolet und wird jetzt schon von neueren Windows-Versionen z.T. nicht mehr unterstützt.
2.) Schau dir mal die Parameter von ShellExecute genau an. Da gibt es einen, mit dem man den Pfad angibt. Einer von den beiden, die du auf nil setzt.

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
fuggaz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: Sa 13.09.08 19:24 
1)ich mag winexec...das ist so schön einfach;-)
2)*thumbs up* das hatte ich ganz übersehen. Jetzt klappts. Danke :-)
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Sa 13.09.08 21:56 
user profile iconfuggaz hat folgendes geschrieben:
1)ich mag winexec...das ist so schön einfach;-)
2)*thumbs up* das hatte ich ganz übersehen. Jetzt klappts. Danke :-)

Das WinExec so schön einfach ist, dachte ich auch mal. Habe das sogar mal hier im Forum geschrieben, aber jemand hat mich überzeugt (ist bestimmt schon drei Jahre her, ich finds nicht mehr), dass man es nicht verwenden sollte, weils bereits unter XP z.T. Probleme gibt. Ich bin also sozusagen der Ex-Alkoholiker, der von der Flasche weg ist, und du säufst noch. :mrgreen:
Wenn du oft ShellExecute verwendest, und du dir Arbeit beim Tippen sparen willst, schreib dir doch einen Wrapper:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure ShellExecuteEasy(app:String;params:String);
begin
ShellExecute(handle,PChar('open'),PChar(ExtractFileName(app)),PChar(params),PChar(ExtractFilePath(app)),SW_SHOW);
end;

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
fuggaz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: So 14.09.08 00:21 
:-D:-D
xD
das ist ja mal eine Antwort^^

Ja ich denke, dass mit der extra procedure macht Sinn.
Auf die einfachsten Dingen zu kommen ist oft am schwersten;-)
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: So 14.09.08 00:24 
Ansonsten liefert Delphi auch immer noch ne FMXUtils.pas mit (Im Demo-Ordner) die folgenden Wrapper bereitstellt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function ExecuteFile(const FileName, Params, DefaultDir: string;
  ShowCmd: Integer): THandle;
var
  zFileName, zParams, zDir: array[0..79of Char;
begin
  Result := ShellExecute(Application.MainForm.Handle, nil,
    StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
    StrPCopy(zDir, DefaultDir), ShowCmd);
end;


So dolle ist der allerdings auch nicht, aber er ist wenigstens etwas einfacher zu handeln, wenn man mit ShellExecute gar nicht klar kommt.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 14.09.08 02:58 
Der Rückgabewert THandle ist ja grausam. Das verleitet ja dazu, dass man denkt, dass Shellexecute irgendein Handle zurückliefert. Aber genau das tut es nicht: www.michael-puff.de/Artikel -> Shellexecute.shtml
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: So 14.09.08 03:05 
Sry, beschwer dich bei den Borländern, auf deren Mist ist es wohl einst gewachsen xD

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 14.09.08 03:35 
Ich sehe gerade, das wird ja immer schlimmer:
ausblenden Delphi-Quelltext
1:
zFileName, zParams, zDir: array[0..79of Char;					

Der Code stammt wohl noch aus 16-Bit Windows Zeiten. Die maximale Pfadlänge ist doch irgendwas um die 260 Zeichen. Und die StrCopy Aufrufe, sind auch nicht das Gelbe vom Ei.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: So 14.09.08 03:47 
Ja okay hätt ich lieber nicht posten sollen ;) (Hab aktuell D3,D7 und TD installiert, ist aber wohl in allen Versionen gleich. Das Zitat stammt aus dem TD-Ordner)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)