_SendMessage & _SendMessageA | Unterschiede, Funktion,...

  • Huhu, ich würde gerne mein Wissensbestand erweitern. Aber ich finde nichts in den Deutschen (kann sogut wie kein Englisch) Foren. Daher frage ich einfach mal nach ^^

    Ich würde gerne wissen wofür die Funktion _SendMessage & _SendMessageA gut sind. Ich habe schon ein paar beispielscripte gesehen und kann nur daraus sehen das diese Befehle ausführen können (Wie das Abschalten des Bildschirmes) Oder Nachrichten an Controls senden kann, was mit Controlsend nicht möglich wäre...

    Zudem würde ich gerne wissen worin der Unterschied zu _SendMessage & _SendMessageA besteht.

    In der Hilfe steht irgendwas mit DLL... Aber damit kann ich leider garnichts anfangen :/


    Wenn sich jemand die Zeit nimmt und was Informativreiches schreibt, so wäre ich wirklich dankbar :d

    mfg. MG

  • Hier steht doch alles Wichtige. Die Funktion gibt es in 3 verschiedenen Ausführungen SendMessage, SendMessageA und SendMessageW. Dabei steht das A dafür, dass der ascii Zeichensatz verwendet wird und W für Unicode. Hier gibt es noch mehr Erklärung und dort sind auch alle Messages aufgelistet.

    EDIT:

    Zitat

    kann sogut wie kein Englisch

    Das hab ich wohl übersehn...

    Zitat

    You just keep on trying 'till you run out of cake. ;)


    [STEAM] Source UDF

    Einmal editiert, zuletzt von K4z (10. Juli 2012 um 12:50)

  • Ich hab einfach ma bissle rumgeschaut, was es auf deutsch gibt:

    "SendMesasge sendet eine Nachricht an ein anderes Fenster und wartet auf eine Antwort. Die Nachricht umgeht die Nachrichtenwarteschlange und wird unmittelbar verarbeitet."

    "Sendet eine Nachricht an ein Fenster oder Steuerelement (SendMessage wartet zusätzlich auf eine Bestätigung). Diese Befehle sollten mit Vorsicht verwendet werden, da das Senden einer Nachricht an das falsche Fenster (oder das Senden einer ungültigen Nachricht) zu unerwartetem Verhalten oder sogar zum Absturz der Zielanwendung führen könnte. Denn die meisten Anwendungen sind nicht dafür entworfen, um bestimmte Arten von Nachrichten aus externen Quellen zu erwarten."

    "Mit der Funktion SendMessage können Nachrichten an darstellbare Elemente einer Anwendung gesandt werden. "

  • Das ist ja schon sehr Informativreich :D Dank dir für deine Bemühungen ^^

    Habe hier mal ein paar zusätzliche Frage(n):
    Bei den Befehlen _Send(blabla)

    Wie soll das mit der Texteingabe erfolgen? Bei

    _SendMessage steht das es numerisch erfolgen soll? Hää?
    Bei _SendMessageA kann ich mir das auch nicht so ganz vorstellen. Muss ich die Werte addieren? Also die Ascii zahlen werte...

    Einmal editiert, zuletzt von Yjuq (10. Juli 2012 um 13:34)

  • Ich hab jetzt einfach mal ein kleines Beispiel geschrieben, das den Fensternamen vom Editor umändert. Jeder Message ist eine bestimmte Zahl zugeordnet.
    Zum Beispiel WM_SETTEXT = 0x000C. Du musst bei jeder Message schauen, wie du sie verwenden musst (wParam, lParam).
    SETTEXT ist hier beschrieben.

    Spoiler anzeigen
    [autoit]

    #include <SendMessage.au3>

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

    $WM_SETTEXT = 0x000C

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

    Run("notepad.exe")
    WinWaitActive("Unbenannt - Editor")

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

    $hWnd = WinGetHandle("Unbenannt - Editor")
    $tStruct = DllStructCreate("char[128]")
    DllStructSetData($tStruct, 1, "TestTestTest")
    _SendMessageA($hWnd, $WM_SETTEXT, 0, DllStructGetPtr($tStruct, 1))

    [/autoit]
  • Hier noch ein kleines Beispiel:
    Testfenster compilieren und ausführen:

    Spoiler anzeigen
    [autoit]

    GUICreate("TestFenster", 140, 55, 308, 334)
    GUICtrlCreateButton("Button", 32, 15, 75, 25)
    GUISetState(@SW_SHOW)

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

    While Sleep(100)
    If GUIGetMsg() = -3 Then Exit
    WEnd

    [/autoit]

    Folgender Code macht aus dem Button ein Radiobutton:

    Spoiler anzeigen
    [autoit]

    #include <SendMessage.au3>

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

    $BM_SETSTYLE = 0x00F4
    $BS_RADIOBUTTON = 0x00000004

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

    $hWnd = ControlGetHandle("TestFenster", "", 3)
    _SendMessageA($hWnd, $BM_SETSTYLE, $BS_RADIOBUTTON, 1)

    [/autoit]

    Eigentlich könnte man hier mal ein SendMessage Tutorial schreiben...

  • Also soweit ich weiß, ist in den ganzen Schulen Englisch Pflichtfach. Es sei denn man hat keinen Bock darauf.