Voici mon code pour une fonction CLICKMOUSE ():
[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 long MOUSEEVENTF_LEFTDOWN = 0x02; private const long MOUSEEVENTF_LEFTUP = 0x04; private const long MOUSEEVENTF_RIGHTDOWN = 0x08; private const long MOUSEEVENTF_RIGHTUP = 0x10; private void ClickMouse() { long X = Cursor.Position.X; long Y = Cursor.Position.Y; mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0); }
5 Réponses :
J'ai trouvé cette déclaration
On dirait que votre déclaration de Dllimport est fausse. En particulier, l'utilisation de INT64 (LIPS), au lieu de UINT32.
Voici quelques détails de la référence de Pinvoke:
http://www.pinvoke.net/default.aspx/user32.mouse_event p>
@SCTOTTTT Je jongle avec un VB à C # .NET a mis à niveau une tierce partie .dll. Sur la base de son document, tous les paramètres sont un type de long VB6 dans le programme VB d'origine. .NET Upgrader les a converties vers INT code>. Le problème évident était, il y a un mot de passe qui devrait être de 8 chiffres et qui dépasse la capacité de type INT32. Nous avons donc changé jusqu'à C #. Mais le problème est que je reçois la même erreur au-dessus de l'utilisation d'une fonction particulière qui tente d'accéder / modifier une mémoire. Devrions-nous toujours utiliser
uint code>?
Une note de la documentation: "Le MDA de Pinvokestackbimbalance n'est implémenté que pour des plates-formes X86 32 bits".
J'utilisais RealgetwindowClass à l'aide du format suivant.
[DllImport("User32", CallingConvention=CallingConvention.StdCall)]
Les fonctions de l'API Win32 ne sont jamais CDECL CODE>; Toujours utiliser
stdcall code>, qui correspond à la valeur par défaut.
J'ai utilisé appelantconvention = appelingconvention.cdecl. L'erreur s'est éloignée :). Merci
J'ai changé "CDECL" à "stdcall", mais cela n'a pas fonctionné.
Comme Scott Weinstein mentionné, nous devrions utiliser int Type. P>
[DllImport("user32.dll")] static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo); [Flags] public enum MouseEventFlags { LEFTDOWN = 0x00000002, LEFTUP = 0x00000004, MIDDLEDOWN = 0x00000020, MIDDLEUP = 0x00000040, MOVE = 0x00000001, ABSOLUTE = 0x00008000, RIGHTDOWN = 0x00000008, RIGHTUP = 0x00000010 } public static void LeftClick(int x, int y) { Cursor.Position = new System.Drawing.Point(x, y); mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0); mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0); }
Pour corriger l'erreur d'identification d'une courte -belle: P>
Appuyez sur: Ctrl kbd> + alt kbd> + e kbd> p>
sous "Assistants de débogage géré" Décochez la case Pinvokestackimbalance P>
Éloignez-vous des déclarations VB6, elles ne sont pas correctes pour le code .NET.