2011-11-01 19 views
5

私は仕事のためにオートメーションプログラムでSendKeysを使用しています。私は一緒に歩み続けて、今作成したすべてのバグを解消しようとしています:-)キャップロックをプログラムで無効にする

私はSendKeys.Send( "Test")を使用したときに、CapsLock 「テスト」とは対照的に「テスト」を生成します。

私はCAPSLOCK状態を検出しようとすると、必要に応じて切り替えるには、次のコードを使用しました:

bool tmp = Control.IsKeyLocked(Keys.CapsLock); 
if (tmp) 
{ 
    keybd_event(0x14, 0x45, KEYEVENTF_EXTENTEDKEY, (UIntPtr)0); 
    keybd_event(0x14, 0x45, KEYEVENTF_EXTENTEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); 
    //Application.DoEvents(); <-Testing. 
} 

し、すぐにいくつかのテキストを送信するためのSendKeysを使用します。

SendKeys.SendWait("This Is An Over Capitalized Test String"); 

どのそれでも、「キャッシングされたテストのトラッキングはありません」と出てくる。

この問題を回避する方法はありますか?

ただ、誰のために明確にし、問題が

SendKeys.SendWait("{CAPSLOCK}" + text); 

を使用することによって解決された私が最初に使用しようとしました:

SendKeys.SendWait("{CAPSLOCK}"); 
SendKeys.SendWait("This Is An Over Capitalized Test String"); 

まったく機能しませんでした。

+1

「SendKeys.Send」{CAPSLOCK}をテストすると「? – V4Vendetta

答えて

9

これはあなたのために機能しますか?

if(Control.IsKeyLocked(Keys.CapsLock)) 
     SendKeys.SendWait("{CAPSLOCK}This Is An Over Capitalized Test String"); 
    else 
     SendKeys.SendWait("This Is An Over Capitalized Test String"); 
+0

これをテストしただけで、CapsLockキーの状態はまったく変更されません。もう1つの方法では、CAPS LEDが消灯しますが、これも生成されません。 – HeWhoWas

+0

私はその声明を書き直しましょう。あなたが書いたのとまったく同じコードを使って、問題を解決しました。 私はSendKeys.SendWait( "{CAPSLOCK}")を呼び出していました。その文字列を別の行に送ります。キーは、送信しているテキストの残りの部分と同じSendKeysステートメントでCAPSLOCKを切り替えることにあります。ありがとう! – HeWhoWas

+0

理由は、SendkeyのCAPSLOCKが、最初のSendkeyが完了した後に余分なCAPSLOCKを送信するためです。デバッグの書き込みを追加して、何が起こるかを確認します。 – Martin

0

私は頻繁に左シフトとタブを切り替える必要があるアプリケーションがあります。私のキーボードでは、CAPSLOCKはそれらの2つのキーの間にあり、私は間違いを犯してしまいました.TABの代わりにCAPSLOCKをタイプします。私の解決策は、CAPSLOCKを逆にして代わりにTABを送信することです。驚いたことに、プログラムはスタックオーバーフローするまでループします。私はCAPSLOCKキーが2回送信されることを知りました。これは私の最終的な解決策です。

Dim CapsLockProg As Integer = 0 ' after Send Capslock arrives 2 times!!!!! 
Private Sub Description_KeyDown(sender As Object, e As KeyEventArgs) Handles Description.KeyDown 
    If e.KeyCode = Keys.Capital Then 
     If CapsLockProg < 2 Then 
      CapsLockProg += 1 
      If CapsLockProg = 1 Then 
       Windows.Forms.SendKeys.SendWait("{TAB}{CAPSLOCK}") 
      'Else 
      ' ignore 2nd Capslock 
      End If 
     Else 
      CapsLockProg = 0 
     End If 
    End If 
    If e.KeyCode = Keys.Tab Then 
    rest of code 
関連する問題