2017-09-19 5 views
1

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)); 
    } 
+0

どのように動作しているかどうかを検出しますか? (500、500)にメモ帳ウィンドウがあり、そのコンテキストメニューを表示すると思いますか?座標は、絶対スクリーン座標ではなく、ウィンドウのクライアント座標に関連していることに注意してください。 Windows Spyのようなツールを使って、メッセージが受信されたかどうかを調べることができます。また、[マルチモニタ警告](https://msdn.microsoft.com/de-de/library/windows/desktop/ms646242(v = vs.85).aspx)を検討してください。 – dlatikay

+0

(500,500)のメモ帳(全画面)のチェックウィンドウはテキストエリアです。 私のコードでは、menubox(元に戻す、カット、コピー、貼り付け、削除など)を表示する必要がありますが、表示されません。 –

+0

は 'SedMessage'の返り値です(メッセージの配信成功を意味します)?ゼロでない場合は、 'GetLastError'を呼び出します。 [この回答](https://stackoverflow.com/a/372​​1053/1132334)は、wParam値が0ではなくMK_RBUTTONであることを示唆しています。 – dlatikay

答えて

0

「textarea」は、メモ帳アプリケーションのメインウィンドウの子ウィンドウです。

enter image description here

(スクリーンショットは、スパイを使用してWindows 10上で撮影した++)

私たちは、キャプションと「EDIT」クラスを持っていないという子ウィンドウのウィンドウハンドルを必要とする、とにマウスクリックメッセージを送信その子ウィンドウをコンテキストメニューに表示します。

this answerを使用して、既に取得済みの子ウィンドウハンドルを取得します。

は、唯一の有効なハンドル付きAPI関数を呼び出してください:

if(IsWindow(hWndChild)) 
{ 
    SendMessage(hWndChild, WM_RBUTTONDOWN, MK_RBUTTON, MAKELPARAM(p.X, p.Y)); 
    SendMessage(hWndChild, WM_RBUTTONUP, MK_RBUTTON, MAKELPARAM(p.X, p.Y)); 
} 

警告:これは実装固有のものです。メモ帳が将来のバージョンでこのように構築され続けるかどうかは決して分かりません。しかし、IMOは、すべてのWindowsアプリケーションのうち、おそらく最も変わらないものです。

0

私はこれを試みます。私はスパイを使っ++私はSendMessage関数 の引数に赤い円からハンドルを使用して1からメモ帳の編集エリアのハンドル(赤丸)でエディタ領域(赤い長方形) enter image description here

  • を見つける

    1. enter image description here

    正しく理解していますか? 私はボタンをクリックした後..私のメモ帳は何も更新していません。

    ...私のためのこの作品enter image description here

  • 関連する問題