私はこのコードを持っている:私のシミュレートされたマウスクリックが何もしないのはなぜですか?
[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, UIntPtr dwExtraInfo);
[Flags]
public enum MouseEventFlags
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
Absolute = 0x8000
}
public void SimMouseEvent(MouseEventFlags e, int x, int y)
{
mouse_event((uint)e, (uint)x, (uint)y, 0, UIntPtr.Zero);
}
public void SimLeftClick(int x, int y)
{
SimMouseEvent(MouseEventFlags.LeftUp | MouseEventFlags.RightUp, x, y);
}
私のフォームは次のようになります。あなたが "ボタン" をクリックすると、それは、この実行さ
:
private void button3_Click(object sender, RoutedEventArgs e)
{
SimLeftClick(50, 50);
}
と上を私の窓私もこれを持っています:
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("click");
}
ウィンドウをクリックすると、「クリック」したように見えますが、「ボタン」をクリックすると何もしないように見えます。
座標は絶対座標ですか、相対座標ですか?複数のモニターはどうですか?フォーカスされたアプリケーションでのみ動作しますか?
私のアプリを完全に見逃してしまったため、「クリック」ハンドラを動かすか、ランダムなウィンドウをクリックすると、50,50のウィンドウが表示されてしまいます。
私はそれを見ましたが、それを理解できませんでした。私はLeftDown | LeftUpとしてそれを持っていたと思っていますが、それからそのラインに沿ってどこかでそれを混乱させました。今働こうとしているようだ。ありがとう! – mpen
公正であるためには、ドキュメントは恐ろしくひどいです。 'MOUSEEVENTF_MOVE'が必要であるとは言いません。 –
@Ian: "MOUSEEVENTF_MOVE"が設定されていると、マウスが動いた場合、* dx' *と* 'dy' *はその動きに関する情報を保持します。 –