0 votes

Transmettre des événements de souris à une autre fenêtre, C# sous Win 7

Y a-t-il un moyen d'envoyer des événements de souris à une autre fenêtre dans Windows 7 ?
J'avais l'habitude de faire ceci :
[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);

Mais cela ne semble plus fonctionner sous Win7.
Des idées ?

Merci.

5voto

Kate Gregory Points 13451

Comment ça ne fonctionne pas?

Une chose qui pourrait être pertinente (c'est difficile car vous avez donné si peu de détails) est que les applications non élevées (sous UAC) ne sont pas autorisées à communiquer avec des applications élevées. Donc si une application est élevée et une autre non, vous diriez que cela "ne semble pas fonctionner". Mais vous ne pouvez pas résoudre cela en changeant l'API que vous utilisez.

2voto

Chris Taylor Points 25865

La raison la plus probable pour laquelle cela ne fonctionne pas pour vous est le fait que la signature P/Invoke que vous utilisez est incorrecte. Vous avez spécifié les arguments comme long qui dans .NET représente un entier sur 64 bits. La déclaration de l'API Win32 a les arguments définis comme DWORD, ce qui représente des entiers sur 32 bits, cela entraînera un déséquilibre de la pile. Modifiez votre signature comme suit et vous devriez avoir plus de chance.

[DllImport("user32.dll")]
public static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 cButtons, Int32 dwExtraInfo);

De plus, vous devriez prendre en compte le point de Kate et cela pourrait également avoir une incidence sur vos résultats une fois que la signature est corrigée.

-1voto

Rei Miyasaka Points 3359

SendMessage dans user32.dll: ferait l'affaire.

Vous aurez également probablement besoin de FindWindow et des constantes WM.

pinvoke.net est bon pour ce genre de choses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X