windows使用某个软件的时候使其自动化操作

1、下载AutoHotKey, 官网:https://www.autohotkey.com/,下载之后安装,

2、写代码定义热键:

; 定义热键:按下字母 'a' 执行以下操作
a::
{
    ; --- 重要:请先手动获取按钮的坐标!---
    ; 打开你的目标软件,将鼠标悬停在那个按钮上。
    ; 运行 Window Spy (在任务栏AutoHotkey图标上右键可以找到),
    ; 查看并记下鼠标当前的 "屏幕坐标" (例如 X: 500, Y: 300)。
    ; 然后将下面一行中的 X500 和 Y300 替换为你记下的实际坐标。
    MouseMove, 203, 449, 0  ; 参数:X坐标, Y坐标, 移动速度(0为瞬间移动)
    Sleep, 50               ; 短暂等待50毫秒,确保鼠标已到位
    Click                   ; 执行鼠标左键单击
    Return                  ; 脚本结束
}

; --- 第二个热键:按 S 键点击按钮2 ---
b::
{
    ; 请将坐标替换为【按钮2】的实际位置
    MouseMove, 208, 560, 0
    Sleep, 50
    Click
    Return
}

c::
{
    ; 请将坐标替换为【按钮2】的实际位置
    MouseMove, 203, 449, 0
    Sleep, 50
    Click
    Return
}

至于坐标问题,我们只需要打开已经安装好的:window spy for AHKv2这个软件,然后鼠标移动到某个位置之后,就显示了坐标如下图:

image

 第一个X轴,第二个Y轴,分别填入即可,然后将添加的文件后缀改为: .ahk的文件后缀,然后双击运行即可,然后按住你已经设置的热键测试一下就可以了

3、使用.net语言自动化控制按键操作:我这里设置的是每天下午20:10分,执行按键b,所以要使用.net需要安装.net环境,

微软官方下载:https://dotnet.microsoft.com/zh-cn/download/dotnet,然后选择对应的版本下载安装就可以了

4、创建项目并运行:新建一个文件夹(比如D:\AutoKey),在里面新建Program.cs文件,粘贴修复后的代码。

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

namespace AutoKeyScheduler
{
    class Program
    {
        // Windows API:模拟键盘按键
        [DllImport("user32.dll")]
        private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

        // 按键按下/释放标记
        private const uint KEYEVENTF_KEYDOWN = 0x0000;
        private const uint KEYEVENTF_KEYUP = 0x0002;

        // 标记是否已执行当日按键(避免重复触发)
        private static bool bExecuted = false;
        private static bool aExecuted = false;
        private static bool cExecuted = false;
        private static bool dExecuted = false;

        static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;
            Console.WriteLine("===== .NET 定时按键程序(Windows)=====");
            Console.WriteLine("任务计划:");
            Console.WriteLine("1. 每天20:10 执行按键 b");
            Console.WriteLine("2. 每天20:11 执行按键 a");
            Console.WriteLine("3. 每天20:12 执行按键 c");
            Console.WriteLine("4. 每天20:13 执行按键 d");
            Console.WriteLine("======================================");
            Console.WriteLine("按 Ctrl+C 退出程序\n");

            // 主循环:每秒检测一次时间
            while (true)
            {
                var now = DateTime.Now;

                // 20:10 执行按键b
                if (now.Hour == 20 && now.Minute == 10 && !bExecuted)
                {
                    PressKey('b');
                    bExecuted = true;
                }

                // 20:11 执行按键a
                if (now.Hour == 20 && now.Minute == 11 && !aExecuted)
                {
                    PressKey('a');
                    aExecuted = true;
                }

                // 20:12 执行按键c
                if (now.Hour == 20 && now.Minute == 12 && !cExecuted)
                {
                    PressKey('c');
                    cExecuted = true;
                }

                // 20:13 执行按键d
                if (now.Hour == 20 && now.Minute == 13 && !dExecuted)
                {
                    PressKey('d');
                    dExecuted = true;
                }

                // 每天0点重置所有执行标记
                if (now.Hour == 0 && now.Minute == 0 && now.Second == 0)
                {
                    bExecuted = false;
                    aExecuted = false;
                    cExecuted = false;
                    dExecuted = false;
                    Console.WriteLine($"\n【{DateTime.Now:yyyy-MM-dd HH:mm:ss}】重置执行标记,等待次日任务...");
                }

                // 每秒检测一次,降低CPU占用
                Thread.Sleep(1000);
            }
        }

        /// <summary>
        /// 模拟按下并释放指定按键
        /// </summary>
        /// <param name="key">要按下的字符(小写)</param>
        private static void PressKey(char key)
        {
            try
            {
                // 将字符转换为虚拟键码
                byte vkCode = (byte)VkKeyScan(key);
                
                // 按下按键
                keybd_event(vkCode, 0, KEYEVENTF_KEYDOWN, UIntPtr.Zero);
                Thread.Sleep(100); // 短暂延迟,确保系统识别
                // 释放按键
                keybd_event(vkCode, 0, KEYEVENTF_KEYUP, UIntPtr.Zero);

                // 打印执行日志
                Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 成功执行按键:{key}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 执行按键{key}失败:{ex.Message}");
            }
        }

        /// <summary>
        /// 将字符转换为Windows虚拟键码
        /// </summary>
        [DllImport("user32.dll")]
        private static extern short VkKeyScan(char ch);
    }
}

按下Win+R输入cmd打开命令提示符,切换到该文件夹:

cd D:\AutoKey
#初始化控制台项目
dotnet new console -n AutoKeyScheduler
#替换自动生成的Program.cs(已粘贴好代码可跳过),然后编译并运行:
dotnet run
#生成可执行文件并发布
dotnet publish -c Release -r win10-x64 --self-contained true

 

posted @ 2026-03-05 16:04  来碗酒喝  阅读(0)  评论(0)    收藏  举报