web-dev-qa-db-ja.com

c#別のウィンドウ/プロセスへのキーボードコマンドの送信

データ行を取得して別のウィンドウ/プロセスに渡すプログラムを記述しようとしています。

これは私がこれまで持っていたコードですが、キーボードコマンドをOutlookプロセスに送信する方法を理解することができませんでした。

Tabコマンド/キーとEnterコマンド/キーを使用できるようにしたいと思います。

これは私がこれまでに試したことです

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Windows.Forms;

namespace Config
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            System.Threading.Thread.Sleep(30);//300000
            TextReader tr = new StreamReader("config.txt");
            Clipboard.SetText(tr.ReadLine());
            tr.Close();

            var proc = Process.GetProcessesByName("Outlook").FirstOrDefault();
            if (proc != null && proc.MainWindowHandle != IntPtr.Zero)
            {
                SetForegroundWindow(proc.MainWindowHandle);
                //SendKeys.Send("{ENTER}");
                //   Clipboard.GetText();
            }
        }

        [DllImport("user32")]
        private static extern bool SetForegroundWindow(IntPtr hwnd);
    }
}
15
monkeylumps
[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);

public void Start()
{
    IntPtr zero = IntPtr.Zero;
    for (int i = 0; (i < 60) && (zero == IntPtr.Zero); i++)
    {
        Thread.Sleep(500);
        zero = FindWindow(null, "YourWindowName");
    }
    if (zero != IntPtr.Zero)
    {
        SetForegroundWindow(zero);
        SendKeys.SendWait("{TAB}");
        SendKeys.SendWait("{TAB}");
        SendKeys.SendWait("{ENTER}");
        SendKeys.Flush();
    }
}

このようにしてみてください。

10
Elastep

SendMessageはあなたが探しているものです。多分あなたの質問はすでにここで解決されました: C#/ Win32でメモ帳にテキストを送信する方法?

6
arminb

キーストロークをバックグラウンドウィンドウに送信するプログラムをいくつか作成しましたが、通常はPostMessage/SendMessageを実装しました。私はすべての調査結果を文書化しました ここ

ただし、基本的には低レベルのc呼び出しを使用して、メッセージをWindowsメッセージキューに入れ、アプリケーションがキーを押すことをピックアップできるようにします。

PostMessage

SendMessage

ご不明な点がありましたらお知らせください。私のライブラリはC#で記述されており、共有させていただきます。この方法では、バックグラウンドウィンドウでのマウスの使用も可能です。

すべてのコードがGitHubにチェックインされました: https://github.com/EasyAsABC123/Keyboard

6
abc123

Outlookに送信するwhenおよびwhatキーボードコマンドを知っていることを考えるとプロセス、 SendMessage Windows API関数を使用する必要があります。

ただ サンプル

1
Tigran