Textfarbe

  • Hallo
    ich bin ein Anfänger AutoIT-ist. Programmierkenntnis Medium
    Hab das Forum durchsucht, aber keine passende Antwort gefunden.
    ich lese aus einer Fremdanwendung Text aus
    den dort markierten Text kann ich mit
    send("^c") krieg ich den Text in die Zwischenablage
    Frage1: wie kriege ich die Farbe des Textes in der Zwischenablage raus?
    oder - wenn ich einer Variablen den Text aus der Zwischenablage zugewiesen habe, enthält die Variable dann die Textfarbe?

    Frage2: die Fremdanwendung ist ein Richtext
    aus AutoIt v3 Window Info

    Basic Window Info
    Title: CS-STATIK - 'blabla
    Class: Afx:400000:0


    Basic Control Info
    Class: RICHEDIT50W
    Instance: 1


    Control
    Class RICHEDIT50W
    Instance 1
    ClassnameNN RICHEDIT50W1
    Name
    Advanced Mode [CLASS:RICHEDIT50W; INSTANCE:1]
    ID 4677
    Text
    Position 209, 147
    Size 1463, 828
    ControlClick Coords 718, 511
    Style 0x502011C4
    ExStyle 0x00000000
    Handle 0x00110E08


    Folgende Versuche bringen nichts:
    Local $hand = WinGetHandle('',"[CLASS:RICHEDIT50W; INSTANCE:1]") ; bringt 0
    $hand = GUICtrlGetHandle("4677") ; bringt 0
    _GUICtrlRichEdit_GetSelText("0x00110E08") ;False
    _GUICtrlRichEdit_GetCharColor(0x00110E08) ; bringt 0 egal ob schwarz oder blau

    kann mir jemand weiterhelfen?
    Gruß
    Bernd

    Einmal editiert, zuletzt von bernd456 (27. August 2010 um 09:09)

  • Hallo
    besten dank für die schnelle Hilfe.

    >>Es ist doch ein externes Fenster. Was machst du dann mit GUICtrlGetHandle?<<
    weil ich es nicht besser wußte. Wenn ich den Hinweis richtig verstehe, funktioniert das wohl nur bei selbst erstellten Fenstern.

    Ich hab , um von der speziellen Anwendung wegzukommen, mal die Datei count-for.au3 mit Wordpad geöffnet
    aus AutoIT Info
    Basic Window Info
    Title: count-for.au3 - WordPad
    Class: WordPadClass


    Class RICHEDIT50W
    Instance 1
    ClassnameNN RICHEDIT50W1
    Name
    Advanced Mode [CLASS:RICHEDIT50W; INSTANCE:1]
    ID 59648
    Text
    Position 0, 30
    Size 1610, 863
    ControlClick Coords 606, 339
    Style 0x550081C4
    ExStyle 0x00000210
    Handle 0x00071252


    in Wordpad hab ich mal "Platform: " markiert und ggfs die Farbe auf Rot geändert

    $hwnd = ControlGetHandle("count-for","","[CLASS:RICHEDIT50W; INSTANCE:1]")
    $iCol = ControlCommand("count-for","","[CLASS:RICHEDIT50W; INSTANCE:1]","GetSelected", "");funktioniert mit wordpad, aber das ist der Text, nicht die Textfarbe

    $iCol = _GUICtrlRichEdit_GetCharColor($hwnd) ; funktioniert nicht mit Wordpad kommt immer "0" egal ob der Text schwarz oder rot ist
    $iCol = ControlCommand("count-for","","[CLASS:RICHEDIT50W; INSTANCE:1]","SendCommandID", "EM_GETSELTEXT"); funktioniert nicht mit wordpad
    $iCol = ControlCommand("count-for","","[CLASS:RICHEDIT50W; INSTANCE:1]","SendCommandID", "EM_GETCHARFORMAT,1,7"); funktioniert nicht mit wordpad


    Für Hilfe bin ich dankbar

    Bernd
    P.S. gibt es evtl. die Möglichkeit der Zwischenablage die Farbinformation zu entnehmen?
    oder wenn ich einer Variablen den text der Zwischenablage zuweise?

  • Hallo bernd,

    Mal folgendes Vorweg: Nutze bitte in Zukunft die AutoIt-Tags für AutoIt Code. Das macht das ganze wesentlich übersichtlicher.

    weil ich es nicht besser wußte. Wenn ich den Hinweis richtig verstehe, funktioniert das wohl nur bei selbst erstellten Fenstern.


    Richtig. Um den Handle eines externen Controls auszulesen, nutzt man ControlGetHandle().

    Die WordPad-Versuche kann ich unter Win 7 leider nicht testen. Sobald ich versuche auf die RichEdit zuzugreifen stürzt WordPad bei mir ab.

    Die Farbinformationen werden mitgespeichert, ja. Ich weiß aber nicht wie und wo. Versuch dich im Falle des Falles mal mit den _ClipBoard_... Funktionen.

    Ein anderer Lösungsweg der mir grad durch den Kopf schießt, wäre folgender:
    Du kopierst den gesamten Inhalt deiner RichEdit in eine RichEdit auf deiner GUI, (und hoffentlich werden die Farbinformationen und Formatierungen mitkopiert), und kannst dann hoffentlich mit den RichEdit Funktionen arbeiten.

    LG

  • Hallo
    ich hab ne Lösung gefunden.

    aus _GUICtrlRichEdit_GetCharColor.au3

    Richtextedit anlegen
    per Strg+C und Strg+v das zu untersuchende Zeichen reinkopieren
    Cursor nach links verschieben
    und Farbe angeben lassen
    Das erzeugte Fenster wieder löschen


    [autoit]


    Local $hGui, $iMsg, $btnNext, $iStep = 0, $lblMsg, $hRichEdit
    $hGui = GUICreate("Example (" & StringTrimRight(@ScriptName,4) &")", 320, 350, -1, -1)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui, "This is a test.", 10, 10, 300, 220, _
    BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    GUISetState()

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

    _GuiCtrlRichEdit_SetText($hRichEdit, "")
    sleep(1000)
    send("^v")
    send("{LEFT 2}")
    sleep(1000)
    $iCol = _GuiCtrlRichEdit_GetCharColor($hRichEdit)
    GUIDelete($hGui)

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

    Scheint mir ein bischen um die Ecke gedacht
    Ich lass den Thread noch mal offen. Vielleicht bekomme ich noch einen Hinweis, wie ich die Farbe direkt aus der Zwischenablage bekommen kann.

    Bis hierher schon mal vielen Dank
    Bernd

  • Hi,

    Wenn es nur Text ist, dann geht's ...

    Konsolenausgabe:

    Spoiler anzeigen


    Gruß
    Greenhorn

  • Hallo Greenhorn


    besten Dank für Deine Antwort


    Das wird ein bischen dauern, bis ich das verstanden habe.


    So bin ich sicher, daß es nicht einen einfachen Befehl gibt, den nur bisher übersehen habe.


    Danke

    Bernd