Я не понимаю, что означает эта ошибка при работе с виртуальными щелчками мыши - PullRequest
1 голос
/ 14 января 2012

Я пытаюсь иметь возможность щелкнуть мышью по текущей позиции мыши.При использовании кода с этого сайта .

Я получаю сообщение об ошибке:

При вызове функции PInvoke 'Program! Program.Program :: mouse_event' разбалансирован стек.Это вероятно потому, что управляемая подпись PInvoke не соответствует неуправляемой целевой подписи.Убедитесь, что соглашение о вызовах и параметры подписи PInvoke соответствуют целевой неуправляемой подписи. at line: mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);.

Я не понимаюпроблема так в чем причина?Как я могу это исправить?

Мой код:

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);

private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;

public void DoMouseClick()
{
    //Call the imported function with the cursor's current position
    int X = Cursor.Position.X;
    int Y = Cursor.Position.Y;
    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}

private void tmrClickInterval_Tick(object sender, EventArgs e)
{
    DoMouseClick();
}

1 Ответ

2 голосов
/ 14 января 2012

Ваша подпись DllImport недействительна.

Тип dwFlags, dx, dy и dwData задокументирован как DWORD, что является 32-разрядным целым числом без знака. В C # long представляет 64-разрядное целое число со знаком. Поэтому вы должны использовать uint, представляющее 32-разрядное целое число без знака.

Последний параметр dwExtraInfo имеет тип ULONG_PTR (указатель на 32-разрядное целое число без знака), что соответствует UIntPtr в C #.

Попробуйте это:

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, UIntPtr dwExtraInfo);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...