サードパーティアプリケーションでキー押しをシミュレートする必要があります。たとえば、Calculatorアプリケーションに「8」を送信する必要があるC#アプリケーションがあるとします。 .NetのSendKeysやwin32 APIのkeybd_eventを使うことはできません。なぜなら、私の状況では大文字と小文字が区別されないため、ウィンドウがトップアクティブなものでなければならないからです。SendMessageまたはPostMessageコールの使用方法がわかりません
私はsendMessageとpostMessageの呼び出しを残します。私は最後の3時間でいくつかの結果を得ようとしていますが、今は完全に希望がありません。
私は、次のしている:
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName,string lpWindowName);
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam);
private void button1_Click(object sender, EventArgs e)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSCOMMAND = 0x018;
const int SC_CLOSE = 0x053;
int WindowToFind = FindWindow(null,"Calculator");
int result = SendMessage(WindowToFind, WM_SYSCOMMAND, SC_CLOSE, 0);
Boolean result2 = PostMessage(WindowToFind, WM_SYSCOMMAND, SC_CLOSE, 0);
int result3 = SendMessage(WindowToFind, WM_KEYDOWN,((int)Keys.NumPad7), 0);
Boolean result4 = PostMessage(WindowToFind, WM_KEYDOWN, ((int)Keys.NumPad7), 0);
}
をあなたが見ることができるように、私は電卓と通信するための4つの試みを作ります。 sendMessageとPostMessageの両方を使用してウィンドウを閉じ、キーも送信します。7.何も動作しません。 FindWindowメソッドは、私がアプリケーションのハンドラを取得する原因となります(私は自分自身でプロセスを起動し、process.MainWindowHandlerでアクセスしてみましたが、運はありません)。エラーや例外はありませんが、Calculatorでは何もしません。
私はメモ帳でも全く同じことを試しましたが、何も変わっていません。
Wowです。それは働いた?幸運なことを話してください。私はこれらの2つの特定のwin32メソッドを使用したことはありません。 –
実際には32ビットですが、それでも動作します:) –
何でもいいよ:) –