AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi schellexecute von CD-Laufwerk funktioniert nicht immer
Thema durchsuchen
Ansicht
Themen-Optionen

schellexecute von CD-Laufwerk funktioniert nicht immer

Ein Thema von Magellan · begonnen am 29. Jul 2009 · letzter Beitrag vom 5. Aug 2009
Antwort Antwort
Seite 2 von 3     12 3      
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: schellexecute von CD-Laufwerk funktioniert nicht immer

  Alt 29. Jul 2009, 18:59
Versuch es mal so:
Delphi-Quellcode:
...
          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);
...
Ansonsten, was steht denn in spath bzw. sFile?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#12

Re: schellexecute von CD-Laufwerk funktioniert nicht immer

  Alt 29. Jul 2009, 19:12
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:
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;
Also der Code versucht den Standardbrowser rauszubekommen, davon eine neue Instanz zu starten und dieser die URL mitzugeben.

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.

[edit]
hab grad gemerkt, daß es nicht D2009-tauglich was ... und hab schnell noch ein paar div SizeOf(Char) eingefügt
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#13

Re: schellexecute von CD-Laufwerk funktioniert nicht immer

  Alt 29. Jul 2009, 19:15
Ginge das mit FindExecutable nicht etwas einfacher?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#14

Re: schellexecute von CD-Laufwerk funktioniert nicht immer

  Alt 29. Jul 2009, 19:26
Zitat von DeddyH:
Ginge das mit FindExecutable nicht etwas einfacher?
wie ich vor kurzem lernte, ja
MSDN-Library durchsuchenFindExecutable

allerdings braucht man dazu eine passende Datei
http://edn.embarcadero.com/article/26083

gut, wäre im aktuellen Beispiel zum Glück vorhandan ... also ja, geht mit MSDN-Library durchsuchenFindExecutable

nur im Falle meines Codes ... nein, da ja nur URL vorhanden ist und keine Datei
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Magellan

Registriert seit: 12. Dez 2006
Ort: Berlin
12 Beiträge
 
#15

Re: schellexecute von CD-Laufwerk funktioniert nicht immer

  Alt 30. Jul 2009, 12:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#16

Re: schellexecute von CD-Laufwerk funktioniert nicht immer

  Alt 30. Jul 2009, 12:51
Ginge es denn ohne Startprogramm?
Also die HTML direkt per Autostart zu laden, statt vorher erst dein Programm.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#17

Re: schellexecute von CD-Laufwerk funktioniert nicht immer

  Alt 30. Jul 2009, 13:19
Du kannst eigentlich eine HTML-Seite in der Autorun.inf folgendermaßen starten:
Code:
[AutoRun]
shellexecute=index.htm
icon=iteration.ico
So funktioniert das auf jeden Fall bei mir...
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Magellan

Registriert seit: 12. Dez 2006
Ort: Berlin
12 Beiträge
 
#18

Re: schellexecute von CD-Laufwerk funktioniert nicht immer

  Alt 30. Jul 2009, 13:21
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#19

Re: schellexecute von CD-Laufwerk funktioniert nicht immer

  Alt 30. Jul 2009, 13:40
Dann wäre es interessant zu wissen, ob das Problem mit CreateProcess auch besteht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
RedShakal
(Gast)

n/a Beiträge
 
#20

Re: schellexecute von CD-Laufwerk funktioniert nicht immer

  Alt 3. Aug 2009, 16:28
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... )
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz