2009-04-30 6 views
3

Je sais comment simuler des événements de souris et de clavier, mais ils agissent comme si l'utilisateur les faisait, donc ils affecteront la fenêtre qui est active. Ce dont j'ai besoin, c'est de simuler une de ces entrées, mais dans une fenêtre qui n'est pas active. Je ne dis pas qu'il est minimisé, imaginez par exemple, vous avez msPaint, et le bloc-notes. Le bloc-notes est devant la peinture. Et vous voulez simuler des clics de souris dans certaines coordonnées de la fenêtre de peinture, mais sans le rendre actif, permettant à l'utilisateur de continuer à utiliser le bloc-notes qui est en face de la peinture.Simuler Déplacer/cliquer/appuyer sur la souris dans une application qui n'est pas active

Est-ce possible? Merci!

J'ai essayé ceci:

  const int WM_KEYDOWN = 0x100; 
     Thread.Sleep(5000); 
     Process x = Process.Start(@"C:\WINDOWS\NOTEPAD.EXE"); 
     PInvokes.PlatformInvokeUSER32.SendMessage(x.MainWindowHandle, WM_KEYDOWN, ((int)Keys.W), 0); 

mais il ne fonctionne pas = (ne fait rien :(

Répondre

2

Vous pouvez essayer le UI automation API Il prend également en charge les applications existantes

..
2

Peut-être essayer la fonction PostMessage à la place:

[DllImport("user32.dll", CharSet=CharSet.Auto)] 
    private static extern int PostMessage(
      int hWnd, int msg, int wParam, IntPtr lParam); 
1

en fonction de la cible ap p, il pourrait y avoir beaucoup de problèmes. Certaines applications se déclenchent sur WM_KEYDOWN ou WM_KEYUP au lieu de WM_CHAR. En outre, la clé est peut-être déjà en panne et est ignorée. Pour les cibles comme les webbrowsers, vous devez obtenir le bon handle de fenêtre. Winspector peut obtenir cela pour vous.

0

Votre code ne fonctionnera pas car SendMessage nécessite que la fenêtre que vous envoyez soit active. Essayez PostMessage.

Questions connexes