この問題はTelerik Testing Frameworkで私に届きます。
Telerik Testing Framework SendInputメソッドを使用してマウスクリックをシミュレートしようとしましたが、アプリケーションと対話してもマウスクリックは発生しません。フードtelerikコードの下
C#:管理されていないメソッドSendInputは構造体の異なる表現では機能しません
は
[StructLayout(LayoutKind.Explicit)]
public struct Input
{
[FieldOffset(0)]
public int type;
[FieldOffset(4)]
public MOUSEINPUT mi;
}
[StructLayout(LayoutKind.Sequential)]
public struct MOUSEINPUT
{
public int dx;
public int dy;
public uint mouseData;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
public static void MouseClick()
{
var leftDown = new Input();
leftDown.type = 0;
leftDown.mi.dwFlags = 2;
SendInput(1, ref leftDown, Marshal.SizeOf(leftDown));
var leftUp = new Input();
leftUp.type = 0;
leftUp.mi.dwFlags = 4;
SendInput(1, ref leftUp, Marshal.SizeOf(leftUp));
}
[DllImport("user32.dll", SetLastError = true)]
static extern uint SendInput(uint nInputs, ref Input pInputs, int cbSize);
のように見えます。しかしから構造がLayoutKind.Explicit 入力の変化は LayoutKind.Sequentialにすべては、たとえば、正常に動作している場合:
[StructLayout(LayoutKind.Sequential)]
public struct Input
{
public int type;
public MOUSEINPUT mi;
}
私の意見では、両方のバリアントはメモリ内で同じであるため、動作する必要があります。
何か考えてくださいとLayoutKind.Explicitは動作しません。