入力中にカーソルを非表示にする設定をアクティブにする
Private Sub btnGetHidePointer_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnGetHidePointer.Click 'Open Registry Key Dim NewKey As RegistryKey = _ Registry.CurrentUser.OpenSubKey("Control Panel¥¥Desktop", True) 'Check Type Of Value In UserPreferencesMask If NewKey.GetValueKind("UserPreferencesMask") = _ RegistryValueKind.Binary Then 'Get The Current Setting Dim data As Byte() = _ DirectCast(NewKey.GetValue("UserPreferencesMask"), Byte()) If data(2) = 7 Then 'Hide Pointer Active? chkHidePointer.Checked = True ElseIf data(2) = 6 Then 'Hide Pointer When Inactive chkHidePointer.Checked = False End If End If End Sub Private Sub btnChangeHidePointer_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnChangeHidePointer.Click 'Open Registry Key Dim NewKey As RegistryKey = _ Registry.CurrentUser.OpenSubKey("Control Panel¥¥Desktop", True) 'Check Type Of Value In UserPreferencesMask If NewKey.GetValueKind("UserPreferencesMask") = _ RegistryValueKind.Binary Then 'Get The Current Setting Dim data As Byte() = _ DirectCast(NewKey.GetValue("UserPreferencesMask"), Byte()) data(2) = 7 'Set To 7 ( Activate Hide Pointer While Typing ) NewKey.SetValue("UserPreferencesMask", data) 'Update Registry End If End Sub
システムカーソルを読み込む
次の関数をフォームに追加します。
Private Function CursorList() As Cursor() ' Array Of All Cursors In Windows Forms. Return New Cursor() {Cursors.AppStarting, Cursors.Arrow, _ Cursors.Cross, Cursors.Default, Cursors.Hand, Cursors.Help, _ Cursors.HSplit, Cursors.IBeam, Cursors.No, _ Cursors.NoMove2D, Cursors.NoMoveHoriz, Cursors.NoMoveVert, _ Cursors.PanEast, Cursors.PanNE, Cursors.PanNorth, _ Cursors.PanNW, Cursors.PanSE, Cursors.PanSouth, _ Cursors.PanSW, Cursors.PanWest, Cursors.SizeAll, _ Cursors.SizeNESW, Cursors.SizeNS, Cursors.SizeNWSE, _ Cursors.SizeWE, Cursors.UpArrow, Cursors.VSplit, Cursors.WaitCursor} End Function
この関数の目的は、使用可能な全カーソルのリストを作成することです。そこからForループを使ってカーソルコンボボックスにそれらのカーソルを読み込むことができます。
Private Sub frmMouseSettings_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Dim MouseCursor As Cursor 'Create Cursor Object For Each MouseCursor In CursorList() 'Loop Through Each Cursor cboMousePointers.Items.Add(MouseCursor) 'Add to comboBox Next MouseCursor End Sub
選択されたカーソルを適用する
Private Sub cboMousePointers_SelectedIndexChanged(ByVal sender _ As System.Object, ByVal e As System.EventArgs) _ Handles cboMousePointers.SelectedIndexChanged 'Change Cursor To Seledcted Cursor Me.Cursor = CType(cboMousePointers.SelectedItem, Cursor) End Sub
これは選択されたカーソルをフォームに適用するだけです。システムレベルで設定するには、SetCursorというAPIが必要です。
これらの設定がすべて自動的に適用されることを期待するかもしれませんが、残念ながらそうはいきません。コンピュータを再起動しないと、変更した設定は有効になりません。これらの設定をすぐに適用するには、explorer.exeを再起動しなければなりません。そのためには、SendMessageTimeout APIを使用する必要があります。時間的な制約により、これについては今回は説明しませんが、タスクバーの設定を扱う次回の記事を見てください。
まとめ
マウス設定の話はこれで終わりです。この記事は参考になったでしょうか。またお会いしましょう。
