1Danke
ERLEDIGT
JA
JA
ANTWORTEN
14
14
ZUGRIFFE
960
960
EMPFEHLEN
-
Hallo Leute,
folgendes Problem: Wir haben die Dokumenterstellung so programmiert, dass wir die Endung prüfen und entsprechend das Programm initialisieren, also bei DOT wird Microsoft Office initialisiert, bei OpenOffice-Vorlagen entsprechend OO etc.
Das Problem ist, dass ja auch Openoffice entsprechend Word-Vorlagen öffnen sollte, dazu habe ich diesen Code reinprogrammiert:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Private Function checkGetExecutable(mFile As String) As String 'http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0147.shtml On Error GoTo checkGetExecutable_Error Dim thisReturnValue As String Dim thisEXE As String Dim thisPfad As String Dim thisDatName As String Dim thisResult As Long thisEXE = Space(254) & Chr(0) thisPfad = FilesPath(mFile) thisDatName = FilesName(mFile) thisResult = FindExecutable(thisDatName, thisPfad, thisEXE) thisReturnValue = Left(thisEXE, InStr(thisEXE, Chr(0))) checkGetExecutable_Ende: On Error Resume Next checkGetExecutable = thisReturnValue Exit Function checkGetExecutable_Error: Debug.Print Err.Description & "(" & Err.Number & ")" & " checkGetExecutable in clsBookmarks " Debug.Assert (Err = False) On Error Resume Next WriteDBGView Err.Description & "(" & Err.Number & ")" & " checkGetExecutable in clsBookmarks ", App.EXEName GoTo checkGetExecutable_Ende Resume End Function
Leider funktioniert der gar nicht, Rückgabewert ist ein leerer String.
Kennt da jemand einen anderen Weg, ich wie das Standardprogramm zu einer Datei herausfinden kann, oder ist mein Code irgendwie fehlerhaft?
Wie immer danke ich im Voraus und verbleibe mit freundlichen Grüssen
Müller Matthias
-
Microsoft stellt ein Code-Schnipsel zur Verfügung um eine Datei mit dem dazugehörigen regisitrierten Programm zu öffnen.
Aus Visual Basic heraus Dokumente in zugehörigen Anwendungen öffnen---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Ich will nicht direkt öffnen, ich muss nur wissen, mit welchem Programm die Datei standardmässig geöffnet werden soll.
-
05.01.12 12:13 #4
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Müsste das nicht in der Registry im Class-Root stehen?
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.dot]
"Content Type"="application/msword"
@="Word.Template.8"
[HKEY_CLASSES_ROOT\.dot\PersistentHandler]
@="{98DE59A0-D175-11CD-A7BD-00006B827D94}"
[HKEY_CLASSES_ROOT\.dot\ShellEx]
[HKEY_CLASSES_ROOT\.dot\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}]
@="{84F66100-FF7C-4fb4-B0C0-02CD7FB668FE}"
[HKEY_CLASSES_ROOT\.dot\Word.Template.8]
[HKEY_CLASSES_ROOT\.dot\Word.Template.8\ShellNew]Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
Da hab ich auch schon gesucht. Doch wie komme ich in der Registry von .doc aud die Applikation? Ich sehe in deinen aufgelisteten Keys noch kein Weg die aufzurufende Applikation eindeutig auszulesen
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
05.01.12 13:10 #6
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Ist klassische Rekursion durch einen Verzeichnis-Baum
per GetSetting aus der Registry rausholen:
[HKEY_CLASSES_ROOT\.dot\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}]
@="{84F66100-FF7C-4fb4-B0C0-02CD7FB668FE}"
Dann per Getsetting Schlüssel "{84F66100-FF7C-4fb4-B0C0-02CD7FB668FE}" aus "HKEY_CLASSES_ROOT\CLSID\" auslesen.
Unter LocalServer32 findest du dann die EXE
[HKEY_CLASSES_ROOT\CLSID\{84F66100-FF7C-4fb4-B0C0-02CD7FB668FE}]
@="Microsoft Word-Vorschau"
"DisplayName"="Microsoft Word-Vorschau"
"DisableLowILProcessIsolation"=dword:00000001
[HKEY_CLASSES_ROOT\CLSID\{84F66100-FF7C-4fb4-B0C0-02CD7FB668FE}\InprocHandler32]
@="ole32.dll"
[HKEY_CLASSES_ROOT\CLSID\{84F66100-FF7C-4fb4-B0C0-02CD7FB668FE}\LocalServer32]
@="C:\\PROGRA~1\\MICROS~1\\Office14\\WINWORD.EXE"Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
Das geht so bei Microsoft-Programmen 2003. Aber bereits .jpg geht so nicht mehr.....
Acuh xlsx kann so nicht aufgelöst werden
Leider kenne ich die Registry zu wenig um da herauszufinden wie da die Zusammenhänge der verschiedenen Schlüsseln ist.
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
Dim objReg As Object Dim strKeyPath As String Dim arrSubKeys As Variant Dim subkey As String Dim strValue As String Dim strKey As String Const HKEY_CLASSES_ROOT = &H80000000 'Registry-Objekt anlegen Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") 'Erste Krüppelnummer auslesen strKeyPath = ".xls\ShellEx" objReg.EnumKey HKEY_CLASSES_ROOT, strKeyPath, arrSubKeys subkey = CStr(arrSubKeys(0)) strKeyPath = strKeyPath & "\" & subkey objReg.GetStringValue HKEY_CLASSES_ROOT, strKeyPath, "", strKey ' Text auslesen strKeyPath = "CLSID\" & strKey objReg.GetStringValue HKEY_CLASSES_ROOT, strKeyPath, "DisplayName", strValue Debug.Print strValue ' Programmpfad auslesen strKeyPath = "CLSID\" & strKey & "\LocalServer32" objReg.GetStringValue HKEY_CLASSES_ROOT, strKeyPath, "", strValue Debug.Print strValue 'Registry-Objekt zerstören Set objReg = Nothing
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
05.01.12 16:58 #8
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Ich bin ein Depp!
Ich entschuldige mich!
Wenn du mal beide Typen in der Class-Root (oder auch in HKLM) anschaust, dann siehst du bei ".jpg" als (Standard)-Wert "jpegfile"
Wenn du jetzt in der Registry in der Class-Root nach dem Schlüssel "jpegfile" suchst, landest du hier:
[HKEY_CLASSES_ROOT\jpegfile\shell\open\command]
Dasselbe bei ".dot": Da steht Word.Template.8 (oder sowas) genau danach weitersuchen
HKEY_CLASSES_ROOT\Word.Template.8\shell\Open\command
und dort findest unter (Standard) das jeweilige Programm, mit dem es ausgeführt wird.
Sorry nochmal, hab selbst nicht genau geschaut.Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
Das machts ja noch viel einfacher *g*
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Dim objReg As Object Dim endung As String Dim strKey As String Dim strValue As String Const HKEY_CLASSES_ROOT = &H80000000 'Registry-Objekt anlegen Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") endung = ".xlsx" 'Key auslesen objReg.GetStringValue HKEY_CLASSES_ROOT, endung, "", strKey 'Programmbeschreibung ausgeben objReg.GetStringValue HKEY_CLASSES_ROOT, strKey, "", strValue Debug.Print strValue 'Aufruf ausgeben objReg.GetStringValue HKEY_CLASSES_ROOT, strKey & "\shell\Open\command", "", strValue Debug.Print strValue 'Registry-Objekt zerstören Set objReg = Nothing
Ergibt
Code :1 2 3 4 5 6 7 8 9 10 11
.xlsx Microsoft Office Excel-Arbeitsblatt "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" /e .jpg JPEG Image C:\Windows\System32\rundll32.exe "C:\Program Files\Windows Photo Gallery\PhotoViewer.dll", ImageView_Fullscreen %1 .xml Extensible Markup Language "C:\PROGRA~1\Altova\XMLSPY~1\XMLSpy.exe" /dde
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
05.01.12 17:12 #10
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Ist es das, was du gesucht hast?
Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Ich war mal so frei und habe unsere Lösung auf mein Wiki gesetzt.
Wenn Ich habe euch, Zvoni und DrMueller, dabei zitiert. Bei Einwänden nehm ich natürlich wieder weg.
[VB] File Informationen
Und zwar gehts um die 2 folgenden Funktionen
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
'/** ' * Gibt die "Befehlszeile" aus, mit der die Datei geöffnet wird ' * @example debug.print getFileTypeCommand("help.chm") ' * -> "C:\Windows\hh.exe" %1 ' * @param String Dateiname/Dateipfad ' * @return String Pfad mit der die Datei geöffnet wird ' */ Public Function getFileTypeCommand(ByVal iFileName As String) As String Dim objReg As Object Dim extension As String Dim key As String Dim fso As New FileSystemObject Const HKEY_CLASSES_ROOT = &H80000000 'Dateiendung auslesen extension = fso.GetExtensionName(iFileName) 'Registry-Objekt anlegen Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") 'Key auslesen objReg.GetStringValue HKEY_CLASSES_ROOT, "." & extension, "", key 'Aufruf ausgeben key = key & "\shell\Open\command" objReg.GetStringValue HKEY_CLASSES_ROOT, key, "", getFileTypeCommand 'Registry-Objekt zerstören Set objReg = Nothing Set fso = Nothing End Function '/** ' * Gibt die Programmbeschreibung der Datei aus ' * @example debug.print getFileTypeDescription("help.chm") ' * -> Compiled HTML Help file ' * @param String Dateiname/Dateipfad ' * @return String Beschreibung ' */ Public Function getFileTypeDescription(ByVal iFileName As String) As String Dim objReg As Object Dim extension As String Dim key As String Dim fso As New FileSystemObject Const HKEY_CLASSES_ROOT = &H80000000 'Dateiendung auslesen extension = fso.GetExtensionName(iFileName) 'Registry-Objekt anlegen Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") 'Key auslesen objReg.GetStringValue HKEY_CLASSES_ROOT, "." & extension, "", key 'Aufruf ausgeben objReg.GetStringValue HKEY_CLASSES_ROOT, key, "", getFileTypeDescription 'Registry-Objekt zerstören Set objReg = Nothing Set fso = Nothing End Function
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
06.01.12 14:31 #13
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Yaslaw,
ich habe kein Problem damit, auch wenn ich die Verwendung des WMI und FSO als unschön empfinde.
Dazu bin ich zu sehr Purist, und ich versuche, Bindungen zur Laufzeit möglichst zu vermeiden.
Persönlich würde ich es per API-Calls machen, aber das ist Geschmackssache.
Gibts ne Adresse zu deinem Wiki?Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hallo Leute,
war in den Ferien, daher bin ich jetzt wieder dran.
Die Lösung sieht gut aus, es geht mir auch hauptsächlich im doc,docx,xls,xlsx und dann eben die entsprechenden OO Dateien.
Danke nochmal für den interessanten Dialog, hat mir, und ich denke auch Anderen, sehr geholfen.
Ähnliche Themen
-
Access 2000 / 2003; Datei mit externem Standardprogramm öffnen
Von jeipack im Forum Office-AnwendungenAntworten: 0Letzter Beitrag: 14.04.10, 15:02 -
Standardprogramm für Dateien rausfinden
Von TestIT im Forum .NET CaféAntworten: 2Letzter Beitrag: 25.09.09, 12:59 -
Standardprogramm für Dateitypen (PDF)
Von jeipack im Forum JavaAntworten: 4Letzter Beitrag: 27.03.07, 14:41 -
Standardprogramm für Dateitypen
Von broetchen im Forum .NET ArchivAntworten: 1Letzter Beitrag: 22.11.04, 11:58 -
Datein mit entsprechendem Standardprogramm öffnen
Von EriFo im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 03.07.04, 21:33





Zitieren


Login





