![]() |
Re: schellexecute von CD-Laufwerk funktioniert nicht immer
Versuch es mal so:
Delphi-Quellcode:
Ansonsten, was steht denn in spath bzw. sFile?
...
with seInfo do begin cbSize := SizeOf(TShellExecuteInfo); fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := 0; lpVerb := 'open'; lpFile := NIL; lpParameters := pchar(spath+sFile); lpDirectory := pchar(sPath); nShow := SW_SHOWNORMAL; end; (*seInfo*) ShellExecuteEx(@seInfo); ... |
Re: schellexecute von CD-Laufwerk funktioniert nicht immer
hab seit Jahren dieses in Programmen
ist jetzt für Links im Programm vorgesehn (also für Labels welche wie ein Link dargestellt werden und wo im Hint die URL versteckt ist), aber man kann ja auch einfach mal schnell TLabel(Sender).Hint durch irgendeinen String ersetzen.
Delphi-Quellcode:
Also der Code versucht den Standardbrowser rauszubekommen, davon eine neue Instanz zu starten und dieser die URL mitzugeben.
Procedure TMainForm.Label11Click(Sender: TObject);
Var S, S2: String; i: Integer; B: Boolean; Begin If Pos('mailto:', LowerCase(Trim(TLabel(Sender).Hint))) <> 1 Then Begin If not (RegQueryValue(HKEY_CLASSES_ROOT, '.html', nil, i) in [NO_ERROR, ERROR_MORE_DATA]) Then i := 0; SetLength(S, (i div SizeOf(Char)) - 1); If RegQueryValue(HKEY_CLASSES_ROOT, '.html', PChar(S), i) <> NO_ERROR Then S := ''; S := S + '\shell\opennew\command'; If not (RegQueryValue(HKEY_CLASSES_ROOT, PChar(S), nil, i) in [NO_ERROR, ERROR_MORE_DATA]) Then i := 0; SetLength(S2, (i div SizeOf(Char)) - 1); If RegQueryValue(HKEY_CLASSES_ROOT, PChar(S), PChar(S2), i) <> NO_ERROR Then S2 := ''; If S2 = '' Then Begin Delete(S, Length(S) - 10, 3); If not (RegQueryValue(HKEY_CLASSES_ROOT, PChar(S), nil, i) in [NO_ERROR, ERROR_MORE_DATA]) Then i := 0; SetLength(S2, (i div SizeOf(Char)) - 1); If RegQueryValue(HKEY_CLASSES_ROOT, PChar(S), PChar(S2), i) <> NO_ERROR Then S2 := ''; End; i := 1; B := False; While (i <= Length(S2)) and ((S2[i] <> ' ') or B) do Begin If S2[i] = '"' Then B := not B; Inc(i); End; S := Copy(S2, 1, i - 1); Delete(S2, 1, i); For i := Length(S) downto 1 do If S[i] = '"' Then Delete(S, i, 1); S := Trim(S); S2 := Trim(S2); If (S <> '') and (Pos('%1', S2) > 0) Then Begin S2 := StringReplace(S2, '%1', Trim(TLabel(Sender).Hint), []); If ShellExecute(Application.Handle, nil, PChar(S), PChar(S2), nil, SW_SHOWNORMAL) <= 32 Then S := ''; End Else S := ''; End Else S := ''; If S = '' Then ShellExecute(Application.Handle, 'open', PChar(Trim(TLabel(Sender).Hint)), nil, nil, SW_SHOWNORMAL); End; Hauptgrund für den Umweg war mal, daß die URL in einem neuem Browserfenster gestartet werden sollte. Wenn z.B. schon eine IE-Instanz geladen und der IE der Standardbrowser war, dann öffnete damals vorallem der IE die URL in diesem Fenster und die darin geöffnete Seite war "weg" ... mehrere Tabs gab's ja damals eh noch nicht und ich fand es voll nervig, wenn eine Webseite verschwand. :evil: [edit] hab grad gemerkt, daß es nicht D2009-tauglich was ... und hab schnell noch ein paar div SizeOf(Char) eingefügt |
Re: schellexecute von CD-Laufwerk funktioniert nicht immer
Ginge das mit FindExecutable nicht etwas einfacher?
|
Re: schellexecute von CD-Laufwerk funktioniert nicht immer
Zitat:
![]() allerdings braucht man dazu eine passende Datei ![]() gut, wäre im aktuellen Beispiel zum Glück vorhandan ... also ja, geht mit ![]() nur im Falle meines Codes ... nein, da ja nur URL vorhanden ist und keine Datei :roll: |
Re: schellexecute von CD-Laufwerk funktioniert nicht immer
Vielen Dank für die vielen Antworten.
Offensichtlich ist es nicht möglich, mit shellexecute oder shellexecuteEx von einer CD eine HTML-Seite im IE unter Vista zu öffnen. Im MSDN habe ich herausgefunden, dass ein CD-Laufwerk unter Vista bezüglich der Rechtesteuerung und der Benutzerkonten anders gehandelt wird als normale Laufwerke. Alle denkbaren Tests mit den o.g. Funktionen - auch eine Zertifizierung des Startprogramms - haben aber nichts gebracht. Da mir der Aufwand einfach zu groß wird, mich in die Tiefen des IE und die Zugriffsrechte unter Vista einzuarbeiten nur um eine HTML Seite von einer CD zu öffnen nutze ich folgendes workaround: Das Startprogramm erzeugt im Temp-Verzeichnis eine HTML-Seite, die sich im IE problemlos öffnet. Diese lädt dann die index.htm von der CD mit einem Refresh nach. |
Re: schellexecute von CD-Laufwerk funktioniert nicht immer
Ginge es denn ohne Startprogramm?
Also die HTML direkt per Autostart zu laden, statt vorher erst dein Programm. |
Re: schellexecute von CD-Laufwerk funktioniert nicht immer
Du kannst eigentlich eine HTML-Seite in der Autorun.inf folgendermaßen starten:
Code:
So funktioniert das auf jeden Fall bei mir...
[AutoRun]
shellexecute=index.htm icon=iteration.ico |
Re: schellexecute von CD-Laufwerk funktioniert nicht immer
Ohne Startprogramm öffnet die HTML-Datei.
Ich brauche aber das Startprogramm um vorab z.B. nach installierten Programmen zu suchen oder ggf. die lokalen Flasheinstellungen zu ändern. |
Re: schellexecute von CD-Laufwerk funktioniert nicht immer
Dann wäre es interessant zu wissen, ob das Problem mit CreateProcess auch besteht.
|
Re: schellexecute von CD-Laufwerk funktioniert nicht immer
also das Problem was du da beschrieben hast haben viele, aber nicht nur bei IE sondern auch bei vielen Anderen Programmen. Ich habe mal versucht mit Shellexecute ein Spiel auf Knopfdruck zu öffnen, es ging 1 Sek auf und hat sich anschließend wieder geschlossen. Ich nehme an da ist ein Bug in der Funktion oder ein Parameter wurde falsch übergeben... Ich konnte das Problem bis heute leider auch nie lösen...
( Ist unter XP übrigens genauso bei mir auch mit Admin rechten... ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz