vbmaxi
Goto Top

WM SETTEXT - Nur 3 Zeichen dann Zufallswert

Hallo @all,
ich habe ein bisschen mit der Funktion "WM_SETTEXT" experimentiert. Das Problem ist nur, dass ich der Funktion nur 3 Zeichen übergeben kann. Wenn ich mehr übergebe dann wird dem Text noch ein zufälliges Zeichen angehängt. Wie krieg ich das hin ohne das Zufällige Zeichen??

Hier der Code:
Option Explicit

' zunächst die benötigten API-Deklarationen  
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 _  
  "SendMessageA" (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_SETTEXT = &HC

Private Sub Form_Load()
  ' Timer initialisieren  
  tmrTimer.Interval = 10
  tmrTimer.Enabled = False
End Sub
Private Sub cmdStart_Click()
  tmrTimer.Enabled = Not tmrTimer.Enabled
  cmdStart.Caption = IIf(tmrTimer.Enabled, "Stop", "Start")  
End Sub

Private Sub Label1_Click()

End Sub

Private Sub tmrTimer_Timer()
  Dim oPoint As POINTAPI
  Dim hWnd As Long
  Dim lLength As Long
  Dim sWindowText As String
  
  ' Mausposition ermitteln  
  If GetCursorPos(oPoint) <> 0 Then
    ' Fensterhandle des Controls, auf dem sich  
    ' der Mauszeiger befindet  
    hWnd = WindowFromPoint(oPoint.x, oPoint.y)
    sWindowText = Text2.Text
    ' Fenstertext des Controls ermitteln  
    lLength = SendMessage(hWnd, WM_SETTEXT, _
      2, CLng("&H2e4d20")) '2e562e  
      
    ' Handle anzeigen  
    lblHandle.Caption = hWnd & ", " & Len(Text2.Text) & ", " & sWindowText  
    
    ' Mausposition anzeigen  
    lblPos.Caption = "x " & oPoint.x & " y " & oPoint.y  
    
    ' Fenstertext anzeigen  
    'lblWindowText.Caption = Left(sWindowText, lLength)  
  End If
End Sub


Danke im vorraus und ein schönen Wochenende

lg vbmaxi

Content-Key: 80892

Url: https://administrator.de/contentid/80892

Printed on: April 19, 2024 at 21:04 o'clock

Member: misterdemeanor
misterdemeanor Feb 16, 2008 at 13:16:51 (UTC)
Goto Top
Hallo vbMaxi,


ich habe ein bisschen mit der Funktion
"WM_SETTEXT" experimentiert.
Entweder hast Du Dich falsch ausgedrückt, oder etwas falsch verstanden. WM_SETTEXT ist (wie auch in Deinem Code deklariert) eine Konstante. Sprich nur ein Alias für einen Zahlenwert.

Hier der Code:

Private Const WM_GETTEXT = &HD

Private Sub tmrTimer_Timer()
...
sWindowText = Text2.Text
' Fenstertext des Controls
ermitteln
lLength = SendMessage(hWnd, WM_SETTEXT,
_
2, CLng("&H2e4d20"))
'2e562e
?? Wenn Du etwas ermitteln willst, hier also den Text eines Controls über dem sich die Maus befindet, ist die Message SET_TEXT logisch gesehen doch falsch...richtig? Außerdem wird der dritte Parameter von SendMessage bei senden der SET_TEXT-Message nicht benutzt. Vor allem aber ist der 4te Parameter ein Pointer zu einem String der den zu setzenden Text beinhalten soll. Guckst Du hier

' Handle anzeigen
lblHandle.Caption = hWnd & ",
" & Len(Text2.Text) & ",
" & sWindowText
Hier machst Du nichts weiter als das Handle des Windows anzuzeigen über welchem sich der Mauscursor befindet. Dann natürlich noch die Länge des Textes der in Text2 und den Text aus Text2 selbst.

' Mausposition anzeigen
lblPos.Caption = "x " &
oPoint.x & " y " &
oPoint.y
OK, fein.

' Fenstertext anzeigen
'lblWindowText.Caption =
Left(sWindowText, lLength)
Wieder wie oben. Nur das was in Text2 steht und dessen Textlänge.

Beschreibe doch mal kurz was Du eigtl. vorhast. Oder schaue Dir einfach mal das hier an.

BG, Felix -misterdemeanor-
Member: vbMaxi
vbMaxi Feb 16, 2008 at 19:32:15 (UTC)
Goto Top
hi,
danke für deine Antwort. Eigentlich kommt der Code von einem Freund. War mir zu umständlich des da jetzt alles rein zu schreiben face-wink Hab mir den Code nicht so genau angeschat. Ich sollte einfach nur die Frage stellen. Er meinte dass man damidt z.B. Fenstertitel setzten kann. Was ja auch funktioniert. Allerdings nur bis 3 Zeichen. Laut deiner Angaben ist WM_SETTEXT gar nicht dazu bestimmt Eine Fremde Textbox etc. zu setzt, sondern nur auszulesen, habe ich das richtig verstanden??

lg maxi
Member: vbMaxi
vbMaxi Feb 16, 2008 at 20:44:55 (UTC)
Goto Top
hi,
Problem gelöst:
Option Explicit

' zunächst die benötigten API-Deklarationen  
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 _  
  "SendMessageA" (ByVal hWnd As Long, _  
  ByVal wMsg As Long, ByVal wParam As Long, _
  ByVal lParam As String) As Long

Private Const WM_GETTEXT = &HD
Private Const WM_SETTEXT = &HC

Private Sub Form_Load()
  ' Timer initialisieren  
  tmrTimer.Interval = 10
  tmrTimer.Enabled = False
  
  tmrTimer.Enabled = Not tmrTimer.Enabled
End Sub
Private Sub Label1_Click()

End Sub

Private Sub tmrTimer_Timer()
  Dim oPoint As POINTAPI
  Dim hWnd As Long
  Dim lLength As Long
  Dim sWindowText As String
  
  ' Mausposition ermitteln  
  If GetCursorPos(oPoint) <> 0 Then
    ' Fensterhandle des Controls, auf dem sich  
    ' der Mauszeiger befindet  
    hWnd = WindowFromPoint(oPoint.x, oPoint.y)
    sWindowText = Text2.Text
    ' Fenstertext des Controls ermitteln  
    lLength = SendMessage(196676, WM_SETTEXT, _
      Len(Text2.Text), Text2.Text)   '2e562e  
      
    ' Handle anzeigen  
    lblHandle.Caption = hWnd & ", " & Len(Text2.Text) & ", " & sWindowText  
    
    ' Mausposition anzeigen  
    lblPos.Caption = "x " & oPoint.x & " y " & oPoint.y  
    
    ' Fenstertext anzeigen  
    'lblWindowText.Caption = Left(sWindowText, lLength)  
    End
  End If
End Sub

lg vbmaxi
Member: misterdemeanor
misterdemeanor Feb 17, 2008 at 15:17:09 (UTC)
Goto Top
hi,
danke für deine Antwort. Eigentlich
kommt der Code von einem Freund. War mir zu
umständlich des da jetzt alles rein zu
schreiben face-wink Hab mir den Code nicht so genau
angeschat. Ich sollte einfach nur die Frage
stellen.
Aha.
Er meinte dass man damidt z.B.
Fenstertitel setzten kann. Was ja auch
funktioniert.
Wenn richtig angewendet schon.
Laut deiner Angaben ist WM_SETTEXT gar nicht
dazu bestimmt Eine Fremde Textbox etc. zu
setzt, sondern nur auszulesen, habe ich das
richtig verstanden??
Nein, falsch verstanden. Man (ich) konnte nur nicht erraten was Dein Freund machen wollte.
Member: misterdemeanor
misterdemeanor Feb 17, 2008 at 15:23:09 (UTC)
Goto Top
lLength = SendMessage(196676,
WM_SETTEXT, _
Len(Text2.Text), Text2.Text)
'2e562e

Warum codierst Du einen konstanten Wert? Sobald das Contrl mit dem Handle nicht mehr existiert nutzt Dir der Code nichts mehr. Noch seltsamer da Du ja vorher das Handle unter dem sich die Maus befindest vorher ermittelst. Seltsam.
Member: vbMaxi
vbMaxi Feb 17, 2008 at 17:52:00 (UTC)
Goto Top
hi misterdemeanor,
ok aber jetzt hat es ja geklappt. Nochmal danke für deine Hilfe.


lg vbmaxi