Benutzer mit den meisten Antworten
SendKeys.Send("{NUMLOCK}") geht nur zur hälfte

Frage
-
Hallo zusammen,
ich habe in der MSDN Libary gelesen das man die SendKeys-Klasse dazu versenden soll um die Tastatur zu bedienen. dort steht auch eine sehr schöne Tabelle, in der alle Tasten aufgelistet sind.
sende ich nun den befehl
SendKeys.Send("{NUMLOCK}")
blendet Windows unten rechts ein Popup fenster ein, und sagt Num-Lock on oder halt Num-Lock off.
als passiert ja irgendwas.
Die Tastur bleibt aber wie gehabt auf Num-Lock on stehen. Das heist ich kann weiterhin über den NummerBlock Zahlen eingeben.
Muss ich da noch mehr senden oder über eine API gehen ?
lieben dank
Bernd- Bearbeitet Robert BreitenhoferModerator Dienstag, 29. Dezember 2009 18:09 Formatierung
Antworten
-
Hallo Bernd,
Ja, ich glaube die API machts:
http://support.microsoft.com/kb/177674
Public Class Form1 Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Const KEYEVENTF_KEYUP = &H2 Const VK_NUMLOCK = &H90 Const KEYEVENTF_EXTENDEDKEY = &H1 Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal ByValnVirtKey As Integer) As Short Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not GetKeyState(VK_NUMLOCK) Then numlockON() End Sub Private Sub numlockON() keybd_event(VK_NUMLOCK, 0, 0, 0) keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0) End Sub End Class
Grüße,Robert
- Bearbeitet Robert BreitenhoferModerator Dienstag, 29. Dezember 2009 21:39
- Als Antwort vorgeschlagen Thorsten DörflerModerator Mittwoch, 30. Dezember 2009 10:27
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Juni 2010 13:43
-
Hier mal die allgemeine MSDN Doku zur keybd_event API:
http://msdn.microsoft.com/en-us/library/ms646304(VS.85).aspx
Die passenden KeyCodes findest Du hier aufgelistet:
Virtual-Key Codes
http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx
Ergibt für die Einfg-Taste:
Const VK_INSERT As Integer = &H2D
In einigen Fällen musst Du auch nicht unbedingt die passende Konstante deklarieren, sondern kannst diese auch aus der Keys Enumeration entnehmen.
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort markiert Bernd Schlepütz Dienstag, 29. Dezember 2009 22:11
Alle Antworten
-
Hallo Bernd,
Ja, ich glaube die API machts:
http://support.microsoft.com/kb/177674
Public Class Form1 Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Const KEYEVENTF_KEYUP = &H2 Const VK_NUMLOCK = &H90 Const KEYEVENTF_EXTENDEDKEY = &H1 Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal ByValnVirtKey As Integer) As Short Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not GetKeyState(VK_NUMLOCK) Then numlockON() End Sub Private Sub numlockON() keybd_event(VK_NUMLOCK, 0, 0, 0) keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0) End Sub End Class
Grüße,Robert
- Bearbeitet Robert BreitenhoferModerator Dienstag, 29. Dezember 2009 21:39
- Als Antwort vorgeschlagen Thorsten DörflerModerator Mittwoch, 30. Dezember 2009 10:27
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Juni 2010 13:43
-
Hallo Robert,
diese funktion habe ich. Sie geht einwandfrei.
Weil mich das seit langem nervt, habe ich mir den Win32API Helper mal runter geladen.
Diese Funktion habe ich dort auch gefunden.
Nun Klicke ich dieses an und er bringt mir die zusammenstellung.
Aber wie komme ich nun an die ZahlenWerte die dort eingetragen werden ?
Gibt es eine Beschreibung oder eine Hilfe zu diesem Programm ?
weil wenn man auf Help drückt, kommt leider nichts !
Danke
Bernd -
Bei Option Strict On muss es so heißen:
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Const KEYEVENTF_KEYUP As Integer = &H2 Const VK_NUMLOCK As Integer = &H90 Const KEYEVENTF_EXTENDEDKEY As Integer = &H1 Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal ByValnVirtKey As Integer) As Short Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click If CBool(Not GetKeyState(VK_NUMLOCK)) Then numlockON() End Sub Private Sub numlockON() keybd_event(VK_NUMLOCK, 0, 0, 0) keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0) End Sub
ich suche gerade noch die anderen raus , damit alle was davon haben.
so hier mal alle drei Tasten
Const VK_NUMLOCK As Integer = &H90 ' Num-Lock
Const VK_CAPITAL As Integer = &H14 ' Caps_Lock
Const VK_SCROLL As Integer = &H91 ' Scroll-Lock -
Hier mal die allgemeine MSDN Doku zur keybd_event API:
http://msdn.microsoft.com/en-us/library/ms646304(VS.85).aspx
Die passenden KeyCodes findest Du hier aufgelistet:
Virtual-Key Codes
http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx
Ergibt für die Einfg-Taste:
Const VK_INSERT As Integer = &H2D
In einigen Fällen musst Du auch nicht unbedingt die passende Konstante deklarieren, sondern kannst diese auch aus der Keys Enumeration entnehmen.
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort markiert Bernd Schlepütz Dienstag, 29. Dezember 2009 22:11
-
Hallo Bernd,
was möchtest Du denn erreichen? Die Einfg. Taste ist normal kein Toggle Key bzw. das Verhalten kommt auf die gerade aktive Anwendung an. In vielen Anwendungen hat die Einfg. Taste keine Funktion.
Thorsten Dörfler
Microsoft MVP Visual Basic -
Hallo Thorsten,
eigentlich möchte ich erreichen das alles Tasten die relevant sind, auch eingestellt werden könn.
Also Beispiel:
Immer wenn du irgendwo im Internet bist, dein Logon Passwort eingibst, kannst du wegen der Sternchen nicht sehen was da passiert.
Gibst du kleine oder große Buchstaben ein ?
Bei einigen Programmen schreibst du los und merkst dann, ups ich überschreibe ja....
Nun dachte ich mir, schreibst du mal ein Tool welches dir anzeigt, und auch steuern kann, was denn so mit der Tasatur los ist !
Das mit der Registry, also standart werte beim Starten habe ich fertig. Geht auch einwandfrei.
Aber du hast recht,
es ist halt von anwendung zu anwendung unterschiedlich.
also lasse ich doch einfach die Einf Taste weg.
lieben dank
Bernd