プロが教えるわが家の防犯対策術!

以下の環境で開発を行っています。
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

A 回答 (3件)

CapsLockの制御をするより 入力されたデータを加工したほうが簡単なように思います



半角英数のみの対応なら テキストボックスのTextChangedイベントで
dim n as integer = TextBox1.SelectedStart
TextBox1.Text = TextBox1.Text.ToUpper
TextBox1.SelectedStart = n

といった具合でうまくいきそうです
    • good
    • 0

> クライアント端末のOSに依存する為



Windows 系 OS 以外がある可能性あり...ということですか?

SendInput なら話はわかりますが、keybd_event Api については、
Windwos 系 OS ならまず心配は不要だと思いますよ。

それでもご心配なら、いろいろな環境(OS)でテストするまでだと
思います。

どうしても API が使用不可なら、私は VB6.0 使いなので、
VB2005暦が浅く、この方法以外を知りません。すみません。
もうしばらく、別の方の回答を待ってみて下さい。
    • good
    • 0
この回答へのお礼

何度もご解答ありがとうございます。

基本的にはWindows 系 OS 以外がある可能性はほぼ無いのですが・・・
もう少し粘ってみます。

本当にありがとうございました。

お礼日時:2006/11/24 18:56

こんばんは。

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
    • good
    • 0
この回答へのお礼

ご解答ありがとうございます。

上記の方法でOKなのですが、どうしても
APIを使いたくないので・・・(クライアント
端末のOSに依存する為)

やはり無理なのでしょうか?

お礼日時:2006/11/24 17:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!