Cliquez sur la souris sous Mac OS et détectez dans quelle application OS s'exécute

StackOverflow https://stackoverflow.com/questions/4877295

  •  28-10-2019
  •  | 
  •  

Question

Je souhaite utiliser Mono pour permettre à mon programme C # (actuellement WPF mais le changera en Windows Forms ou Silverlight pour que Mono fonctionne) qui fonctionne actuellement sous Windows pour fonctionner sur un Mac.

J'utilise le code Windows natif pour détecter quand une souris est cliquée, et aussi pour cliquer sur la souris, comme ceci:

[DllImport("user32.dll")]
static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
[DllImport("User32.dll")]
public static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);

Pour que cela fonctionne sur un Mac, je dois d'abord être en mesure de détecter si le programme s'exécute sur un Mac ou sous Windows, puis exécuter le code approprié pour détecter si une souris est cliquée ou pour cliquer sur leSouris.Quelque chose comme:

if (runningInWindows())
{
    // Windows mouse click...
    System.Windows.Forms.Cursor.Position = new System.Drawing.Point(X, Y);
    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

    // Or if I want to detect a mouse click...
    bool mouseClicked = GetAsyncKeyState(System.Windows.Forms.Keys.LButton) != 0;
}
else
{
    // Running on a Mac, so do Mac mouse click...
    // Or detect a mouse click on a Mac...
}

J'ai essentiellement 3 questions:

  1. Comment cliquez-vous sur la souris sur un Mac?(équivalent de mouse_event)
  2. Comment détectez-vous un clic de souris sur un Mac?(équivalent de GetAsyncKeyState)
  3. Comment détectez-vous le système d'exploitation dans lequel votre application s'exécute?
Était-ce utile?

La solution

La détection du système d'exploitation est facile, vous pouvez trouver un code de détection de plate-forme ici .

Les deux autres sont plus difficiles. Vous devriez regarder les API natives d'Apple Carbon ou Cocoa et déterminer comment faire les choses que vous voulez, puis P / Invoke ces API. FWIW, je ne sais pas s'il est réellement possible de contrôler la souris avec une API publique. Certains sites semblent expliquer comment faire certains de ces trucs .

Pour commencer, obtenir la position de la souris semble être possible via HIGetMousePosition (Carbon) ou [NSEvent mouseLocation] (Cocoa). Bien que de nombreuses API Carbon de haut niveau soient obsolètes, elles constituent toujours le cœur de l'API C de bas niveau utilisée par Cocoa. Il pourrait être difficile de comprendre comment lire les événements Carbon et en extraire des informations, OTOH Cocoa signifie interopérer avec Objective-C, ce qui est plus compliqué que P / Invoke - mais MonoMac a des API qui peuvent rendre cela plus facile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top