Visual C#在一天的特定时间模拟F12按键

时间:2019-02-12 21:43:27

标签: c#

我的朋友要我创建一个程序,该程序将在一天的特定时间为他按F12键。

这是一个不寻常的请求,我想知道如何在特定时间获取Visual C#来发送F12请求。也许最好实现自动按F12并将其设置在任务计划程序中的程序?我不知道。

我认为理想的选择是使程序在后台运行并在特定时间按下键。我不知道如何指示Visual C#发送F12键。另外,我不知道该如何设置某些时间才能执行。

有人可以帮我或指出我的资源吗?

2 个答案:

答案 0 :(得分:0)

您可能想使用keybd_event。 这是一个示例代码,说明了如何使用它。

using System;
using System.Threading;
using System.Runtime.InteropServices;

public class Program
{
    [DllImport("user32.dll", SetLastError = true)]
    static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

    public const int KEYEVENTF_EXTENDEDKEY = 0x0001; // key down flag
    public const int KEYEVENTF_KEYUP = 0x0002; // key up flag
    public const int F12 = 123; // F12 key code

    public static void Main()
    {
        const int hour = 4;
        const int min = 15;

        // Get DateTime at which the key is supposed to be pressed
        DateTime nextCertainTime = DateTime.Now.Date.AddHours(hour).AddMinutes(min);

        // If it is already too late for today, add 1 day (set to tomorrow)
        if (nextCertainTime < DateTime.Now)
        {
            nextCertainTime = nextCertainTime.AddDays(1);
        }

        // Calculate the remaining time
        TimeSpan remainingTime = nextCertainTime - DateTime.Now;

        // Wait until "certain time"
        Thread.Sleep((int)remainingTime.TotalMilliseconds);

        keybd_event(F12, 0, KEYEVENTF_EXTENDEDKEY, 0); // press F12 down
        keybd_event(F12, 0, KEYEVENTF_KEYUP, 0); // release F12
    }
}

如果要重复执行此操作,只需将其放入while (true)循环,并在每次迭代中向nextCertainTime添加1天。

最好改用Timer,但设置起来并不容易。

或者,也可以使用SendKeys.Send()代替keybd_event,但是按一个键有点过分。

System.Windows.Forms.SendKeys.Send("{F12}");

如果您决定使用Task Scheduler(如另一个答案所建议),则不妨考虑使用比C#更合适的方法。

也许是AHK脚本,可能像这样简单:

Send {F12}

答案 1 :(得分:0)

您可以检查Windows Input Simulator Library

public static void Main()
{
     InputSimulator.SimulateKeyPress(VirtualKeyCode.SPACE);
}

您只需要做的就是将代码编译成可执行文件,然后将其作为Task添加到 Windows Task Scheduler 中。

或者,您也可以在User32.dll

下使用本机Windows API。
[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

public const int KEYEVENTF_EXTENDEDKEY = 0x0001; // key down flag
public const int KEYEVENTF_KEYUP = 0x0002; // key up flag
public const int F12 = 123; // F12 key code

public static void Main()
{ 
    keybd_event(F12, 0, KEYEVENTF_EXTENDEDKEY, 0); // press F12 down
    keybd_event(F12, 0, KEYEVENTF_KEYUP, 0); // release F12

}

再次使用Windows任务计划程序