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:
Danke im vorraus und ein schönen Wochenende
lg vbmaxi
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80892
Url: https://administrator.de/contentid/80892
Ausgedruckt am: 24.11.2024 um 04:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo vbMaxi,
' 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-
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."WM_SETTEXT" experimentiert.
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' 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)
Beschreibe doch mal kurz was Du eigtl. vorhast. Oder schaue Dir einfach mal das hier an.
BG, Felix -misterdemeanor-
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 Hab mir den Code nicht so genau
angeschat. Ich sollte einfach nur die Frage
stellen.
Aha.danke für deine Antwort. Eigentlich
kommt der Code von einem Freund. War mir zu
umständlich des da jetzt alles rein zu
schreiben 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.
Wenn richtig angewendet schon.Fenstertitel setzten kann. Was ja auch
funktioniert.
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.dazu bestimmt Eine Fremde Textbox etc. zu
setzt, sondern nur auszulesen, habe ich das
richtig verstanden??
lLength = SendMessage(196676,
WM_SETTEXT, _
Len(Text2.Text), Text2.Text)
'2e562e
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.