• 締切済み

CapsLock送信 キーストローク

以下の環境で開発を行っています。 OS:Windows2005 開発言語:vb.net2005 FrameWork 2.0 現在、フォーム上のテキストボックスにフォーカスが遷移した場合にCapsLockの状態がOffの場合のみ、SendKeyクラスのSendメソッドを利用し、CapsLockをOnに設定するようにPGの作成をおこなっています。 サンプルなどを確認したところ、以下のようなコードでいけると思ったのですが、どうもうまくいきません。 ご存知の方、ご教授下さい。 Private Sub txt1_GotFocus(・・・) Handles txt1.GotFocus 'CapsLockがOffの場合 If Not (Control.IsKeyLocked(Keys.CapsLock)) Then '大文字入力制御(CapsLockキーを送信) SendKeys.Send("+{CAPSLOCK}") 'Shift+CapsLockを送信 End If End Sub

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

CapsLockの制御をするより 入力されたデータを加工したほうが簡単なように思います 半角英数のみの対応なら テキストボックスのTextChangedイベントで dim n as integer = TextBox1.SelectedStart TextBox1.Text = TextBox1.Text.ToUpper TextBox1.SelectedStart = n といった具合でうまくいきそうです

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

> クライアント端末のOSに依存する為 Windows 系 OS 以外がある可能性あり...ということですか? SendInput なら話はわかりますが、keybd_event Api については、 Windwos 系 OS ならまず心配は不要だと思いますよ。 それでもご心配なら、いろいろな環境(OS)でテストするまでだと 思います。 どうしても API が使用不可なら、私は VB6.0 使いなので、 VB2005暦が浅く、この方法以外を知りません。すみません。 もうしばらく、別の方の回答を待ってみて下さい。

helppppppu
質問者

お礼

何度もご解答ありがとうございます。 基本的にはWindows 系 OS 以外がある可能性はほぼ無いのですが・・・ もう少し粘ってみます。 本当にありがとうございました。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんばんは。KenKen_SP です。 こんな感じでどうですか?  # 本当は keybd_event より SendInput API の方が良いみたいですけど... Imports System.Runtime.InteropServices Public Class Form1   <DllImport("user32.dll", CharSet:=CharSet.Auto)> _   Private Shared Sub keybd_event( _        ByVal bVk As Byte, _        ByVal bscan As Integer, _        ByVal dwflags As Integer, _        ByVal dwExtraInfo As IntPtr)   End Sub   Private Const KEYEVENTF_KEYUP As Integer = &H2   Private Const KEYEVENTF_EXTENDEDKEY As Integer = &H1   Private Const VK_CAPITAL As Integer = &H14   Private Sub TextBox1_GotFocus( _     ByVal sender As Object, _     ByVal e As System.EventArgs _   ) Handles TextBox1.GotFocus     If Not (Control.IsKeyLocked(Keys.CapsLock)) Then       Call keybd_event(VK_CAPITAL, 0, 0, IntPtr.Zero)       Call keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, IntPtr.Zero)     End If   End Sub End Class

helppppppu
質問者

お礼

ご解答ありがとうございます。 上記の方法でOKなのですが、どうしても APIを使いたくないので・・・(クライアント 端末のOSに依存する為) やはり無理なのでしょうか?

関連するQ&A