Umbenennung mit ControlGetFocus

  • Hallo,

    Projekt: Tool(für XP), das beim Umbenennen von Dateien automatisch die Dateiendung abhängt. Also beim Umbenennen soll dann nicht Bild1.jpg sondern nur Bild1 markiert werden.

    Ideen:
    Der ClassnameNN beim umbenennen der Datei ist Edit1
    Der Classname ist Edit
    Über eine If Abfrage, könnte man dann prüfen, ob man im Umbenennungsmodus is.
    Beide Werte können über

    [autoit]

    ControlGetFocus()

    [/autoit]


    abgerufen werden. Leider muss man bei der Funktion einen Fenstertitel angeben, da das Tool aber in ganz Windows funktionieren soll, kann man keinen festen Title angeben.

    Über Vorschläge oder Ansätze würde ich mich sehr freuen.

    AutoIT rockt! :rock:

    Einmal editiert, zuletzt von Nuke (8. Mai 2009 um 21:43)

  • Okay,

    Du kennst doch sicher das Problem beim Umbenennen von Dateien. Da wird der ganze Dateiname mit Dateiendung markiert. Das möchte ich verhindern.
    Bsp.
    Normal: Bild1.jpg < wird komplett markiert
    Tool: Bild1 < wird markiert, die Dateiendung wird nicht mitmarkiert.
    Bei Vista ist diese Funktion standart, wenn du da umbenennen willst, wird die Dateiendung automatisch "abgehängt"

    Ich hoffe ich konnte alles etwas näher erklären.

    AutoIT rockt! :rock:

  • Ja, ein allgemeines Tool.
    So was ähnliches gibts schon, heißt "Better Rename" Chip.de > Better Rename
    Aber das Tool arbeitet über einen F2 Hotkey. Der dann markiert zum umbenennen und dann die Endung abhängt.

    Sorry, ist echt knifflich zu erkläre.

    AutoIT rockt! :rock:

  • Hi,
    wenn ich rausfinden würde, wie man Texte makiert, dann würde es viel leichter gehen.
    Ich bin grad aber zu faul zum suchen und habs mit Send-Lösungen (:P) gelöst.

    Ist zwar nicht so toll, aber das kann ja jemand anderes ändern :P.

    Spoiler anzeigen
    [autoit]

    Opt("SendKeyDelay", 0)
    Opt("SendKeyDownDelay", 0)

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

    While 1
    $focus = ControlGetFocus("")
    If $focus = "Edit1" OR $focus = "Edit2" Then
    If $focus = "Edit1" Then
    $str = ControlGetText("", "", "Edit1")
    Else
    $str = ControlGetText("", "", "Edit2")
    EndIf

    $count = StringSplit($str, " ")
    $length = StringLen($str)
    $pos = StringInStr($str, ".", Default, -1)
    If $pos <> 0 Then
    For $i = 0 To $length - $pos
    Send("{Left}")
    Next

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

    For $i = 1 To $count[0]
    Send("^+{LEFT}")
    Next
    EndIf

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

    Do
    $focus = ControlGetFocus("")
    Sleep(100)
    Until $focus <> "Edit1" And $focus <> "Edit2"
    EndIf
    Sleep(500)
    WEnd

    [/autoit]

    3 Mal editiert, zuletzt von anno2008 (30. Dezember 2008 um 02:31)

  • Hi,
    Wenn du eine Datei umbenennst und man die Dateiendungen anzeigen lässt, dann markiert sich ja der gesamte Dateiname + Endung. (siehe 2. Bild :D)

    [Blockierte Grafik: http://img183.imageshack.us/img183/3892/unbenannt1eg4.jpg]

    Er will, dass immer wenn man eine Datei umbenennt, dass er dann automatisch nur den Dateinamen markiert. (siehe 3. Bild :D)
    Das hab ich auch schon so ungefähr geschrieben, aber 1. ist es noch ein bisschen verbugt und 2. ist es keine schöne Lösung ...

    Weis jemand wie man Text markieren kann?

  • Da ist das mit eingabaut und es gibt auch sonst nützliche FUnktionen ;) http://qttabbar.wikidot.com/qttabbar
    und die AutoIt-Lösung:

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    While 1
    $ActiveWin = WinGetHandle("")
    $Win = _WinAPI_GetClassName($ActiveWin)
    If $Win = "CabinetWClass" Or $Win = "ExploreWClass" Then
    $Class = ControlGetFocus($ActiveWin)
    If StringRegExp($Class,"\AEdit\d+\Z") Then
    $EditHandle = ControlGetHandle($ActiveWin,"",$Class)
    $ParentClass = _WinAPI_GetClassName(_WinAPI_GetParent($EditHandle))
    If $ParentClass = "SysListView32" Then
    $text = ControlGetText($ActiveWin,"",$Class)
    $LetzterPunkt = StringInStr($text,".",1,-1)
    If $LetzterPunkt Then
    _SendMessage($EditHandle,0xB1,0,$LetzterPunkt-1,0,"dword","dword") ; 0xB1 = EM_SETSEL
    Do
    Sleep(100)
    Until ControlGetFocus("") <> $Class
    EndIf
    EndIf
    EndIf
    EndIf
    Sleep(100)
    WEnd

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

    Einmal editiert, zuletzt von progandy (30. Dezember 2008 um 12:45)

  • Hey danke!

    Das funst einwandfrei!

    Sehr coole & schnelle Hilfe!

    EDIT:
    Ich habe noch den Desktop mit eingeschlossen ($Win = "Progman"). Vorher ging es 'nur' im Explorer Fenster

    [autoit]

    If $Win = "CabinetWClass" Or $Win = "ExploreWClass" OR $Win = "Progman" Then

    [/autoit]

    AutoIT rockt! :rock:

    Einmal editiert, zuletzt von Nuke (8. Mai 2009 um 21:58)