サードパーティのアプリケーションでキープレスをシミュレートする必要があります。電卓アプリケーションに "8" を送信する必要がある C# アプリケーションがあるとします。.Net の SendKeys または win32 api の keybd_event を使用することはできません。どちらもウィンドウを一番上にアクティブにする必要があるためです。これは私の状況では当てはまりません。
そのため、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 でアクセスしようとしましたが、うまくいきませんでした)。エラーや例外はありませんが、電卓では何もしません。
メモ帳でもまったく同じことを試しましたが、何も変わりませんでした。