按键精灵通过列表框添加执行相应任务

如何通过列表框里的内容执行相应的子程序,
如下,双击左边添加了1234到右边
就只运行子程序1234,如果是4231就按4231顺序执行

img

该回答引用chatGPT
按键精灵可以通过列表框添加执行相应任务,例如,可以在“任务列表”窗口中点击“添加”按钮,然后在弹出的“添加任务”窗口中选择“键盘输入”任务,然后设置要输入的文本,最后点击“确定”按钮即可完成添加任务的操作。

该回答内容部分引用GPT,GPT_Pro更好的解决问题
使用按键精灵执行相应任务,可以通过列表框中添加相应任务来实现。
例如,双击左边添加了1234到右边,则按键精灵会按顺序执行子程序1234,如果是4231就会按4231顺序执行。

首先,我们需要在按键精灵上设置好任务内容,如创建一个“任务1”:

F1:: ;定义快捷键F1
    ListBox, list_box, xm, ym, w, h ;定义列表框变量
    list_box := "[[123,456,789],["任务1","任务2","任务3","任务4","任务5","任务6","任务7","任务8","任务9","任务10"]]" ;列表框内容
    MsgBox, %list_box% ;显示列表框内容,供调试使用
    InputBox, list_box_input, 请输入子程序编号, 请输入子程序编号, , %list_box% ;让用户输入子程序编号
    SplitPath, list_box_input,,list_box_input_list  ;将用户输入的子程序编号字符串分割为列表
    Loop, Parse, list_box_input_list  ;循环执行用户输入的子程序
    {
        Run %A_LoopField% ;执行子程序
    }
    Return  ;返回

其中,ListBox命令用于定义一个名为list_box的列表框,并将列表框内容设置为123456、789任务1、任务2、任务3、任务4、任务5、任务6、任务7、任务8、任务9和任务10。然后使用InputBox命令来让用户输入子程序的代号。SplitPath命令可将用户输入的代号字符串分割为列表(例如:将输入的“123456、789”字符串分割为“123”、“456”和“789”三个单独的字符串)。最后使用Loop命令来循环执行用户输入的子程序。

因此,当用户在按键精灵上双击左边添加了1234到右边时,按键精灵会按顺序执行子程序1234;如输入4231就会按4231顺序执行。
如果回答有帮助,望采纳。

将要执行的子程序写成独立的函数,在列表框中添加要执行的子程序的名称,在双击列表框时,获取选中的子程序名称。以下是一个示例代码:

import tkinter as tk

def sub1():
    print("执行子程序 1")

def sub2():
    print("执行子程序 2")

def sub3():
    print("执行子程序 3")

def sub4():
    print("执行子程序 4")

def run_selected_subprogram():
    selected_program = listbox.get(listbox.curselection())
    eval(selected_program + "()")

# 创建主窗口
root = tk.Tk()

# 创建列表框并添加子程序名称
listbox = tk.Listbox(root)
listbox.insert(0, "sub1")
listbox.insert(1, "sub2")
listbox.insert(2, "sub3")
listbox.insert(3, "sub4")

# 绑定双击事件到列表框
listbox.bind("<Double-Button-1>", lambda event: run_selected_subprogram())

# 显示列表框
listbox.pack()

# 运行窗口
root.mainloop()

参考GPT和自己的思路,您可以通过将列表框的每个项与相应的子程序进行关联,并在用户选择某个项时运行与该项关联的子程序。以下是一些可能有用的示例代码:

假设您有一个名为 ListBox1 的列表框,并且您有四个子程序,分别为 Sub1、Sub2、Sub3 和 Sub4。

将列表框的每个项与相应的子程序进行关联。您可以在 ListBox1 的 AddItem 事件中添加以下代码:

Private Sub ListBox1_AddItem(ByVal ItemText As String)
    Select Case ItemText
        Case "1"
            ListBox1.List(ListBox1.ListCount - 1, 1) = "Sub1"
        Case "2"
            ListBox1.List(ListBox1.ListCount - 1, 1) = "Sub2"
        Case "3"
            ListBox1.List(ListBox1.ListCount - 1, 1) = "Sub3"
        Case "4"
            ListBox1.List(ListBox1.ListCount - 1, 1) = "Sub4"
    End Select
End Sub

该代码将每个项的第二列与相应的子程序名称关联起来。例如,当用户将项 "1" 添加到列表框中时,代码将将第一个子程序的名称 "Sub1" 分配给该项的第二列。

运行与所选项相关联的子程序。您可以在列表框的 DblClick 事件中添加以下代码:

Private Sub ListBox1_DblClick()
    Dim i As Integer
    For i = 0 To ListBox1.ListCount - 1
        Select Case ListBox1.List(i, 0)
            Case "1"
                Call Sub1
            Case "2"
                Call Sub2
            Case "3"
                Call Sub3
            Case "4"
                Call Sub4
        End Select
    Next i
End Sub

该代码将循环遍历列表框中的每个项,并根据该项的第一列(即选项的值)运行相应的子程序。

如果您希望按照列表框中显示的顺序执行子程序,而不是按照选项值的顺序执行它们,则可以使用以下代码:

Private Sub ListBox1_DblClick()
    Dim i As Integer
    For i = 0 To ListBox1.ListCount - 1
        Select Case ListBox1.List(i, 1)
            Case "Sub1"
                Call Sub1
            Case "Sub2"
                Call Sub2
            Case "Sub3"
                Call Sub3
            Case "Sub4"
                Call Sub4
        End Select
    Next i
End Sub

该代码将根据列表框中每个项的第二列(即与子程序名称关联的列)执行子程序。由于它按照列表框中的顺序进行循环,因此将按照用户添加项的顺序执行子程序。
如果对您有帮助,请给与采纳,谢谢。

以下答案基于ChatGPT与GISer Liu编写:
你可以使用以下步骤来实现这个功能:

  1. 在按键精灵的列表框中添加需要执行的任务,例如1234、2341、4312等。

  2. 在你的代码中,使用pyautogui.locateOnScreen函数定位到列表框中的“列表项”图标,并使用pyautogui.click函数单击该图标,以展开任务列表。

  3. 使用pyautogui.locateAllOnScreen函数定位到任务列表中的所有任务,并将它们保存到一个列表中。

  4. 根据需要执行的任务序列,遍历该序列,依次执行对应的子程序。你可以使用importlib模块动态加载和执行对应的子程序。例如,如果需要执行任务序列为4231,你可以依次执行子程序“subtask_4”、“subtask_2”、“subtask_3”和“subtask_1”。

下面是一个示例程序,它演示了如何通过按键精灵的列表框执行相应的子程序:

import pyautogui
import importlib

# 定义子程序
def subtask_1():
    print("执行子程序1")

def subtask_2():
    print("执行子程序2")

def subtask_3():
    print("执行子程序3")

def subtask_4():
    print("执行子程序4")

# 执行任务序列
task_sequence = [4, 2, 3, 1]

# 定位任务列表框并单击列表项图标
listbox_icon = pyautogui.locateOnScreen("listbox_icon.png")
if listbox_icon is not None:
    pyautogui.click(listbox_icon)

# 定位任务列表中的所有任务
tasks = []
for task_image in pyautogui.locateAllOnScreen("task_*.png"):
    task_name = task_image.split("_")[1]
    tasks.append(int(task_name))

# 按照任务序列依次执行子程序
for task_number in task_sequence:
    task_name = "subtask_" + str(task_number)
    if task_number in tasks:
        module = importlib.import_module(__name__)
        subtask = getattr(module, task_name)
        subtask()
    else:
        print("未找到任务:", task_name)

在这个示例程序中,我们首先定义了四个子程序,分别对应任务序列中的数字1、2、3和4。然后,我们定义了一个任务序列task_sequence,其中数字的顺序表示需要执行的子程序的顺序。接下来,我们使用pyautogui.locateOnScreen函数定位到按键精灵的列表框中的“列表项”图标,并使用pyautogui.click函数单击该图标,以展开任务列表。然后,我们使用pyautogui.locateAllOnScreen函数定位到任务列表中的所有任务,并将它们保存到一个列表中。最后,我们按照任务序列依次执行对应的子程序。如果任务序列中的某个数字不在任务列表中,程序将打印一条消息表示未找到对应的任务。