2010-11-28 49 views
0

私は、アプリケーションを起動しようとしているANダイアログを確認するには、Ctrl + M Ctrlキーを、次にAltキーGrのOを送信することで、保存を開始しています。私は、アプリケーションを強制していのSendKeys のSendMessage API?

Dim myProcess As System.Diagnostics.Process = New System.Diagnostics.Process() 
myProcess.StartInfo.FileName = Application.StartupPath & "another.exe" 
myProcess.StartInfo.Arguments = " /Args" 
myProcess.Start() 

Thread.Sleep(5000) 

System.Windows.Forms.SendKeys.Send("^%(M)^%(A)") 
System.Windows.Forms.SendKeys.Send("%(O)") 

最小限に抑えるために:私はずっと黙って行われるためにこのプロセスを好むだろう、ウィンドウがアクティブな場合

ShowWindow(p.MainWindowHandle, SHOW_WINDOW.SW_MINIMIZE) 

これは素晴らしい作品と集中(それは自分だスポーン進行状況ダイアログ)、SendKeysにはアクティブウィンドウが必要です。

私はSendMessage関数が答えになるだろうと思いますが、私は必要なキーの組み合わせを送信する任意の方法を見ることができませんか?

答えて

2

あなたは確実にキーストロークを送信するためのSendMessage()を使用することはできません。プロセスのキーボード状態、Alt、Ctrl、Shiftキーの状態を制御することはできません。 SetKeyboardState()は、あなたのプログラムではなく、あなたがコントロールしようとしている1のために働きます。 SendInputは、SendKeysが使用するものです。これは、プログラムのメインウィンドウに焦点を合わせる必要があります。

もう1つ言えば、キーボード入力を偽装するより良い方法があれば、SendKeysは既にそれを使用しています。彼はプログラムを知っているので、あなたに真の解決策を与えることができ、どこかの大学を通して彼の子供を置くしようとしているプログラマがあります。あなたがしなければならないのは、彼を見つけることだけです。

+0

こんにちはハンス、私はソースがあるので、いくつかの未知のプログラマーアプリケーションにアクセスするケースではありません...(私は主にいくつかの過去のバージョンをサポートしているので、保存プロセスのためのAPI \スイッチを追加することは価値がありません)私はSendKeyメソッドに固執すると思います。 – madlan

0

SendKeysは最も信頼できるわけではありませんが、AppActivate Functionを使用してターゲットウィンドウ/アプリケーションにフォーカスを当てることができます。

関連する問題