tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
16
ZUGRIFFE
1613
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Brothers Brothers ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    52
    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?
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  3. #3
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Das geht mit der GetAsyncKeyState-API:
    Code vb:
    1
    
    Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Keys) As Short
    Der Aufruf erfolgt so:
    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?

  4. #4
    Brothers Brothers ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    52
    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
     

  5. #5
    Brothers Brothers ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    52
    Merk gerade das Maustasten garkeinen Asciicode haben.

    Aber du wirst bestimmt auch dafür eine Lösung haben oder?
     

  6. #6
    Avatar von RudolfG
    RudolfG RudolfG ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    Gummersbach (NRW)
    Beiträge
    337
    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

  7. #7
    Brothers Brothers ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    52
    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 beispiel
    Geändert von Brothers (26.01.11 um 15:31 Uhr)
     

  8. #8
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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.
     

  9. #9
    Brothers Brothers ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    52
    Ihr macht mich fertig....

    Ich versteh nur noch Bahnhof!

    Kann mir nicht einer ein Beispiel posten? so eins das auch ich verstehe.
     

  10. #10
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Was ist dir denn nicht klar? Du hast ja bereits selber zwei Beispiele geschrieben.
     

  11. #11
    Brothers Brothers ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    52
    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
     

  12. #12
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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.
     

  13. #13
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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²

  14. #14
    Brothers Brothers ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    52
    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?
     

  15. #15
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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

  1. [VS C++ 2010] Windows Forms Buttons/Menüs funktionen programmieren
    Von YannikTold im Forum .NET Windows Forms
    Antworten: 7
    Letzter Beitrag: 24.10.10, 10:36
  2. Antworten: 20
    Letzter Beitrag: 06.09.10, 14:31
  3. Qt 2010.04 nicht mehr Abwärskompatibel zu 2010.03?
    Von thekiller im Forum Coders Talk
    Antworten: 2
    Letzter Beitrag: 05.07.10, 10:59
  4. 2D/3D Contest - MEIN TRAUMHAUS - 23.02.2010-22.03.2010 - Teilnahmebedingungen
    Von smileyml im Forum 2D/3D Grafik-Contest - "Traumhaus"
    Antworten: 12
    Letzter Beitrag: 20.03.10, 17:12