摆动鼠标
时间:2020-03-05 18:37:39 来源:igfitidea点击:
好的。这是个虚荣的应用程序,但是今天我在工作中遇到一种情况,当时我正在参加一次培训班,并且该机器被设置为每10分钟锁定一次。好吧,如果培训人员对谈论而不是更换幻灯片感到兴奋,则机器将锁定。
我想编写一个小程序,除了任务栏图标外什么都没有,只不过每4分钟将鼠标移动1像素。
我可以使用Delphi(我的语言很强)通过3种方式来做到这一点,但是我正转向Cfor工作,我想知道那里阻力最小的途径。
解决方案
回答
对于C3.5
没有notifyicon,因此我们需要在任务管理器中手动终止此应用程序
using System; using System.Drawing; using System.Windows.Forms; static class Program { static void Main() { Timer timer = new Timer(); // timer.Interval = 4 minutes timer.Interval = (int)(TimeSpan.TicksPerMinute * 4 / TimeSpan.TicksPerMillisecond); timer.Tick += (sender, args) => { Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y + 1); }; timer.Start(); Application.Run(); } }
回答
这样的事情应该起作用(尽管,我们将需要更改时间间隔)。
public Form1() { InitializeComponent(); Timer Every4Minutes = new Timer(); Every4Minutes.Interval = 10; Every4Minutes.Tick += new EventHandler(MoveNow); Every4Minutes.Start(); } void MoveNow(object sender, EventArgs e) { Cursor.Position = new Point(Cursor.Position.X - 1, Cursor.Position.Y - 1); }
回答
执行此操作的"正确"方法是响应WM_SYSCOMMAND消息。在Cthis中,看起来像这样:
protected override void WndProc(ref Message m) { // Abort screensaver and monitor power-down const int WM_SYSCOMMAND = 0x0112; const int SC_MONITOR_POWER = 0xF170; const int SC_SCREENSAVE = 0xF140; int WParam = (m.WParam.ToInt32() & 0xFFF0); if (m.Msg == WM_SYSCOMMAND && (WParam == SC_MONITOR_POWER || WParam == SC_SCREENSAVE)) return; base.WndProc(ref m); }
根据MSDN,如果在Vista或者更高版本上通过策略启用了屏幕保护程序密码,则该密码将无效。大概以编程方式移动鼠标也被忽略了,尽管我还没有对此进行测试。