vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Re: Praktisch? na gut, geht so: 
Autor: Preisser
Datum: 02.02.12 20:20

Hallo,

ja, laut Api-Doku kann die Funktion eine nullterminierte Zeichenfolge zurückliefern, sodass man den String beim Auftreten eines \0-Zeichens an dieser Stelle abschneiden sollte. Zum Konvertieren würde ich schon StrConv() verwenden, wobei man allerdings auch gleich die Unicodevariante von SendMessage (also SendMessageW) verwenden könnte, womit die Konvertierung ANSI->Unicode entfällt:
Option Explicit
Private Type POINTAPI
  x As Long
  y As Long
End Type
 
Private Declare Function GetCursorPos Lib "user32" ( _
  lpPoint As POINTAPI) As Long
 
Private Declare Function WindowFromPoint Lib "user32" ( _
  ByVal xPoint As Long, _
  ByVal yPoint As Long) As Long
 
Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageW" ( _
  ByVal hWnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Any) As Long
 
Private Const WM_GETTEXT = &HD
Private Const WM_GETTEXTLENGTH = &HE
 
Private Sub Timer1_Timer()
 
 
  Static lasthwnd As Long
 
  Dim oPoint As POINTAPI
  Dim hWnd As Long, i As Long
  Dim lLength As Long
  'Dim buffer() As Byte
 
  ' Mausposition ermitteln
  If GetCursorPos(oPoint) <> 0 Then
    ' Fensterhandle des Controls, auf dem sich
    ' der Mauszeiger befindet
    hWnd = WindowFromPoint(oPoint.x, oPoint.y)
 
    'Fenster gewechselt (seit letztem Timer-Event)
    If lasthwnd <> hWnd Then
       'Textlänge ermitteln
       lLength = SendMessage(hWnd, WM_GETTEXTLENGTH, 0&, 0&)
 
       Me.Caption = ""
       'Text vorhanden?
       If lLength > 0 Then
 
          'Buffer einrichten
          Dim buffer As String
          buffer = String((lLength + 1), ChrW(0))
          'Text abfragen
          SendMessage hWnd, WM_GETTEXT, lLength + 1, ByVal StrPtr(buffer)
 
          Dim strg As String
          strg = buffer
          ' Am \0-Zeichen abschneiden
          If InStr(1, strg, ChrW(0)) > 0 Then strg = Mid(strg, 1, InStr(1, _
            strg, ChrW(0)) - 1)
 
          'Infozeile im Fensterkopf ausgeben
          Me.Caption = _
          "Handle: " & CStr(hWnd) & _
          "   x= " & CStr(oPoint.x) & " y= " & CStr(oPoint.y) & _
          "  Länge = " & CStr(lLength)
 
          'Text in Control übertragen
 
          RichTextBox1.Text = strg
          RichTextBox1.SelStart = Len(RichTextBox1.Text)
 
          'Fensterhandle notieren
          lasthwnd = hWnd
 
       End If 'lLength > 0
    End If    'LastHwnd <> hWnd
  End If      'GetCursorPos
 
End Sub


Beitrag wurde zuletzt am 02.02.12 um 20:21:46 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Controls unter dem Mauszeiger auslesen - Stringlänge2.179crazyboy31.01.12 20:20
Re: Controls unter dem Mauszeiger auslesen - Stringlänge1.496Blackbox01.02.12 20:19
Re: Controls unter dem Mauszeiger auslesen - Stringlänge1.508crazyboy01.02.12 22:51
Re: Controls unter dem Mauszeiger auslesen - Stringlänge1.469Manfred X02.02.12 12:02
Kleiner Vorschlag1.511Manfred X02.02.12 14:29
Ein bißchen anderer Vorschlag1.442Blackbox02.02.12 18:44
Ich bleibe dabei ....1.492Manfred X02.02.12 18:52
Praktisch? na gut, geht so:1.428Blackbox02.02.12 19:26
Re: Praktisch? na gut, geht so:1.445Manfred X02.02.12 20:07
Re: Praktisch? na gut, geht so:1.653Preisser02.02.12 20:20
Re: Praktisch? na gut, geht so:1.447Manfred X03.02.12 12:04
Re: Controls unter dem Mauszeiger auslesen - Stringlänge1.487crazyboy02.02.12 21:11

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel