Exemple #1
0
    def Process(self, btn, idx, split_line):
        # while this looks like validation, it is just a warning
        if btn.symbols[SYM_MOUSE] == tuple():
            print(
                "[" + lib + "] " + btn.coords + "  Line:" + str(idx + 1) +
                "    No 'M_STORE' command has been run, cannot do 'M_RECALL'")
        else:
            print("[" + lib + "] " + btn.coords + "  Line:" + str(idx + 1) +
                  "    Recall mouse position " + str(btn.symbols[SYM_MOUSE]))

            x1, y1 = btn.symbols[SYM_MOUSE]

            delay = None
            if self.Has_param(btn, 1):
                delay = float(self.Get_param(btn, 1)) / 1000.0

            skip = self.Get_param(btn, 1, 1)

            x_C, y_C = ms.get_pos()
            points = ms.line_coords(x_C, y_C, x1, y1)

            for x_M, y_M in points[::skip]:
                if btn.Check_kill():
                    return -1

                ms.set_pos(x_M, y_M)

                if (delay != None) and (delay > 0):
                    if not btn.Safe_sleep(delay):
                        return -1
Exemple #2
0
 def Process(self, btn, idx, split_line):
     # while this looks like validation, it is really just the info. Putting it here is easy
     if btn.symbols[SYM_MOUSE] == tuple():
         print(
             "[" + lib + "] " + btn.coords + "  Line:" + str(idx + 1) +
             "    No 'M_STORE' command has been run, cannot do 'M_RECALL'")
     else:
         print("[" + lib + "] " + btn.coords + "  Line:" + str(idx + 1) +
               "    Recall mouse position " + str(btn.symbols[SYM_MOUSE]))
         ms.set_pos(btn.symbols[SYM_MOUSE][0], btn.symbols[SYM_MOUSE][1])
    def Process(self, btn, idx, split_line):
        hwnd = self.Get_param(
            btn,
            1)  # get the window handle from the passed variable (or constant)

        old_x, old_y = ms.get_pos()  # save the position of the mouse
        self.restore_window(hwnd)  # show the window

        # positioning the mouse on the form while we make it the foreground seems to help
        x, y = win32gui.ClientToScreen(
            hwnd, (10, 10))  # get a position just inside the window
        ms.set_pos(x, y)  # put the mouse on the form
        win32gui.SetForegroundWindow(hwnd)  # Make the window current
        ms.set_pos(old_x, old_y)  # restore the mouse position
Exemple #4
0
    def Process(self, btn, idx, split_line):
        delay = None
        if self.Has_param(btn, 3):
            delay = float(self.Get_param(btn, 3)) / 1000.0

        skip = int(self.Get_param(btn, 4, 1))

        x_C, y_C = ms.get_pos()
        x_N, y_N = x_C + self.Get_param(btn, 1), y_C + self.Get_param(btn, 2)
        points = ms.line_coords(x_C, y_C, x_N, y_N)

        for x_M, y_M in points[::skip]:
            if btn.Check_kill():
                return -1

            ms.set_pos(x_M, y_M)

            if (delay != None) and (delay > 0):
                if not btn.Safe_sleep(delay):
                    return -1
Exemple #5
0
    def Process(self, btn, idx, split_line):
        delay = None  # default value of parameter
        if self.Has_param(
                btn, 3):  # can't use the default param because if we have one
            delay = float(self.Get_param(
                btn, 3)) / 1000.0  # we need to do math on it

        skip = self.Get_param(btn, 4,
                              1)  # skip parameter has a default value of 1

        x_C, y_C = ms.get_pos()  # where are we now?
        points = ms.line_coords(x_C, y_C, self.Get_param(
            btn, 1), self.Get_param(btn,
                                    2))  # how do we get to where we want to be

        for x_M, y_M in points[::skip]:  # For each point we're going to use
            if btn.Check_kill():  # Just make sure we should still be running
                return -1
            ms.set_pos(x_M, y_M)  # set the position
            if (delay != None) and (delay > 0):  # if we have a delay
                if not btn.Safe_sleep(delay):  # delay "safely"
                    return -1
Exemple #6
0
    def Process(self, btn, idx, split_line):
        delay = None
        if self.Has_param(btn, 5):
            delay = float(self.Get_param(btn, 5)) / 1000.0

        skip = self.Get_param(btn, 6, 1)

        x1 = self.Get_param(btn, 1)
        y1 = self.Get_param(btn, 2)
        x2 = self.Get_param(btn, 3)
        y2 = self.Get_param(btn, 4)
        points = ms.line_coords(x1, y1, x2, y2)

        for x_M, y_M in points[::skip]:
            if btn.Check_kill():
                return -1

            ms.set_pos(x_M, y_M)

            if (delay != None) and (delay > 0):
                if not btn.Safe_sleep(delay):
                    return -1
Exemple #7
0
        def main_logic(idx):
            nonlocal m_pos

            if check_kill(x, y, is_async):
                return idx + 1

            line = script_lines[idx]
            if line == "":
                return idx + 1
            if line[0] == "-":
                print("[scripts] " + coords + "    Comment: " + line[1:])
            else:
                split_line = line.split(" ")
                if split_line[0] == "STRING":
                    type_string = " ".join(split_line[1:])
                    print("[scripts] " + coords + "    Type out string " +
                          type_string)
                    kb.write(type_string)
                elif split_line[0] == "DELAY":
                    print("[scripts] " + coords + "    Delay for " +
                          split_line[1] + " seconds")
                    delay = float(split_line[1])
                    if not safe_sleep(delay, x, y, is_async):
                        return -1
                elif split_line[0] == "TAP":
                    key = kb.sp(split_line[1])
                    releasefunc = lambda: kb.release(key)
                    if len(split_line) <= 2:
                        print("[scripts] " + coords + "    Tap key " +
                              split_line[1])
                        kb.tap(key)
                    elif len(split_line) <= 3:
                        print("[scripts] " + coords + "    Tap key " +
                              split_line[1] + " " + split_line[2] + " times")
                        taps = int(split_line[2])
                        for tap in range(taps):
                            if check_kill(x, y, is_async, releasefunc):
                                return idx + 1
                            kb.tap(key)
                    else:
                        print("[scripts] " + coords + "    Tap key " +
                              split_line[1] + " " + split_line[2] +
                              " times for " + str(split_line[3]) +
                              " seconds each")
                        taps = int(split_line[2])
                        delay = float(split_line[3])
                        for tap in range(taps):
                            if check_kill(x, y, is_async, releasefunc):
                                return -1
                            kb.press(key)
                            if not safe_sleep(delay, x, y, is_async,
                                              releasefunc):
                                return -1
                elif split_line[0] == "PRESS":
                    print("[scripts] " + coords + "    Press key " +
                          split_line[1])
                    key = kb.sp(split_line[1])
                    kb.press(key)
                elif split_line[0] == "RELEASE":
                    print("[scripts] " + coords + "    Release key " +
                          split_line[1])
                    key = kb.sp(split_line[1])
                    kb.release(key)
                elif split_line[0] == "WEB":
                    link = split_line[1]
                    if "http" not in link:
                        link = "http://" + link
                    print("[scripts] " + coords + "    Open website " + link +
                          " in default browser")
                    webbrowser.open(link)
                elif split_line[0] == "WEB_NEW":
                    link = split_line[1]
                    if "http" not in link:
                        link = "http://" + link
                    print("[scripts] " + coords + "    Open website " + link +
                          " in default browser, try to make a new window")
                    webbrowser.open_new(link)
                elif split_line[0] == "CODE":
                    args = " ".join(split_line[1:])
                    print("[scripts] " + coords + "    Running code: " + args)
                    try:
                        subprocess.run(args)
                    except Exception as e:
                        print("[scripts] " + coords +
                              "    Error with running code: " + str(e))
                elif split_line[0] == "SOUND":
                    if len(split_line) > 2:
                        print("[scripts] " + coords + "    Play sound file " +
                              split_line[1] + " at volume " +
                              str(split_line[2]))
                        sound.play(split_line[1], float(split_line[2]))
                    else:
                        print("[scripts] " + coords + "    Play sound file " +
                              split_line[1])
                        sound.play(split_line[1])
                elif split_line[0] == "WAIT_UNPRESSED":
                    print("[scripts] " + coords +
                          "    Wait for script key to be unpressed")
                    while lp_events.pressed[x][y]:
                        sleep(DELAY_EXIT_CHECK)
                        if check_kill(x, y, is_async):
                            return idx + 1
                elif split_line[0] == "M_STORE":
                    print("[scripts] " + coords + "    Store mouse position")
                    m_pos = ms.get_pos()
                elif split_line[0] == "M_RECALL":
                    if m_pos == tuple():
                        print(
                            "[scripts] " + coords +
                            "    No 'M_STORE' command has been run, cannot do 'M_RECALL'"
                        )
                    else:
                        print("[scripts] " + coords +
                              "    Recall mouse position " + str(m_pos))
                        ms.set_pos(m_pos[0], m_pos[1])
                elif split_line[0] == "M_RECALL_LINE":
                    x1, y1 = m_pos

                    delay = None
                    if len(split_line) > 1:
                        delay = float(split_line[1]) / 1000.0

                    skip = 1
                    if len(split_line) > 2:
                        skip = int(split_line[2])

                    if (delay == None) or (delay <= 0):
                        print("[scripts] " + coords +
                              "    Recall mouse position " + str(m_pos) +
                              " in a line by " + str(skip) +
                              " pixels per step")
                    else:
                        print("[scripts] " + coords +
                              "    Recall mouse position " + str(m_pos) +
                              " in a line by " + str(skip) +
                              " pixels per step and wait " + split_line[1] +
                              " milliseconds between each step")

                    x_C, y_C = ms.get_pos()
                    points = ms.line_coords(x_C, y_C, x1, y1)
                    for x_M, y_M in points[::skip]:
                        if check_kill(x, y, is_async):
                            return -1
                        ms.set_pos(x_M, y_M)
                        if (delay != None) and (delay > 0):
                            if not safe_sleep(delay, x, y, is_async):
                                return -1
                elif split_line[0] == "M_MOVE":
                    if len(split_line) >= 3:
                        print("[scripts] " + coords +
                              "    Relative mouse movement (" + split_line[1] +
                              ", " + str(split_line[2]) + ")")
                        ms.move_to_pos(float(split_line[1]),
                                       float(split_line[2]))
                    else:
                        print(
                            "[scripts] " + coords +
                            "    Both X and Y are required for mouse movement, skipping..."
                        )
                elif split_line[0] == "M_SET":
                    if len(split_line) >= 3:
                        print("[scripts] " + coords +
                              "    Set mouse position to (" + split_line[1] +
                              ", " + str(split_line[2]) + ")")
                        ms.set_pos(float(split_line[1]), float(split_line[2]))
                    else:
                        print(
                            "[scripts] " + coords +
                            "    Both X and Y are required for mouse positioning, skipping..."
                        )
                elif split_line[0] == "M_SCROLL":
                    if len(split_line) > 2:
                        print("[scripts] " + coords + "    Scroll (" +
                              split_line[1] + ", " + split_line[2] + ")")
                        ms.scroll(float(split_line[2]), float(split_line[1]))
                    else:
                        print("[scripts] " + coords + "    Scroll " +
                              split_line[1])
                        ms.scroll(0, float(split_line[1]))
                elif split_line[0] == "M_LINE":
                    x1 = int(split_line[1])
                    y1 = int(split_line[2])
                    x2 = int(split_line[3])
                    y2 = int(split_line[4])

                    delay = None
                    if len(split_line) > 5:
                        delay = float(split_line[5]) / 1000.0

                    skip = 1
                    if len(split_line) > 6:
                        skip = int(split_line[6])

                    if (delay == None) or (delay <= 0):
                        print("[scripts] " + coords + "    Mouse line from (" +
                              split_line[1] + ", " + split_line[2] + ") to (" +
                              split_line[3] + ", " + split_line[4] + ") by " +
                              str(skip) + " pixels per step")
                    else:
                        print("[scripts] " + coords + "    Mouse line from (" +
                              split_line[1] + ", " + split_line[2] + ") to (" +
                              split_line[3] + ", " + split_line[4] + ") by " +
                              str(skip) + " pixels per step and wait " +
                              split_line[5] +
                              " milliseconds between each step")

                    points = ms.line_coords(x1, y1, x2, y2)
                    for x_M, y_M in points[::skip]:
                        if check_kill(x, y, is_async):
                            return -1
                        ms.set_pos(x_M, y_M)
                        if (delay != None) and (delay > 0):
                            if not safe_sleep(delay, x, y, is_async):
                                return -1
                elif split_line[0] == "M_LINE_MOVE":
                    x1 = int(split_line[1])
                    y1 = int(split_line[2])

                    delay = None
                    if len(split_line) > 3:
                        delay = float(split_line[3]) / 1000.0

                    skip = 1
                    if len(split_line) > 4:
                        skip = int(split_line[4])

                    if (delay == None) or (delay <= 0):
                        print("[scripts] " + coords +
                              "    Mouse line move relative (" +
                              split_line[1] + ", " + split_line[2] + ") by " +
                              str(skip) + " pixels per step")
                    else:
                        print("[scripts] " + coords +
                              "    Mouse line move relative (" +
                              split_line[1] + ", " + split_line[2] + ") by " +
                              str(skip) + " pixels per step and wait " +
                              split_line[3] +
                              " milliseconds between each step")

                    x_C, y_C = ms.get_pos()
                    x_N, y_N = x_C + x1, y_C + y1
                    points = ms.line_coords(x_C, y_C, x_N, y_N)
                    for x_M, y_M in points[::skip]:
                        if check_kill(x, y, is_async):
                            return -1
                        ms.set_pos(x_M, y_M)
                        if (delay != None) and (delay > 0):
                            if not safe_sleep(delay, x, y, is_async):
                                return -1
                elif split_line[0] == "M_LINE_SET":
                    x1 = int(split_line[1])
                    y1 = int(split_line[2])

                    delay = None
                    if len(split_line) > 3:
                        delay = float(split_line[3]) / 1000.0

                    skip = 1
                    if len(split_line) > 4:
                        skip = int(split_line[4])

                    if (delay == None) or (delay <= 0):
                        print("[scripts] " + coords + "    Mouse line set (" +
                              split_line[1] + ", " + split_line[2] + ") by " +
                              str(skip) + " pixels per step")
                    else:
                        print("[scripts] " + coords + "    Mouse line set (" +
                              split_line[1] + ", " + split_line[2] + ") by " +
                              str(skip) + " pixels per step and wait " +
                              split_line[3] +
                              " milliseconds between each step")

                    x_C, y_C = ms.get_pos()
                    points = ms.line_coords(x_C, y_C, x1, y1)
                    for x_M, y_M in points[::skip]:
                        if check_kill(x, y, is_async):
                            return -1
                        ms.set_pos(x_M, y_M)
                        if (delay != None) and (delay > 0):
                            if not safe_sleep(delay, x, y, is_async):
                                return -1
                elif split_line[0] == "LABEL":
                    print("[scripts] " + coords + "    Label: " +
                          split_line[1])
                    return idx + 1
                elif split_line[0] == "IF_PRESSED_GOTO_LABEL":
                    print("[scripts] " + coords +
                          "    If key is pressed goto LABEL " + split_line[1])
                    if lp_events.pressed[x][y]:
                        return labels[split_line[1]]
                elif split_line[0] == "IF_UNPRESSED_GOTO_LABEL":
                    print("[scripts] " + coords +
                          "    If key is not pressed goto LABEL " +
                          split_line[1])
                    if not lp_events.pressed[x][y]:
                        return labels[split_line[1]]
                elif split_line[0] == "GOTO_LABEL":
                    print("[scripts] " + coords + "    Goto LABEL " +
                          split_line[1])
                    return labels[split_line[1]]
                elif split_line[0] == "REPEAT_LABEL":
                    print("[scripts] " + coords + "    Repeat LABEL " +
                          split_line[1] + " " + split_line[2] + " times max")
                    if idx in repeats:
                        if repeats[idx] > 0:
                            print("[scripts] " + coords + "        " +
                                  str(repeats[idx]) + " repeats left.")
                            repeats[idx] -= 1
                            return labels[split_line[1]]
                        else:
                            print("[scripts] " + coords +
                                  "        No repeats left, not repeating.")
                    else:
                        repeats[idx] = int(split_line[2])
                        repeats_original[idx] = int(split_line[2])
                        print("[scripts] " + coords + "        " +
                              str(repeats[idx]) + " repeats left.")
                        repeats[idx] -= 1
                        return labels[split_line[1]]
                elif split_line[0] == "IF_PRESSED_REPEAT_LABEL":
                    print("[scripts] " + coords +
                          "    If key is pressed repeat LABEL " +
                          split_line[1] + " " + split_line[2] + " times max")
                    if lp_events.pressed[x][y]:
                        if idx in repeats:
                            if repeats[idx] > 0:
                                print("[scripts] " + coords + "        " +
                                      str(repeats[idx]) + " repeats left.")
                                repeats[idx] -= 1
                                return labels[split_line[1]]
                            else:
                                print(
                                    "[scripts] " + coords +
                                    "        No repeats left, not repeating.")
                        else:
                            repeats[idx] = int(split_line[2])
                            print("[scripts] " + coords + "        " +
                                  str(repeats[idx]) + " repeats left.")
                            repeats[idx] -= 1
                            return labels[split_line[1]]
                elif split_line[0] == "IF_UNPRESSED_REPEAT_LABEL":
                    print("[scripts] " + coords +
                          "    If key is not pressed repeat LABEL " +
                          split_line[1] + " " + split_line[2] + " times max")
                    if not lp_events.pressed[x][y]:
                        if idx in repeats:
                            if repeats[idx] > 0:
                                print("[scripts] " + coords + "        " +
                                      str(repeats[idx]) + " repeats left.")
                                repeats[idx] -= 1
                                return labels[split_line[1]]
                            else:
                                print(
                                    "[scripts] " + coords +
                                    "        No repeats left, not repeating.")
                        else:
                            repeats[idx] = int(split_line[2])
                            print("[scripts] " + coords + "        " +
                                  str(repeats[idx]) + " repeats left.")
                            repeats[idx] -= 1
                            return labels[split_line[1]]
                elif split_line[0] == "@SIMPLE":
                    print("[scripts] " + coords + "    Simple keybind: " +
                          split_line[1])
                    #PRESS
                    key = kb.sp(split_line[1])
                    releasefunc = lambda: kb.release(key)
                    kb.press(key)
                    #WAIT_UNPRESSED
                    while lp_events.pressed[x][y]:
                        sleep(DELAY_EXIT_CHECK)
                        if check_kill(x, y, is_async, releasefunc):
                            return idx + 1
                    #RELEASE
                    kb.release(key)
                elif split_line[0] == "@LOAD_LAYOUT":
                    layout_name = " ".join(split_line[1:])
                    print("[scripts] " + coords + "    Load layout " +
                          layout_name)
                    layout_path = os.path.join(files.LAYOUT_PATH, layout_name)
                    if not os.path.isfile(layout_path):
                        print("[scripts] " + coords +
                              "        ERROR: Layout file does not exist.")
                        return -1
                    try:
                        layout = files.load_layout(layout_path,
                                                   popups=False,
                                                   save_converted=False)
                    except files.json.decoder.JSONDecodeError:
                        print("[scripts] " + coords +
                              "        ERROR: Layout is malformated.")
                        return -1
                    if files.layout_changed_since_load:
                        files.save_lp_to_layout(files.curr_layout)
                    files.load_layout_to_lp(layout_path,
                                            popups=False,
                                            save_converted=False,
                                            preload=layout)
                elif split_line[0] == "OPEN":
                    path_name = " ".join(split_line[1:])
                    print("[scripts] " + coords + "    Open file or folder " +
                          path_name)
                    files.open_file_folder(path_name)
                elif split_line[0] == "RELEASE_ALL":
                    print("[scripts] " + coords + "    Release all keys")
                    kb.release_all()
                elif split_line[0] == "RESET_REPEATS":
                    print("[scripts] " + coords + "    Reset all repeats")
                    for i in repeats:
                        repeats[i] = repeats_original[i]
                else:
                    print("[scripts] " + coords + "    Invalid command: " +
                          split_line[0] + ", skipping...")
            return idx + 1
Exemple #8
0
    def Process(self, btn, idx, split_line):
        x = self.Get_param(btn, 1)
        y = self.Get_param(btn, 2)

        ms.set_pos(x, y)