You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python编写的Minecraft AFK挂机脚本仅在目标程序生效

解决方案

要让你的AFK脚本仅针对Minecraft窗口运行、不干扰其他程序,核心是避免全局模拟输入,转而仅在Minecraft窗口激活时执行操作,或直接向Minecraft窗口发送输入事件。以下是两种可行实现方式:

方法一:仅当Minecraft窗口激活时执行点击

这种方式会在你切换到其他窗口(比如YouTube)时自动暂停脚本,回到Minecraft窗口后恢复运行。

步骤1:安装依赖

需要额外安装窗口管理相关库:

pip install pygetwindow pyautogui keyboard pywin32

步骤2:修改代码

import pyautogui as ptg
import keyboard as key
import pygetwindow as gw
import time

isclicking = False
# 替换为你的Minecraft窗口标题,可通过任务管理器查看具体标题
MINECRAFT_WINDOW_TITLE = "Minecraft"

def check_clicking():
    global isclicking
    isclicking = not isclicking

key.add_hotkey('F10', check_clicking)

while True:
    if isclicking:
        try:
            # 获取Minecraft窗口对象
            mc_window = gw.getWindowsWithTitle(MINECRAFT_WINDOW_TITLE)[0]
            # 仅当窗口激活时执行点击
            if mc_window.isActive:
                ptg.doubleClick()
                # 控制点击频率,降低CPU占用
                time.sleep(0.1)
            else:
                time.sleep(0.5)
        except IndexError:
            # 未找到Minecraft窗口时暂停循环
            time.sleep(1)
    else:
        time.sleep(0.5)

方法二:直接向Minecraft窗口发送点击事件(支持最小化窗口)

如果希望Minecraft窗口最小化后脚本仍能运行,需要直接向窗口发送系统级鼠标事件,不过这依赖Minecraft本身支持后台接收输入(部分版本需在游戏设置中开启后台运行)。

修改后的代码

import keyboard as key
import win32gui
import win32api
import win32con
import time

isclicking = False
MINECRAFT_WINDOW_TITLE = "Minecraft"

def check_clicking():
    global isclicking
    isclicking = not isclicking

key.add_hotkey('F10', check_clicking)

def get_minecraft_window_handle():
    # 查找Minecraft窗口的系统句柄
    return win32gui.FindWindow(None, MINECRAFT_WINDOW_TITLE)

def send_double_click_to_window(hwnd):
    # 向指定窗口发送双击事件
    win32api.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, 0)
    time.sleep(0.05)
    win32api.SendMessage(hwnd, win32con.WM_LBUTTONUP, 0, 0)
    time.sleep(0.05)
    win32api.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, 0)
    time.sleep(0.05)
    win32api.SendMessage(hwnd, win32con.WM_LBUTTONUP, 0, 0)

while True:
    if isclicking:
        hwnd = get_minecraft_window_handle()
        if hwnd != 0:
            send_double_click_to_window(hwnd)
            time.sleep(0.1)
        else:
            time.sleep(1)
    else:
        time.sleep(0.5)

注意事项

  • 窗口标题适配:请根据你的Minecraft实际窗口标题修改MINECRAFT_WINDOW_TITLE,比如带有版本号的"Minecraft 1.20.1"。
  • 后台运行兼容性:部分Minecraft版本在窗口最小化后会暂停游戏进程,此时脚本即使发送事件也无法生效,需在游戏设置中确认是否允许后台运行。
  • CPU占用优化:必须添加time.sleep()控制循环频率,避免脚本持续占用过高CPU资源。

内容的提问来源于stack exchange,提问作者Hundleazz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:33:36