C# 使用带capslock的sendkeys会产生不可预测的结果
我想模拟用户输入,以防止屏幕锁定C# 使用带capslock的sendkeys会产生不可预测的结果,c#,sendkeys,C#,Sendkeys,我想模拟用户输入,以防止屏幕锁定 public Form1() { aTimer = new System.Threading.Timer(OnTimedEvent, null, 5000, Timeout.Infinite); } private void OnTimedEvent(Object source) { Stopwatch watch = new Stopwatch(); watch.Start(); if (IdleTimeFinder.GetI
public Form1()
{
aTimer = new System.Threading.Timer(OnTimedEvent, null, 5000, Timeout.Infinite);
}
private void OnTimedEvent(Object source)
{
Stopwatch watch = new Stopwatch();
watch.Start();
if (IdleTimeFinder.GetIdleTime() > 2000)
{
SendKeys.SendWait({CAPSLOCK});
}
aTimer.Change(Math.Max(0, 5000 - watch.ElapsedMilliseconds), Timeout.Infinite);
}
我的问题是有时capslock会开或关,有时它会闪烁。
这不是很容易预测的 我认为多个线程之间可能存在竞态条件,导致结果不一致 防止计算机睡眠的正确方法是使用SetThreadExecutionState函数 你可以很容易地p/调用这个函数,我以前在C#中使用过它 要从C#调用它,您需要使用以下声明:
我认为您可能有多个线程之间的竞争条件,从而导致不一致的结果 防止计算机睡眠的正确方法是使用SetThreadExecutionState函数 你可以很容易地p/调用这个函数,我以前在C#中使用过它 要从C#调用它,您需要使用以下声明:
我认为您可能有多个线程之间的竞争条件,从而导致不一致的结果 防止计算机睡眠的正确方法是使用SetThreadExecutionState函数 你可以很容易地p/调用这个函数,我以前在C#中使用过它 要从C#调用它,您需要使用以下声明:
我认为您可能有多个线程之间的竞争条件,从而导致不一致的结果 防止计算机睡眠的正确方法是使用SetThreadExecutionState函数 你可以很容易地p/调用这个函数,我以前在C#中使用过它 要从C#调用它,您需要使用以下声明:
研究媒体播放器如何防止屏幕保护程序、屏幕锁定或系统进入睡眠状态可能是值得的。我想一定有一些API可以做到这一点
SendKeys
似乎有些粗糙。我认为我的帖子很清晰简单。我包含了代码,非常直截了当。我不明白为什么a-1是应得的@stakx感谢下面的解决方案似乎就是我正在寻找的。研究媒体播放器如何防止屏幕保护程序、屏幕锁定或系统进入睡眠状态可能是值得的。我想一定有一些API可以做到这一点SendKeys
似乎有些粗糙。我认为我的帖子很清晰简单。我包含了代码,非常直截了当。我不明白为什么a-1是应得的@stakx感谢下面的解决方案似乎就是我正在寻找的。研究媒体播放器如何防止屏幕保护程序、屏幕锁定或系统进入睡眠状态可能是值得的。我想一定有一些API可以做到这一点SendKeys
似乎有些粗糙。我认为我的帖子很清晰简单。我包含了代码,非常直截了当。我不明白为什么a-1是应得的@stakx感谢下面的解决方案似乎就是我正在寻找的。研究媒体播放器如何防止屏幕保护程序、屏幕锁定或系统进入睡眠状态可能是值得的。我想一定有一些API可以做到这一点SendKeys
似乎有些粗糙。我认为我的帖子很清晰简单。我包含了代码,非常直截了当。我不明白为什么a-1是应得的@stakx谢谢下面的解决方案似乎就是我想要的。太简单了。非常感谢。这么简单。非常感谢。这么简单。非常感谢。这么简单。非常感谢。
[DllImport("kernel32.dll", CharSet = CharSet.Auto,SetLastError = true)]
static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
[FlagsAttribute]
public enum EXECUTION_STATE :uint
{
ES_AWAYMODE_REQUIRED = 0x00000040,
ES_CONTINUOUS = 0x80000000,
ES_DISPLAY_REQUIRED = 0x00000002,
ES_SYSTEM_REQUIRED = 0x00000001
// Legacy flag, should not be used.
// ES_USER_PRESENT = 0x00000004
}