2012-03-20 7 views
0

私はこのクラスを使用してアクティブなアプリケーションにキーストロークを送信するために、Sendkeysクラスに関する問題があります。 は、最初のステップとして、私はvb.netで簡単なアプリケーションを作ったこと達成するためにので、{入力}キーストロークをテストしたい2010VB.NETでキーストロークを送信する簡単なアプリケーション

Public Class Form1 
Public Shared data As String 
Private Sub SendintText(command As String) 
    Try 
     SendKeys.SendWait(command) 
    Catch e As Exception 
     MsgBox(e.StackTrace) 
    End Try 
End Sub 

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    data = TextBox1.Text.ToString 
    SendingText(data) 
End Sub 

私が実行しようとしたエンドクラス

{Enter}私は無限ループエラーを受け取りました: System.Windows.Forms.dllで 'System.StackOverflowException'型の未処理の例外が発生しました 誰かが私を助けることができますか?

LATER EDIT:

  1. のVisual Studio
  2. ターゲットアプリケーション

どのようにすることができます:バックグラウンドで私は2つのアプリケーションがある場合は一方で、私は別の例

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    System.Threading.Thread.Sleep(2000) 
    SendKeys.SendWait("{ENTER}") 
End Sub 

を発見しました私はターゲットアプリケーションに焦点を当てています。なぜなら今、私がフォームを実行しているとき、そのf ormがアクティブになりました。いくつかのパラメータ(送信したいキー)でコマンドプロンプトからwinformを呼び出す方法はありますか? ...輸入システム 輸入のSystem.Windows.Formsを私はWindowsフォームのためのアイデアを、それを放棄する必要があり、そうfinnally私はキーストロークをシミュレートコンソールアプリケーションで簡単なプログラムを作った

その後EDIT2 強いテキスト Oにおけるところで

モジュールのModule1

Sub Main(ByVal args() As String) 
    Dim data As String = args(0) 
    Console.WriteLine("You insert the : {0}", data) 
    System.Threading.Thread.Sleep(5000) 
    SendKeys.SendWait(data) 
End Sub 

エンドモジュール

rderは\ "テスト\"が必要なパラメータで二重引用符を使用する...(私は調べるのに15分を費やしている)ので、有用かもしれない。 情報をもう一度ありがとう。

+0

を送信する必要があります。キーにボタンを送る目的は何ですか? – PraveenVenu

+0

私は送信キー(テキストボックスにそのキーを入力することによって)をアプリケーションにテストしたいだけです...それを行う可能性はありますか? – Operagust

+0

もちろんそうすることができます。見たことがありますか?あなたは何を探しましたか? – UnhandledExcepSean

答えて

0

別のアプリケーションにSENDKEYするためには、最初のボタンのクリックでそのアプリケーションをアクティブにしてからボタンをクリックしたときに、それがフォーカスを取得したキー

MSDN Link

// Get a handle to an application window. 
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)] 
public static extern IntPtr FindWindow(string lpClassName, 
    string lpWindowName); 

// Activate an application window. 
[DllImport("USER32.DLL")] 
public static extern bool SetForegroundWindow(IntPtr hWnd); 

// Send a series of key presses to the Calculator application. 
private void button1_Click(object sender, EventArgs e) 
{ 
    // Get a handle to the Calculator application. The window class 
    // and window name were obtained using the Spy++ tool. 
    IntPtr calculatorHandle = FindWindow("CalcFrame","Calculator"); 

    // Verify that Calculator is a running process. 
    if (calculatorHandle == IntPtr.Zero) 
    { 
     MessageBox.Show("Calculator is not running."); 
     return; 
    } 

    // Make Calculator the foreground application and send it 
    // a set of calculations. 
    SetForegroundWindow(calculatorHandle); 
    SendKeys.SendWait("111"); 
    SendKeys.SendWait("*"); 
    SendKeys.SendWait("11"); 
    SendKeys.SendWait("="); 
} 
+0

例のおかげで、私は私の質問を投稿する前にすでに読んでいます。 – Operagust

+0

また、私はいつも私はこのウィンドウフォームアプリケーションを実行しているとき、私は別のアプリケーションが開いている場合でも、Windowsフォームに焦点を当てて気づいた... – Operagust

+0

私はVB.NETでこれを得ることができなかった "SendWaitではないSendKeysのメンバー "と呼ばれています。助言がありますか? – Lou

0

ボタンにフォーカスがあります。ボタンクリックイベントは、入力キーストロークを送信します。 Enterを送信すると、ボタンのクリックイベントが発生します。無限ループ。

sendkeysルーチンの実行後にボタンを無効にしてから、再度ボタンを有効にして、無限ループを停止することができます。

あなたがしたいことは、キーストロークを送信するアプリケーションにフォーカスを戻すことです。

+0

私は焦点を設定しようとしたが、私は同じエラーを受けた...多分私は何かが不足している...私はただ欲しいparametrization sendkeyをテストする...これはこの単純なアプリケーションの目的です – Operagust

関連する問題