Bestimmtes Programm wählen, wenn Datei geöffnet wird

  • Zitat

    Das wäre auch noch mal eine Option, einfach mal 3 Dateien in einem zip hochzuladen. Vielleicht können wir ja anhand der Datei die Version ermitteln.

    reverse engineering.....denn Wikipedia sagt: "Die Dokumentation der Dateistruktur ist nicht frei erhältlich."

  • zu beachten ist außerdem: deiner Beschreibung nach registriert sich das Programm gelegentlich als Dateierweiterungsöffner. Deshalb mein Ansatz:

    AutoItSkript wird gestartet, startet das gewünschte Programm mit RunWait, danach prüft es, ob es noch eingetragen ist, sonst trägt es sich ein.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Vielen Dank für eure ganzen Ansätze!
    Ich versuche nun mehrere Ansätze umzusetzen und berichte dann, was funktioniert hat und was ich dann verwende bis es nicht mehr funktioniert. :)
    Danke an euch alle!

  • Das ist eigentlich sehr einfach, du musst "nur" mit der *.dwg Datei als Parameter die AutoCad.exe aufrufen im Verzeichnis der passenden AutoCad-Version. Also nicht einfach run(autocad.exe *.dwg) sondern run(c:\programme\AutoCad\ACad4711\Autocad.exe *.dwg), dann bist du von der Registry unabhängig. Da der Doppelklick auf eine *.dwg bzw *.dxf ja sowieso dein "Versions-Auswahlmenü" startet, kannst du dort die ausgewählte Version zusammen mit dem Dateinamen speichern, und beim nächsten Mal ohne Auswahl, direkt mit der richtigen Version starten! So werden allmählich alle Zeichnungen der richtigen AutoCad-Version zugeordnet.

  • Danke Andy, das ist auch eine gute Idee.

    Ich habe folgendes herausgefunden. Wenn ich mit der Maus auf einer DWG-Datei rüberfahre werden mir Infos angezeigt.
    Zum Beispiel:

    Erstellt mit: AutoCAD 2009

    Das ist ja genau die Info, die ich brauche. Aber ich komm nicht an diese Info ran. Wenn man sich die Eigenschaften anzeigen lässt, gibt es dieses Attribut nicht. Wenn keine AutoCAD-Software installiert ist, gibt es dies Info "Erstell mit" auch gar nicht. Was bedeutet, dass AutoCAD bei der Installation kräftig mitmischt (es wird immer die Explorer.exe bei der Registrierung geschlossen) und irgendwo die Info aus der Datei herbekommt.

    Mir wird doch die Info angezeigt. Mich ärgert es, dass ich nicht weiß, wie ich an diese Info herankomme... :cursing:

  • Die Info ist irgendwo in der Datei gespeichert. Deshalb sollst du ja auch je eine (am besten leere) Datei von jeder Version hier hochladen und dann kann man die Unterschiede suchen ;)

  • Also ich hänge zwei Dateien mit ran. Zwei DWGs, die mit verschiedenen Versionen erstellt wurde. Mal schauen, ob ihr irgendwie an die Infos kommt.

    Spoiler anzeigen


    leeresBeispiel.dwg - mit AutoCAD Mechanical 2009 erstellt.
    leeresBeispiel.dwg - mit AutoCAD Mechanical 2011 erstellt.

  • hi, die ersten bytes bei Beispiel sind AC1021 und bei Beispiell2 AC1024....das wars, denke ich
    Reicht dir das? ansonsten schreib ich schnell nen Schnipsel, um das "auszulesen"^^

  • Die Unterscheidung ist ganz einfach. Bei anderen Dateitypen ainfach dann die Ausgabe für Unbekannt anschauen und in die Abfrage einfügen ;)

    Spoiler anzeigen
    [autoit]

    FileChangeDir("C:\Dokumente und Einstellungen\Andy\Lokale Einstellungen\Temp\mozOpenDownload\Beispiele\")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $sAutoCAD_DWG_Datei = "leeresBeispiel.dwg"
    ;~ $sAutoCAD_DWG_Datei = "leeresBeispiel2.dwg"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $sIdentifier = FileRead($sAutoCAD_DWG_Datei, 6)
    Switch $sIdentifier
    Case "AC1021"
    $sVersion = "AutoCAD Mechanical 2009"
    Case "AC1024"
    $sVersion = "AutoCAD Mechanical 2010"
    Case Else
    $sVersion = "Unbekannt (" & $sIdentifier & ")"
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, '', $sVersion)

    [/autoit]
  • Problem gelöst :thumbup: , fehlt nur noch dein fertiges Script, damit irgendwann Leute mit identischem Problem schnell befriedigt werden :D

  • Ereignis:
    Es geht nicht so einfach!

    Ich hänge eine weitere RAR an mit mehreren Beispielen...
    Der Dateiname sagt aus, mit welcher Version es erstellt wurde.

    Spoiler anzeigen


    autocadm2009.dwg mit AutoCAD Mechanical 2009 erstellt
    autocadm2010.dwg mit AutoCAD Mechanical 2010 erstellt
    acadm2011.dwg mit AutoCAD Mechanical 2011 erstellt
    acad2009.dwg mit AutoCAD 2009 erstellt
    acad2011.dwg mit AutoCAD 2011 erstellt

    Ihr seid wieder dran. :)

    EDIT: Im Inet gefunden.
    AC1024 AutoCAD 2010
    AC1021 AutoCAD 2007/2008/2009
    AC1018 AutoCAD 2004/2005/2006
    AC1015 AutoCAD 2000/2000i/2002

    3 Mal editiert, zuletzt von Xethria (23. April 2010 um 12:09)

  • Eventuell bringt dich das weiter:

    [autoit]

    $sDWG = "Acadm2011.dwg"
    $hFile = FileOpen($sDWG, 16)
    $sID = BinaryToString(FileRead($hFile, 6), 1)
    FileSetPos($hFile, 0x11, 0)
    $iDWGVersion = Number(FileRead($hFile, 1))
    FileClose($hFile)

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, '', "MagicString: " & $sID & @CRLF & "DWG-Version: " & $iDWGVersion)

    [/autoit]


    Die komplette Spezifikation gibt es hier: http://www.opendesign.com/guestfiles

  • Ich erhalte:
    ERROR: FileSetPos(): undefined function.
    FileSetPos($hFile, 0x11, 0)

    Finde aber den Fehler nicht.

  • Im hinteren Teil der Dateien finden sich reichlich Informationen zu Buildnummern und Versionen im Klartext. Natürlich wäre es einfacher, wenn das Format "offen" wäre. Ganz "leer" sind die Dateien übrigens nicht 8o
    Wahrscheinlich sind meine Kontakte bei Autodesk schon längst in Rente, die Telefonnummern hab ich vor ca. 20 Jahren aufgeschrieben....seitdem auch nichts mit denen mehr zu tun gehabt...
    Ubrigens waren die (zumindest damals) sehr hilfsbereit! Ggf. gibt es sogar ein Tool, dein "Problem" ist so ungewöhnlich ja nicht, ruf doch einfach mal an!

  • Antwort von einem Mitarbeiter der Autodesk:
    [...]Ich verstehe, dass Sie die Informationen einer Zeichnung in lesbaren Text auslesen möchten, ohne das AutoCAD auf dem System installiert ist.
    Um Ihre Anfrage zu beantworten, diese Möglichkeit gibt es leider nicht und mir ist auch nicht bekannt, dass es ohne AutoCAD auf dem System installiert zu haben anders geht [...]
    Ob es hierzu einen Script oder änliches gibt ist mir nicht bekannt, ich kann nur aussagen, dass so ein Script nicht auf unserer Webseite zu finden ist.[...]

    Hätte ich ja nicht gedacht, dass das sich nun so umständlich erweist. :thumbdown:

  • Hätte ich ja nicht gedacht, dass das sich nun so umständlich erweist. :thumbdown:

    Hehe, das war auch zu erwarten. :whistling:

    AutoCad benutzt die eigene Bibliothek "RealDWG" und zu dieser wurde noch nie ein Dokument veroeffentlicht und wird auch nie.
    ODA hat durch Reverse Engineering die Bibliothek"OpenDWG" entwickelt, zu dieser gibt es eine Doku.(Autodesk freut sich bestimmt nicht, wenn Konsumenten mit einem Programm ab 25 Euro , das DWG format schreiben und lesen koennen) Deswegen erwarte in diese Richtung kein positiven Support seitens Autodesk.

    :thumbup: Durch deine Frage und @Progandys loesung und der Doku von ODA kann ich wenigstens den Befehl "FileSetPos" nachvollziehen.
    Ich fand das Thema, sowie die Loesung sehr lehrreich.

    - MfG OpaEd

    Einmal editiert, zuletzt von opaed (23. April 2010 um 18:36)

  • Zitat

    Ich verstehe, dass Sie die Informationen einer Zeichnung in lesbaren Text auslesen möchten, ohne das AutoCAD auf dem System installiert ist.

    Wie kommt der auf das schmale Brett daß Autocad nicht installiert ist? Xethria hat doch verschiedene Versionen von Autocad und ist somit KUNDE! Und wenn der Hersteller mir erzählen will, daß die kein Tool haben um eine Zeichnung erstellt mit Version X auch der Version X zuzuordnen, dann lache ich....wer hat denn den Maushover programmiert, der Weihnachtsmann?

    Das Problem ist doch: Version X, Version Y und Version Z sind auf dem Rechner installiert. Welches Programm hat die Datei Zeichnung.DWG erstellt?

    @Xethria, wenn der Maushover über der *.DWG die Erzeugerversion anzeigt, dann würde ich mir garkeinen Stress machen und die Dateiendung dwg mit dem AutoIt-Script verknüpfen, in welchem du dann die enstsprechende Version anklicken kannst. Also Mauszeiger auf Datei, es erscheint die Version X als Tooltip, doppelklicken und aus dem Menü (im AutoItscript) die Version X auswählen und mit der Datei starten.

  • Mir ist gerade eingefallen, dass man die Tooltip-Infos auch in Autoit auslesen kann. (Das ist der Index -1 im folgenden Skript) Eventuell kommt aber bei einem anderen Index der gewünschte String direkt.

    [autoit]


    $sDWGfile = ...

    [/autoit][autoit][/autoit][autoit]

    $oApplication = ObjCreate("Shell.Application")
    $oFolder = $oApplication.NameSpace(0)

    [/autoit][autoit][/autoit][autoit]

    $oItem = $oFolder.ParseName($sDWGfile)

    [/autoit][autoit][/autoit][autoit]

    For $i = -1 To 100
    $value = $oFolder.GetDetailsOf($oItem, $i)
    If $value Then ConsoleWrite("+Index: " & $i & @CRLF & $value & @CRLF)
    Next

    [/autoit]