ERLEDIGT
NEIN
NEIN
ANTWORTEN
16
16
ZUGRIFFE
1613
1613
EMPFEHLEN
-
Guten tag,
ich hoffe ich bin hier einigermaßen richtig.
Ich möchte ein Programm schreiben das minimiert oder besser noch vom Systemtray herraus überwacht ob eine taste (zb. Strg) gedrückt wurde.
Im Programm selber ist das kein problem aber wie realisiere ich es das auch ausserhalb des Programms die Tasten überwacht werden?
-
VB 2010 ist VB.Net. Also verschiebe ich es in die .Net-Abteilung
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
26.01.11 14:48 #3
Das geht mit der GetAsyncKeyState-API:
Der Aufruf erfolgt so:Code vb:1
Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Keys) As Short
Code vb:1
If GetAsyncKeyState(Tastencode) = -32767 Then 'Taste gedrückt
Der Doc!A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
B: Die Scrollbar da rechts ist dir schon mal aufgefallen?
-
danke erstmal!
Und wie realisiere ich das ständig geprüft wird? hatte als Test "Form1_Load" benutzt. Aber das wird ja nur einmal abgefragt
-
Merk gerade das Maustasten garkeinen Asciicode haben.

Aber du wirst bestimmt auch dafür eine Lösung haben oder?
-
26.01.11 15:11 #6
Also irgendwie verstehe ich nicht ganz was du mit Asciicode meinst...
In der Dokumentation zu der Funktion gibt es ein Link in den alle "Virtual Keys" aufgelistet sind, und da gibt es auch die die Maustasten.
Guck dir mal VK_MBUTTON, VK_XBUTTON1, VK_XBUTTON2 an.Technologien
(Gute) Grundkenntnisse: HTML, CSS
Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL
-
Jetzt bin ich total verwirrt!
Dann sollte es deiner meinung nach für die linke maustaste also so aussehen?:
If GetAsyncKeyState(VK_LBUTTON) = -32767 Then
tester1.Text = "linke maustaste gedrückt!"
End If
wenn ich es mit ascii codes mache funktioniert es:
If GetAsyncKeyState(32) = -32767 Then
tester1.Text = "leertaste gedrückt"
End If
Bitte ein beispielGeändert von Brothers (26.01.11 um 15:31 Uhr)
-
Das ist nicht seiner Meinung nach so, sondern das steht hier in den Remarks in der Dokumentation:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Es ist übrigens auch so, dass die Dokumentation nur über die Bits 0 und 15 etwas aussagt, nicht aber über alle anderen, daher ist theoretisch (ich sage bewusst theoretisch) folgende Überprüfung kluger:
Code csharp:1 2 3
short keyState = GetAsyncKeyState(VirtualKeyCodes.VK_LBUTTON); if((keyState & 0x8001) != 0) pressed or pressed since last check;
In der Realität wirst du nichts anderes finden, aber ich finde es wichtig sich solcher Sachen immer bewusst zu sein beim Programmieren.
-
Ihr macht mich fertig....
Ich versteh nur noch Bahnhof!
Kann mir nicht einer ein Beispiel posten? so eins das auch ich verstehe.
-
Was ist dir denn nicht klar? Du hast ja bereits selber zwei Beispiele geschrieben.
-
Die aber nicht funktionieren!
Mein Stand ist bis jetzt folgender:
Code :1 2 3 4 5 6 7 8 9
Public Class Form1 Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Keys) As Short Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If GetAsyncKeyState(VK_LBUTTON) = -32767 Then tester1.Text = "linke maustaste gedrückt!" End If End Sub End Class
-
Du musst ja auch VK_LBUTTON noch irgendwo definieren! Man siehe zum Beispiel hier:
http://pinvoke.net/default.aspx/Enums.VirtualKeys
"Es funktioniert nicht." ist übrigens keine gültige Fehlerbeschreibung!
Immer schreiben, was nicht funktioniert, wie sich der Fehler äussert und was du bisher dagegen unternommen hast.
-
Was meinst du mit "funktioniert nicht"? Kommt eine Fehlermeldung? Oder passiert einfach nichts? Wie hast du VK_LBUTTON definiert?
Auch wenn dich das noch mehr verwirren wird, der Vollständigkeit halber erwähne ich es:
Alternativ kannst du auch einen globalen Maus-Hook installieren.
Siehe zum Beispiel hier für Maus-Hook oder hier für Keyboard-Hook.
Beim Maus-Hook musst du darauf achten, die Konstante WH_MOUSE_LL = 14 zu verwenden, anstatt wie in den meisten Beispielen WH_MOUSE = 7, damit der Hook auch global ist (und nicht nur für deine Anwendung gilt).hihi = -h²
-
Okay, jetzt hab ichs!
Code :1 2 3 4 5 6 7 8 9 10
Public Class Form1 Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Keys) As Short Public Const VK_LBUTTON As Long = &H1 'Left mouse button Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If GetAsyncKeyState(VK_LBUTTON) <> 0 Then tester1.Text = "shift + Lmaus" End If End Sub
Jetzt ist noch die Frage offen wie mache ichs das nicht nur einmal geprüft wird sondern ständig ob eine Taste gedrückt wurde?
-
Entweder du machst, wie Shakie angedeutet hat eine Hook und wirst daher vom Betriebssystem informiert oder du machst zum Beispiel einen Timer, der in regelmässigen Abständen prüft, ob die Taste gedrückt ist.
Ähnliche Themen
-
[VS C++ 2010] Windows Forms Buttons/Menüs funktionen programmieren
Von YannikTold im Forum .NET Windows FormsAntworten: 7Letzter Beitrag: 24.10.10, 10:36 -
[C++ Windows Forms VS 2010 Express] Wie kann ich zwei Forms miteinander vernetzen
Von YannikTold im Forum .NET Windows FormsAntworten: 20Letzter Beitrag: 06.09.10, 14:31 -
Qt 2010.04 nicht mehr Abwärskompatibel zu 2010.03?
Von thekiller im Forum Coders TalkAntworten: 2Letzter Beitrag: 05.07.10, 10:59 -
2D/3D Contest - MEIN TRAUMHAUS - 23.02.2010-22.03.2010 - Teilnahmebedingungen
Von smileyml im Forum 2D/3D Grafik-Contest - "Traumhaus"Antworten: 12Letzter Beitrag: 20.03.10, 17:12





Zitieren


Login





