Mouse Events systemweit VB .net
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
abfrage
aufgefallen
auslese
code
erkennen
funktion
hilfe
http
last
nachtrag
normalen buchstaben
problem
system
taste
tick
trick
umwandlung
url
windows
zeichen
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wenn du das systemweit haben willst, ist das, was du suchst, ein "Mouse-Hook". Kannst ja bei Google danach suchen, ansonsten hast du z.B. hier einen Beispielcode dazu.
-
Ich habe das gleiche Problem nur würde ich das gerne anders als mit Mouse-Hook lösen könntet ihr mir dafür vieleicht einen kleinen Bespielcode (oder eine andere art von hilfe) Geben?
Ich nutze:
Visual Basic 2010 Express
Programm wir mit .NET-Framework3 erstellt -
Hi,
einen Trick gibts: verwende mal diese Funktion:
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Für die Maustasten kannst du dieser Funktion folgende Übergabe-Wert übergeben:
Private Const LMT = &H1 'Konstante für Linke Maustaste Private Const RMT = &H2 'Konstante für Rechte Maustaste Private Const MMT = &H4 'Konstante für Mittlere Maustaste
Es ist keine Event-Funktion wie du sie schon von VB kennst. Du musst periodisch abfragen, ob die Taste gedrückt wurde (z.B. mit einem Timer, jede ms).
Die Abfrage gestaltet sich dann so:
dim linkeMaustaste as long = GetAsyncKeyState (LMT) if CBool(linkeMaustaste) then Msgbox("Linke Maustaste wurde systemweit gedrückt.") end if
----------
Nachtrag 1: Die Funktion liefert bei gedrückter Taste immer den Wert -32767 zurück. Ist die Taste nicht gedrückt, so wird 0 zurückgeliefert. Die Umwandlung nach Bool liefert also immer true, wenn nicht 0 zurückgegeben wurde. Du kannst dir natürlich auch eine Konstante definieren und diese dann für deine Abfrage nutzen, z.B. so:
Private Const KeyPressed = -32767
if GetAsyncKeyState(LMT) = KeyPressed then MsgBox("Linke Maustaste gedrückt.") end if
----------
Nachtrag 2: Wenn du nun MouseUp und MouseDown auswerten willst, dann musst du das über zusätzliche Abfragen tun. Bei Bedarf kann ich dir das auch erklären. Mir wäre es aber lieber, wenn du selber daran knobelst, weil solche Sachen beim Programmieren einfach dazugehören und auch den größten Teil des Spaßes ausmachen dabei (zumindest bei mir ). Also viel Spaß dabei^^
----------
Nachtrag 3: Wenn du das hingekriegt hast, dann kannst du dir eine eigene Klasse schreiben, die das Tastendrücken so ermittelt, wie vorhin beschrieben und Events rausschmeisst, wenn irgendein MouseUp oder MouseDown passiert ist. Diese Events kannst du dann in deiner Anwendung verwenden, so wie du es gewohnt bist. Stichwörter nach denen du dazu suchen könntest sind:
Delegate Sub, Event, RaiseEvent.
Falls es da Probleme gibt, kannst du es natürlich in einem weiteren Thread posten, dann helfe ich dir gern. Aber bitte erstmal selbst ein wenig rumprobieren, hast erstmal genug Hilfestellung bekommen von mir :-))))
Beitrag zuletzt geändert: 13.11.2010 21:11:39 von tangoal -
Thanks so much!
also hier mein code wie er bisher ist:
Public Class Form1 Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Private Const LMT = &H1 'Konstante für Linke Maustaste Private Const RMT = &H2 'Konstante für Rechte Maustaste Private Const MMT = &H4 'Konstante für Mittlere Maustaste Dim last As Integer Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim linkeMaustaste As Long = GetAsyncKeyState(LMT) If CBool(linkeMaustaste) Then If last = 0 Then last = 1 'Mouse DOWN End If Else If last = 1 Then last = 0 'Mouse UP End If End If End Sub End Class
Ich habe allerdings das Problem, dass auch alle Zeichen der Tastertur außer der normalen Buchstaben wie ein Mauseklick gewertet werden.
Außerdem ist mir aufgefallen, dass die Funktion nciht nur 0 und -32767 zurück lieftert sondern zwischendurch auch viele andere Werte. Woher kommt das?
Kann es sein, das unter Windows 7 das anders läuft?
Liebe Grüße und vielen Dank für die Hilfe
Stefan -
aklasse schrieb: Ich habe allerdings das Problem, dass auch alle Zeichen der Tastertur außer der normalen Buchstaben wie ein Mauseklick gewertet werden.
Ja, diese Funktion wertet auch Tastaturwerte aus. Es gibt eine Liste an sogenannten Virtual Key Codes, die du jeweils dieser Funktion übergeben kannst, um zu prüfen, ob die Taste gedrückt wurde (siehe Microsoft Seite).
Außerdem ist mir aufgefallen, dass die Funktion nciht nur 0 und -32767 zurück lieftert sondern zwischendurch auch viele andere Werte. Woher kommt das?
Kann es sein, das unter Windows 7 das anders läuft?
Achso, zum Rückgabewert: Ja, kann auch noch andere Werte enthalten (siehe diese Microsoft Seite). Die Funktion liefert in dem Rückgabewert noch mehr Informationen zurück, auf die man sich jedoch laut Microsoft nicht unbedingt verlassen darf...
Hm, bei mir funktioniert das so... ist mir nicht bekannt, ob das mit Win7 funktioniert oder nicht... ich arbeite auf XP.
Also, wenn du eine Taste drückst, so wird deine If-Bedingung CBool(linkeMaustaste) wahr? -
Du musst die Bitwerte abprüfen
statt
if GetAsyncKeyState(LMT) = KeyPressed then
MsgBox("Linke Maustaste gedrückt.")
end if
if ((GetAsyncKeyState(LMT) AND KeyPressed) = KeyPressed) then MsgBox("Linke Maustaste gedrückt.") end if
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage