3

別のアプリケーションのテキストボックスからテキストを取得したいのですが。2番目のアプリケーションのProcessNameは「TestTextBox」、TextBoxの名前は「textBox1」です。

空の文字列を返す私のコード:

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, long wParam, [MarshalAs(UnmanagedType.LPStr)] StringBuilder lParam);

Process[] processes = Process.GetProcessesByName("TestTextBox");
foreach (Process p in processes)
{
    IntPtr pFoundWindow = p.MainWindowHandle;
    const int WM_GETTEXT = 0x0D;
    StringBuilder sb = new StringBuilder();
    IntPtr retVal = SendMessage(pFoundWindow, WM_GETTEXT, 100, sb);
    MessageBox.Show(sb.ToString());
}
4

4 に答える 4

3

「別のアプリケーション」とは何ですか?それはあなたが書いているものですか?別のマシンで実行できますか?別のドメインでは?別のユーザーアカウントで?ターゲットのアプリケーション、フォーム、またはテキストボックスが変更される可能性はありますか?アプリケーション間で非同期(つまり非ブロッキング)通信が必要ですか?

これらの質問のいずれかに対する答えが「はい」の場合は、.NetRemotingの使用を検討する必要があります。これは.Net2.0から入手できます。

于 2009-12-09T20:46:33.330 に答える
1

投稿したコードでメインフォームのWindowHandleを取得しています。MSDNによると、フォームへのGETTEXTメッセージはそのタイトルを返す必要があります。TextBoxからテキストを取得する場合は、最初の引数としてTextBoxのWindowHandleを渡す必要があります。

于 2009-12-09T12:26:03.220 に答える
1

6月に、子コントロールのハンドルを見つける方法についての議論がありました。おそらくこれは役に立ちます。

于 2009-12-09T12:30:51.073 に答える
0

他の人が言及したようにWindowsAPIを使用することも、 AutoItのようなライブラリを使用してタスクを少し簡単にすることもできます。要件が何であるかわからない。

于 2009-12-10T19:46:07.273 に答える