2011-01-26 9 views
3

ここに状況があります。私の仕事では、既存のプログラムを使用して、バーコードをレコードセットにスキャンすることができます。問題は、このレコードセットを作成するために、各アイテムを個別にスキャンする必要があることです。追加ボタンをクリックしてテキストボックスを開き、バーコードをスキャンします(または入力することができます)私のプログラムから既存のプログラムへテキストを送信するテキストボックス

これを回避するには、C#でバーコードのリストを作成するプログラムを作成しました私はバーコードをコピーして既存のプログラムのテキストボックスに貼り付けるだけの簡単なコピーと貼り付けタイプのセットアップを設定し、次のバーコードの準備ができるようにリターンチャーを送る方法を探していました。それは、単にリストを通過するまで、一度に1つずつバーコードを送信するだけです。

私はC#プログラムを制御していますが、作業プログラムは私自身では作成されていないため、コードやそのapisにアクセスすることはできません。誰かがこれのために働くかもしれない解決策を提案できますか?私はSendMessageと呼ばれるものを見つけましたが、プロセスを最初に検索する必要があるため、どのように動作するかは完全にはわかりません。

+2

ウサギの穴へようこそ。 p/invokeを引き上げ、しばらく滞在してください。 – Will

答えて

2

http://inputsimulator.codeplex.com/を使用して同様の問題を解決しました。

  1. でバーコード
  2. 押して入力画面に
  3. 入力開き、あなたの重要な他のソフトウェアを使用して、ファイルのコンテンツを読む: それは単にあなたができるように、キー押下を自動化することができますバーコード
  4. 押しリターンが

ノーAPIを使ってプログラムのためにこれを行っている、そしてそれは、手動入力を避ける方法として素晴らしい作品。しかし、少し醜いですね!

+1

これは素晴らしいプロジェクトです。しかし、アクティブなウィンドウにキーを送信するだけです。特定のウィンドウにキーを送信する呼び出しをラップしますか? – Will

+0

@ウィル、いいえ、申し訳ありませんが、特定のウィンドウに送信しません。 – Bebben

0

.NET 3+の一部であるUI Automationフレームワークを利用できます。

次に、UISpyなどのツールを使用して、問題のテキストフィールドに関連する必要な情報を抽出します。これは、C#アプリケーションとUIオートメーションフレームワーク内でラッチすることができます。

例はMSDN Magazine articleで存在します。

+0

これはテキストを送信するために機能します。 UIオートメーションを使用してキー押しを送信する方法はありますか?私は周りを探索しましたが、あまり成功しませんでした。または、私はkeypressまたはsendmessageを使用する必要がありますか?その機能を実行するボタンがないので、私はEnter for Keypressをシミュレートする必要があります。ありがとう – Chris

+0

@Chrisフレームワークがアクセスするためには、ビジュアルツリー内に存在する必要があるため、UIオートメーションを使用するには公開されたUI要素が必要です。ボタンがない場合は、テキストボックス内でフォーカスが失われたときにコミットされている可能性があります。それがうまくいくかどうかは確かではありませんが、テキストの後にSetValue内に/ r/nを置こうとしましたか? SendKeys.Send( "{ENTER}")を呼び出すこともできます。あなたのSetValueの後にテキスト。 –

1

SendMessageを使用している場合は、spy ++を使用してテキストボックスのクラスと名前を検索できます。これにより、テキストボックスのハンドルを取得できます。私はsettextのAPIコールを見たことは確かですが、現時点ではそれを見つけることができません。ただし、メッセージWM_KEYDOWN、WM_KEYDOWNを使用してデータ入力をシミュレートできます。そのように使用

http://msdn.microsoft.com/en-us/library/ff468861%28v=vs.85%29.aspx

[DllImport("user32.dll")] 
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 

private const int WM_KEYDOWN = 0x0100; 
private const int WM_KEYUP = 0x0101; 

SendMessage(textboxHandle, WM_KEYDOWN, KeyCode, null); 
SendMessage(textboxHandle, WM_KEYUP, KeyCode, null); 

キーコードのリスト。 http://msdn.microsoft.com/en-us/library/dd375731%28v=vs.85%29.aspx

+1

SendMessage(textboxHandle、WM_SETTEXT、0、text) – stefan

+0

それは、歓声=です) – Rob

関連する問題