NumLock等の変更
投稿者 もちだ  (社会人)
投稿日時
2011/3/28 08:46:03
http://msdn.microsoft.com/ja-jp/library/cc720817.aspx
検索した感じでは、MSDNのこちらが参考になるかと思います。
NumLock等の状態を確認し、切り替えるサンプルコードも示されています。
VB2005ですが…2008でも動くのではかなろうかと。
MSDNのサンプルから、NumLockだけを抜き出してみました。CheckBox1だけ配置してくださいませ。
流用すれば自動で切り替えることも出来るでしょう(勝手に切り替えるのが良いかは別として)。
検索した感じでは、MSDNのこちらが参考になるかと思います。
NumLock等の状態を確認し、切り替えるサンプルコードも示されています。
VB2005ですが…2008でも動くのではかなろうかと。
MSDNのサンプルから、NumLockだけを抜き出してみました。CheckBox1だけ配置してくださいませ。
流用すれば自動で切り替えることも出来るでしょう(勝手に切り替えるのが良いかは別として)。
Public Class Form1
Friend Class NativeMethods
Public Const VK_NUMLOCK As Integer = &H90
Friend Const KEYEVENTF_KEYUP As Integer = &H2
Private Sub New()
End Sub
<System.Runtime.InteropServices.DllImport("user32.dll")> _
Friend Shared Sub keybd_event(ByVal bVirtualKey As Byte, ByVal bScanCode As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
End Sub
End Class
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
If CheckBox1.CheckState = CheckState.Checked Then
SetKeybdStatus(True)
Else
SetKeybdStatus(False)
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If CheckBox1.Checked <> Control.IsKeyLocked(Keys.NumLock) Then
CheckBox1.Checked = Control.IsKeyLocked(Keys.NumLock)
End If
End Sub
Private Sub SetKeybdStatus(ByVal bOnOffFlag As Boolean)
If Control.IsKeyLocked(Keys.NumLock) <> bOnOffFlag Then
NativeMethods.keybd_event(NativeMethods.VK_NUMLOCK, &H45, 0, 0)
NativeMethods.keybd_event(NativeMethods.VK_NUMLOCK, &H45, NativeMethods.KEYEVENTF_KEYUP, 0)
End If
End Sub
End Class
投稿者 まだまだ  (高校生)
投稿日時
2011/3/28 10:10:04
ありがとうございます。
まさに私が求めていたのはこれです!
無事にVB2008でも動きました。
ありがとうございました。
まさに私が求めていたのはこれです!
無事にVB2008でも動きました。
ありがとうございました。
さて質問ですが、今キーボードのLumLock、CapsLock、ScrollLockの状態を
プログラムから変更させたいなと思っています。
検索してもそのような情報があまりなかったようなので、
SendKeysでキーボードのLumLockなどを押すプログラムで
代用できないかと思い、次のように書きました。
これでやってみてもオンの状態でやると一瞬消えるように見えますが、
すぐに戻ってしまいます。
そこで次のようにもやってみました。
しかし結果は同様でした。
何故これでは変更できないのでしょうか?
また、他の方法はあるのでしょうか。
宜しくお願いします。
VBは2008です。