SendMessageでマウスのクリックを送信したいが、それが機能していない、私のコードに何が間違っていますか?
Intウィンドウは0ではありませんが、それでも動作しません。SendMessageでマウスのクリックを送信したいが、それは機能していない、私のコードに間違っている?
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
private const uint WM_RBUTTONDOWN = 0x0204;
private const uint WM_RBUTTONUP = 0x0205;
private int MAKELPARAM(int p, int p_2)
{
return ((p_2 << 16) | (p & 0xFFFF));
}
public void ClickOnPoint(System.Drawing.Point p)
{
int window = FindWindow(null, "Untitled - Notepad");
//System.Windows.Forms.MessageBox.Show(window + "\n");
SendMessage(window, WM_RBUTTONDOWN, 0, MAKELPARAM(500,500));
SendMessage(window, WM_RBUTTONUP, 0, MAKELPARAM(500, 500));
}
どのように動作しているかどうかを検出しますか? (500、500)にメモ帳ウィンドウがあり、そのコンテキストメニューを表示すると思いますか?座標は、絶対スクリーン座標ではなく、ウィンドウのクライアント座標に関連していることに注意してください。 Windows Spyのようなツールを使って、メッセージが受信されたかどうかを調べることができます。また、[マルチモニタ警告](https://msdn.microsoft.com/de-de/library/windows/desktop/ms646242(v = vs.85).aspx)を検討してください。 – dlatikay
(500,500)のメモ帳(全画面)のチェックウィンドウはテキストエリアです。 私のコードでは、menubox(元に戻す、カット、コピー、貼り付け、削除など)を表示する必要がありますが、表示されません。 –
は 'SedMessage'の返り値です(メッセージの配信成功を意味します)?ゼロでない場合は、 'GetLastError'を呼び出します。 [この回答](https://stackoverflow.com/a/3721053/1132334)は、wParam値が0ではなくMK_RBUTTONであることを示唆しています。 – dlatikay