Strg + C Gleichzeitig drücken

  • VB.NET

Es gibt 62 Antworten in diesem Thema. Der letzte Beitrag () ist von SystemUnknow.

    Strg + C Gleichzeitig drücken

    Hey Leute,

    Wie kann ich VB dazu bringen, Strg und C gleichzeitig zu senden?

    (Sinn ist das kopieren von Text in externen Programmen)
    :saint:
    Strg+C ist meiner Meinung nach eine Schlechte Idee, das geht mit WinAPI viel besser, da kannst du den Text kopieren, ohne das jeweilige Programm in den Vordergrund bringen zu müssen, geschweige denn, dass es sichtbar sein muss....

    pinvoke.net/default.aspx/user32.SendMessage
    +
    WM_GETTEXT
    (hier die WM-Konstanten: pinvoke.net/default.aspx/Constants.WM)

    EM_GETSEL
    WParam= SelectionStart
    LParam = SelectionEnd

    somit kannst du mit Substring den markierten Text auslesen ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich hab die Kontanten und die SendMessage funktion eingebaut. Wie benutz ich datt jetzt? :D

    Das mit dem Array verstehe ich nicht
    :saint:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „vandi13“ ()

    Hab gerade rausgefunden, dass es mit einem Aufruf und EM_GETSELTEXT schon funktioniert^^

    Dafür machst du eine Definition, die als WParam einen Integer nimmt und als LParam einen StringBuilder:

    VB.NET-Quellcode

    1. Dim sb As new System.Text.StringBuilder()
    2. SendMessage(handle, EM_GETSELTEXT,100,sb)
    3. MsgBox("markierter Text: " & sb.ToString())

    Die Konstante 100 kannst du noch abändern, das gibt die Anzahl der Maximal zu kopierenden Zeichen an ;)

    Als handle musst du das handle der TextBox angeben, das herauszufinden variert nun von Applikation zu Applikation...
    Guck mal mit Spy++ deine Anwendung an ;)

    Sollte es einfach vom aktiven Element den Text holen hilft das:
    vbarchiv.net/tipps/details.php?id=401

    Müsste man natürlich noch in .Net übersetzen und mit dem kombinieren
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jvbsl“ ()

    Kannst du das mit dem WM_gettext noch ein wenig näher erleutern? :D
    :saint:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „vandi13“ ()

    na da hast du den Post aber fies wegeditiert...xD

    Die WM-Konstanten sind alle die Konstanten, die mit WM_ im Namen beginnen...
    EM_GETSELTEXT fängt aber wie du siehst mit EM_ an, deshalb war das bei dir nicht definiert ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    wenn ich den WM_Gettext ausgeben lasse, steht da "13" :D
    Ist das normal?

    Spy++ hab ich nicht ;p

    PS: Immer die Schuld auf andere schieben^^ :thumbsup:
    :saint:
    Ja das ist normal, aber guck doch meinen Post an:
    [VB 2010] Strg + C Gleichzeitig drücken
    WM_GETTEXT ist überflüssig, da du mit EM_GETSELTEXT bereits den selektierten Text auslesen kannst...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Danke schonmal für die Hilfe :D

    Habe den Code von dir kopiert und den Handle eingefügt.

    Da kommt folgender Fehler:

    "Der Wert vom Typ "System.Text.StringBuilder" kann nicht in "System.IntPtr" konvertiert werden"

    Das ist die Funktion die ich kopiert habe von deinem Link (die unter .NET)

    VB.NET-Quellcode

    1. Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    2. End Function
    :saint:
    Dafür machst du eine Definition, die als WParam einen Integer nimmt und als LParam einen StringBuilder

    ->

    VB.NET-Quellcode

    1. Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As Integer, ByVal lParam As System.Text.StringBuilder) As IntPtr
    2. End Function
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Das funktioniert alles vorne und hinten nicht :D

    Also nochmal von vorne (Sry wenn ich dir zu doof bin :P)

    Ich habe die ganzen Konstanten eingefügt

    VB.NET-Quellcode

    1. Public Enum WndMsg
    2. EM_GETSELTEXT = WM_USER + 62
    3. WM_ . . .


    Ich habe die Funktion :

    VB.NET-Quellcode

    1. Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As Integer, ByVal lParam As System.Text.StringBuilder) As IntPtr End Function



    Den Handle von WinSpy++ (von dem .net immer die ersten 3 Nullen löscht)


    00010784



    Und das hier als Button3 (Test button)

    VB.NET-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    2. Dim sb As New System.Text.StringBuilder()
    3. SendMessage(10784, WndMsg.EM_GETSELTEXT, 100, sb)
    4. MsgBox("markierter Text: " & sb.ToString()) End Sub



    Ausgabe:
    Markierter Text:
    :saint:
    Dann wäre ein Screenshot von dem entsprechenden Bereich aus Spy++ nicht schlecht...
    Außerdem solltest du Option Strict ON verwenden(am besten global)...
    Denn für das Handle benötigst du ein IntPtr...
    also New IntPtr(10784)
    und aufpassen, ob das nicht in Sedezimalschreibweise dort steht(Hexadezimal)...
    Evtl. mal den Rückgabewert von SendMessage(mit ToInt32) ausgeben lassen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Screenshot:





    Option Strict macht mein ganzes Programm kaputt

    Das was da unter Caption steht ist das was ich ausgegeben haben will :whistling:
    :saint:
    Option Strict macht mein ganzes Programm kaputt

    Falsch, du machst dein Programm kaputt, wenn du es nicht verwendest ;)
    All diese Fehler kann man beheben ;)

    Also WinSpy++ kenn ich jetzt nicht, aber ich weiß nicht ob das Handle Relativ angegeben wird...

    sehr von Vorteil wäre, wenn du in der Fenster übersicht dein Fenster suchst und dort dann das jeweilige Untercontrol aussuchst, dann kann man mit FindWindow+FindWindowEx das ganze dynamisch machen...
    Evtl. sagst du mir um was für eine Applikation es sich handelt, dann wär das sicher auch noch einiges einfacher für mich...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ja also ich habe einen 3G Stick in meinem Computer, welcher SMS empfängt.

    Das Programm soll dann diese SMS auslesen und per Email an mein Handy weiterschicken :)

    Hoffe du weisst wie ich das meine

    :thumbup:

    sehr von Vorteil wäre, wenn du in der Fenster übersicht dein Fenster suchst und dort dann das jeweilige Untercontrol aussuchst, dann kann man mit FindWindow+FindWindowEx das ganze dynamisch machen...



    Bahnhof :huh:
    :saint:
    Ja, aber ich habe das Programm so gemacht, dass es den gesamten Text selektiert.

    Also ist es das gleiche.. :)
    :saint:
    Dann brauchst du das mit dem markieren nicht mehr zu machen :P
    Dann macht man es mit WM_GETTEXT ;)

    Nun bräuchte ich noch die Übersicht aus WinSpy++ für das Fenster des 3G Sticks...

    blabla SystemUnknow ganz ehrlich lern lesen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---