vb6で時間の遅れの後にEnterキーを押そうとしただけですが、私が見つけたすべての例が機能していないようです。
キーストロークをシミュレートしようとしています。フォーカスは関係ありません。
詳細を提供する必要がある場合があります。しかし、VB6 で作成されたアプリケーションに Enter キーを送信しようとしていて、それが取得されない場合は、通常、フォームの KeyPreview プロパティを true に設定していないことが原因です。現在フォーカスのあるコントロールがないと、送信したキープレスが吸収されます。
エンターキーを受け取るアプリケーションを作成した場合。アプリケーションをリファクタリングすることを強くお勧めします。これにより、enter によってトリガーされるコードはすべて、コードを介して実行できるようになります。これは通常、コードを両方のアプリケーションからアクセス可能な領域に移動することによって行われます。これは、Sendkeys が非決定論的であることが知られており、多くの奇妙さを引き起こす可能性があるためです。
ここの Win32 API 情報から使用できる keybd_event があり 、SendKeys よりも信頼性が高いことがわかりました。
イベント ハンドラーをトリガーしようとしている場合は、キー プレスを送信する代わりにコードで呼び出すことができます。
SendKeys は常に最後の手段にする必要があります。
問題は本当に焦点です。各送信の前にフォーカスを設定する必要があります。
スクリプトを使用してほぼすべてのことを完了することができます。では、何をしようとしていますか?
スクリプト内で何らかのアクションを遅らせたい場合は、次のようにします。
t = Timer + 5 'Change 5 to a higher number if you need more time to wait
Do While Timer < t
DoEvents 'This is necessary to prevent freezing
Loop
SendKeys "{ENTER}"
SendKeys "{ENTER}", True 'This might also work
Vista の SendKeys にはいくつかの問題があります。詳細と解決策については、Karl Peterson によるこの記事を参照してください。
ここで入手できる私の PushKeys プログラムを試すことができます。SendKeys と構文互換性がありますが、keybd_event API を使用し、スリープ機能が組み込まれています。
vb6 テスト アプリを作成しました。1 つのフォーム、1 つのデフォルト ボタン、1 つのタイマーを使用:
Private Sub Command1_Click()
Debug.Print CStr(Now) + " Command1"
End Sub
Private Sub Timer1_Timer()
Debug.Print CStr(Now) + " Sendkeys"
SendKeys "{Enter}"
End Sub
自分宛に送信するとうまくいくようでした。
11/30/2008 6:11:38 PM Sendkeys
11/30/2008 6:11:38 PM Command1
11/30/2008 6:11:43 PM Sendkeys
11/30/2008 6:11:43 PM Command1
11/30/2008 6:11:48 PM Sendkeys
11/30/2008 6:11:48 PM Command1
別のプロセスに送信しますか?