Datei-/Ordnereigenschaft anzeigen

  • Hallo zusammen =),

    habe da ein Problem, wie der Titel schon ahnen lässt, möchte ich die Datei-/Ordnereigenschaften anzeigen lassen, so wie wenn man auf eine Datei rechtsklickt und auf Eigenschaft anklickt. Nach längerem hin und hersuchen bin ich da auf die windowsintere docprob.dll gestoßen. Doch leider habe ich weder bei google.de oder bei msdn.com eine Erklärung/ Beschreibung gefunden. Leider bringt mich der Dependencywalker auch nicht weiter, da keine Funktionen von der dll exportiert werden =(.

    Könnt ihr bitte bei diesem Problem helfen?

    mfg DJ

    Einmal editiert, zuletzt von DjBasslord (14. Oktober 2008 um 20:50)

  • Wieder mal nur eine mehr schlecht als rechte Lösung von mir:
    Basierend auf folegenem Link http://support.microsoft.com/kb/152457 hab ich das zusammengeschsutert:

    Spoiler anzeigen
    [autoit]

    Const $file = "C:\WINDOWS\system32\notepad.exe"
    RunWait("explorer /select,"&$file)
    Sleep(300)
    Send("!{ENTER}")

    [/autoit]


    Bessere Lösung erwünscht (würde mich auch interessieren)

  • also wenn dus per "oberfläche" machen willst:
    ALT gedrückt halten und doppelklick... ich befürchte aber fast du willst es ohne machen :)
    Hab dazu aber das gefunden ;) is zwar in C# geschrieben sollte aber eig. kein Problem sein das in AutoIt umzuschreiben:

    Spoiler anzeigen

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Scheinbar sollte das auch mit Shellexecute funktionieren:

    [autoit]

    Const $file = "C:\WINDOWS\system32\notepad.exe"
    ShellExecute($file,"","","properties",@SW_SHOW)

    [/autoit]


    Nur bei mir funktioniert das nicht :(

  • So, das ging ja schnell mit den Anworten, leider tuts das mit dem Shellexecute nicht so ganz, ich könnte mir auch eher vorstellen, dass das Verb "properties" für z.B. Linkeigenscahft oder sowas ist, keine Ahnung :D . Habe grade nochmal im englischen forum nach file properties geschaut. (Hatte gestern erstmal nur nach der dll gesucht...) und ich wurde soeben >>hier<< von LarryDalooza fündig. Der DllCAll scheint mit Ordner und Dateien zu funktionieren.

    Oder einfach:

    [autoit]

    DllCall("shell32.dll","int","SHObjectProperties","hwnd",0,"dword",0x00000002,"wstr","c:\","wstr",0)

    [/autoit]

    Oder >>hier<< mit _ShellExecuteEx(); von MrCreatoR

    Beispiel:

    Spoiler anzeigen
    [autoit]

    HotKeySet("{Esc}", "OnExit")

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

    $sFile = @ScriptName

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

    _ShellExecuteEx($sFile, "", @ScriptDir, "properties")

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

    $sWinText = StringTrimRight($sFile, 4)
    WinWait("[CLASS:#32770]", $sWinText)
    WinWaitClose("[CLASS:#32770]", $sWinText)

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

    Func _ShellExecuteEx($sCmd, $Args = "", $sFolder = "", $Verb = "", $rState = @SW_SHOWNORMAL, $hWnd = 0)
    Local $struINFO = DllStructCreate("long;long;long;ptr;ptr;ptr;ptr;long;long;long;ptr;long;long;long;long")
    Local $struVerb = DllStructCreate("char[15];char")
    Local $struPath = DllStructCreate("char[255];char")
    Local $struArgs = DllStructCreate("char[255];char")
    Local $struWDir = DllStructCreate("char[255];char")

    DllStructSetData($struVerb, 1, $Verb)
    If StringRight($sCmd, 3) = "lnk" Then
    Local $aShortcutInfo = FileGetShortcut($sCmd)
    If IsArray($aShortcutInfo) Then
    DllStructSetData($struPath, 1, $aShortcutInfo[0])
    DllStructSetData($struWDir, 1, $aShortcutInfo[1])
    DllStructSetData($struArgs, 1, $aShortcutInfo[2])
    $rState = $aShortcutInfo[6]
    Else
    Return 0
    EndIf
    Else
    DllStructSetData($struPath, 1, $sCmd)
    DllStructSetData($struWDir, 1, $sFolder)
    DllStructSetData($struArgs, 1, $Args)
    EndIf

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

    DllStructSetData($struINFO, 1, DllStructGetSize($struINFO))
    DllStructSetData($struINFO, 2, BitOR(0xC, 0x40, 0x400))
    DllStructSetData($struINFO, 3, $hWnd)
    DllStructSetData($struINFO, 4, DllStructGetPtr($struVerb))
    DllStructSetData($struINFO, 5, DllStructGetPtr($struPath))
    DllStructSetData($struINFO, 6, DllStructGetPtr($struArgs))
    DllStructSetData($struINFO, 7, DllStructGetPtr($struWDir))
    DllStructSetData($struINFO, 8, $rState)

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

    Local $iRet = DllCall("shell32.dll", "int", "ShellExecuteEx", "ptr", DllStructGetPtr($struINFO))
    Return $iRet[0]
    EndFunc ;==>_ShellExecuteEx

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

    Func OnExit()
    Exit
    EndFunc ;==>OnExit

    [/autoit]

    Edit: Letztere Lösung scheint allerdings nicht mit Ordnern zu funktionieren.

    Jetzt fehlt nur noch, dass ich das als GUIChild aufrufen möchte, hmm

    Naja danke euch für eure Hilfe :)

    greetz DJ

    Einmal editiert, zuletzt von DjBasslord (14. Oktober 2008 um 16:46)

  • Erst mal gut das du selbst was gefunden hast, nur blöd das die erste Methode nicht funktioniert bei mir ?(
    Die zweite funktioniert bei mir aber wenigstens einwandfrei :P

  • *grins*. geht viel einfacher:
    mit

    [autoit]

    _RunDos("attrib "&$filefolder)

    [/autoit]


    Musst du nur noch filtern...

    Hm das ist aber leider nicht, dass was ich haben wollte, ich habe mir eine Art Dateimanager gebastest und will mir das Eigenschaftenfenster der Datei/des Ordners aufrufen ;). Sitze grade in der Schule und habe mal die CMD angeschmissen, deine Lösung ist ja eigentlich wie Filegetattrib und deswegen nicht das was ich suche

    Aber tzdem danke


    greetz DJ