首页 新闻 会员 周边

请教鼠标键盘模拟动作在终端服务关闭后失效问题

0
悬赏园豆:60 [已关闭问题] 关闭于 2009-12-17 08:44

用C#写的鼠标模块动作,主要用了以下API
SetCursorPos
mouse_event

与C#自带的SendKeys方法

在本地执行一切正常,放在在终端服务(3389)也执行也正常。

可是当关闭终端服务(不是注销,会话还保持着的)

结果发现,程序能够运行(我写成定时执行),但实际上鼠标或键盘模拟没有运行。

我怀疑是否关闭终端时,由于终端服务认为不用反馈动作给用户,所以没有执行。

这个问题较急,先谢谢大家了 !

问题补充: 这里假设我要移动鼠标到桌面一文本文件(109,253),单击文件并按回车(打开文件), 然后输入文本OK. 程序无论在本机或者在终端服务上运行都能正常。 可如果运行后,关闭了终端,或者最小化终端(即鼠标失去了焦点)则会发现下面的代码虽然有执行,但并没有生效。 程序如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Diagnostics; using System.Threading; namespace test { public partial class Form1 : Form { #region API [DllImport("user32.dll")] protected static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo); [Flags] protected enum MouseEventFlag : uint { Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008, RightUp = 0x0010, MiddleDown = 0x0020, MiddleUp = 0x0040, XDown = 0x0080, XUp = 0x0100, Wheel = 0x0800, VirtualDesk = 0x4000, Absolute = 0x8000 } [DllImport("user32.dll")] private static extern bool SetCursorPos(int X, int Y); #endregion public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Thread.Sleep(5000); //有足够时间关闭终端窗口 SetCursorPos(109, 253); //直接移到目的地 Thread.Sleep(1000); mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero); mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero); Thread.Sleep(1000); SendKeys.SendWait("{ENTER}"); Thread.Sleep(2000); SendKeys.SendWait("OK"); } } }
ufo20020427的主页 ufo20020427 | 初学一级 | 园豆:29
提问于:2009-12-13 17:49
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册