Je veux yo utiliser SendMessage
ou PostMessage
appuyer sur un bouton dans une autre applicationCliquez sur un bouton dans une autre application
i ont un exemple de code pour le faire en obtenant la poignée de fenêtre, mais il ne fonctionne pas
J'ai aussi utilisé "WinDowse" pour obtenir les informations requises. voici le code
private const uint BM_CLICK = 0x00F5;
private const uint WM_LBUTTONDOWN = 0x0201;
private const uint WM_LBUTTONUP = 0x0202;
private void PushOKButton(IntPtr ptrWindow)
{
WindowHandle = FindWindow(null, "Form1");
if (ptrWindow == IntPtr.Zero)
return;
IntPtr ptrOKButton = FindWindowEx(ptrWindow, IntPtr.Zero, "Button", "&Yes");
if (ptrOKButton == IntPtr.Zero)
return;
SendMessage(ptrOKButton, WM_LBUTTONDOWN, 0, 0);
SendMessage(ptrOKButton, WM_LBUTTONUP, 0, 0);
SendMessage(ptrOKButton, BM_CLICK, 0, 0);
}
Y at-il une Suloution Compelete dans C#?
* "Vous avez la bonne idée générale." * - Eh bien, non. L'idée est aussi mauvaise que possible. Les messages sont simplement la partie observable du traitement d'entrée. Si vous rejouez juste cette partie, vous finirez avec un état incohérent. La vraie réponse est [UI Automation] (https://msdn.microsoft.com/en-us/library/ms747327.aspx). – IInspectable
Le framework .Net UI Automation est limité, et provoque une variété d'artefacts - comme le lecteur Adobe demandant le mode d'accessibilité si vous regardez même de côté les fenêtres qu'il affiche. Nous avons bloqué de nombreuses applications Microsoft essayant d'utiliser UI Automation en raison de bogues dans les applications cibles où la création de contrôle personnalisé n'a pas couvert correctement le support d'automatisation. –
UI Automation est exposée via des objets COM, facilement consommables depuis .NET, dans le cas où la prise en charge de la bibliothèque pré-compilée n'est pas suffisante. Votre commentaire indique que vous avez répondu à une question différente: * "En supposant que UI Automation ne fonctionne pas pour nous, quelles sont les alternatives?" * L'OP n'a jamais prétendu que UI Automation ne fonctionnerait pas pour eux. . Et si vous avez besoin de fausses entrées, vous devez vraiment le faire correctement. Envoyer des messages ne fera pas (voir [Relecture d'entrée n'est pas la même que le retraitement] (https://blogs.msdn.microsoft.com/oldnewthing/20121206-00/?p=5903)). – IInspectable