- 締切済み
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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
CapsLockの制御をするより 入力されたデータを加工したほうが簡単なように思います 半角英数のみの対応なら テキストボックスのTextChangedイベントで dim n as integer = TextBox1.SelectedStart TextBox1.Text = TextBox1.Text.ToUpper TextBox1.SelectedStart = n といった具合でうまくいきそうです
- KenKen_SP
- ベストアンサー率62% (785/1258)
> クライアント端末のOSに依存する為 Windows 系 OS 以外がある可能性あり...ということですか? SendInput なら話はわかりますが、keybd_event Api については、 Windwos 系 OS ならまず心配は不要だと思いますよ。 それでもご心配なら、いろいろな環境(OS)でテストするまでだと 思います。 どうしても API が使用不可なら、私は VB6.0 使いなので、 VB2005暦が浅く、この方法以外を知りません。すみません。 もうしばらく、別の方の回答を待ってみて下さい。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんばんは。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
お礼
ご解答ありがとうございます。 上記の方法でOKなのですが、どうしても APIを使いたくないので・・・(クライアント 端末のOSに依存する為) やはり無理なのでしょうか?
お礼
何度もご解答ありがとうございます。 基本的にはWindows 系 OS 以外がある可能性はほぼ無いのですが・・・ もう少し粘ってみます。 本当にありがとうございました。