[英]Send keyboard and mouse events to DirectX application in C#?
我需要将全局击键和鼠标事件发送到另一个应用程序,这恰好是使用DirectX。 (除了窗口本身,没有其他控件/句柄)
例如,我需要按住X键2秒钟,然后释放它...
我需要在坐标x:600和y:350上向下按鼠标右键,将鼠标向下移动100像素,然后释放鼠标右键。
我还需要同时按2个或更多键,例如X和Y,并在2秒后停止X,再在2秒后停止Y。
所以基本上我需要完全控制输入系统...
如果我可以在最大化或后台控制应用程序时也很理想。 (可选地)
对于怀疑者...老师为我们学校制作了DirectX绘图应用程序。 我被要求制作一个可以在其上绘制样本的应用程序,例如火车或花朵之类的东西。我将读取图像并使用输入来设置颜色,然后单击画布上的...
如果您想使用C#库,这会使您的工作更加轻松,请阅读以下链接-
http://www.codeproject.com/Articles/117657/InputManager-library-Track-user-input-and-simulate
除了.Net C#之外,您还可以使用其他语言替代语言(例如Java),在这种语言中,直接x或普通输入没有混淆-
http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html
有一些可能性。 您可以看一下System.Windows.Forms.SendKeys
然后可以从gdi32.dll或user32.dll SetCursorPos()
和mouse_event
调用一些Win32函数,例如SetForegroundWindow()
, LockSetForegroundWindow()
SetCursorPos()
和mouse_event
来执行单击:
这里是我之前使用过的Mouse事件的一个片段。
/**
* Mouse functions
*/
[DllImport("user32.dll", ExactSpelling=true)]
public static extern long mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 cButtons, Int32 dwExtraInfo);
[DllImport("user32.dll", ExactSpelling=true)]
public static extern void SetCursorPos(Int32 x, Int32 y);
public const Int32 MOUSEEVENTF_ABSOLUTE = 0x8000;
public const Int32 MOUSEEVENTF_LEFTDOWN = 0x0002;
public const Int32 MOUSEEVENTF_LEFTUP = 0x0004;
public const Int32 MOUSEEVENTF_MIDDLEDOWN = 0x0020;
public const Int32 MOUSEEVENTF_MIDDLEUP = 0x0040;
public const Int32 MOUSEEVENTF_MOVE = 0x0001;
public const Int32 MOUSEEVENTF_RIGHTDOWN = 0x0008;
public const Int32 MOUSEEVENTF_RIGHTUP = 0x0010;
public static void PerformLeftKlick(Int32 x, Int32 y)
{
SetCursorPos(x, y);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
希望能将您推向正确的方向。 很好的资源是http://pinvoke.net/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.