私はC#、フレームワーク4(32ビット)のWindowsフォームアプリケーションに取り組んでいます。
マウスの座標を保持するリストがあり、それらをキャプチャできます。ここまでは順調ですね。
しかし、ある時点で、それらの座標に移動して、マウスを左クリックしたいと思います。
これが今の様子です:
for (int i = 0; i < coordsX.Count; i++)
{
Cursor.Position = new Point(coordsX[i], coordsY[i]);
Application.DoEvents();
Clicking.SendClick();
}
そしてClickingクラス:
class Clicking
{
private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;
private static extern void mouse_event(
UInt32 dwFlags, // motion and click options
UInt32 dx, // horizontal position or change
UInt32 dy, // vertical position or change
UInt32 dwData, // wheel movement
IntPtr dwExtraInfo // application-defined information
);
// public static void SendClick(Point location)
public static void SendClick()
{
// Cursor.Position = location;
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new System.IntPtr());
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new System.IntPtr());
}
}
しかし、私はこのエラーを受け取ります:
Could not load type 'program.Clicking' from Assembly 'program, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'mouse_event' has no implementation (no RVA).
そして、私は本当に問題が何であるかを理解していません...あなたたちは問題が何であるか知っていますか?または私がやろうとしていることをするためのより良い方法を知っていますか?
次の行を含めましたか?
[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData,
UIntPtr dwExtraInfo);
これにより、mouse_event
dllから関数user32
がインポートされます。これは、プログラム内で使用しようとしているものです。現在、プログラムは、DLL内のこのメソッドについて、それがどこから来たのかを指定するまで知りません。
ウェブサイト PInvoke.Net User32 Mouse Event は、この種のことの基本に非常に便利です。
マウスイベントの送信[DllImport(“ user32.dll”)]クリック、ダブルクリック に対する答えは、理解にも大いに役立ちます。
flags
は、mouse_input
関数に送信するコマンドです。この例では、彼がmouse down
とmouse up
の両方を同じ行に送信していることがわかります。 mouse_event
関数はこれらのフラグを分割し、連続して実行するため、これは問題ありません。
また、このメソッドはSendInput
コマンドに置き換えられていることに注意してください。これは、SendInput
とSetMousePos
の良い例です このブログで
私はあなたが次の行を逃していると思います
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]