# pydmdll **Repository Path**: gao_yongxian/pydmdll ## Basic Information - **Project Name**: pydmdll - **Description**: 大漠插件dm.dll的Python接口 - **Primary Language**: Python - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 2 - **Created**: 2021-10-24 - **Last Updated**: 2024-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Welcome to pydmdll ### 前言 Python模拟鼠标键盘的包有很多,它们的文档也很全,功能也很人性化,最后实在没有办法了再使用大漠。 推荐结合使用:比如:大漠没有监听键盘的功能,你完全可以再开一个线程,使用`Keyboard`进行监听。 * `Pyautogui`侧重于鼠标,键盘,截图,消息框的功能 * `Pywinauto`侧重对CS的操作,对进程,窗体进行操作 * `Keyboard`侧重于键盘,监听键盘,设置热键,键盘记录等功能 ### 简介 `pydmdll`**仅支持32位Python**,实现了大漠插件免费功能部分,内部封装的是`V3.1233`版本的`dm.dll`.初衷是为了解决鼠标在游戏内部无法拖拽的问题。 ### 项目 * [Github](https://github.com/Gaoyongxian666/pydmdll) * [在线文档](https://pydmdll.readthedocs.io/zh/latest/) ### 功能 * 键盘鼠标:输入,输出,按键,点击等 * 窗口功能:最小化,激活,移动,获取窗口句柄等 * 基本功能:剪贴板,蜂鸣器等 ### 安装 pip install pydmdll ### 开始 import os import time from pydmdll import DM if __name__ == '__main__': dm = DM() # dm = DM(dll_path="你自己的版本路径-绝对路径") # 取消注册 # dm.Un_reg() # 打开记事本 os.system("start notepad.exe") time.sleep(1) # 窗口句柄就是一个int类型的数字 txt_hwnd = dm.FindWindow("", "记事本") print(txt_hwnd) # 最大化指定窗口,同时激活窗口. f = dm.SetWindowState(txt_hwnd, 4) # print(f) # 使记事本窗口移动 dm.MoveWindow(txt_hwnd, 10, 10) print("GetWindowProcessPath",dm.GetWindowProcessPath(txt_hwnd)) print("dm.GetWindowState(txt_hwnd,1)",dm.GetWindowState(txt_hwnd,4)) # 打印注册路径 path = dm.GetBasePath() print(path) # 获取剪贴板 print(dm.GetClipboard()) # 获取标题还有.py的所有句柄 # 注意:返回的是str,但句柄必须是int类型,要强行转化 # hwnd_str_list=dm.EnumWindow(0,".py","",1+2+4+8).split(",") # print(hwnd_str_list) # for hwnd in hwnd_str_list: # print(dm.GetWindowClass(int(hwnd))) # print(dm.GetWindowProcessPath(int(hwnd))) # print(dm.GetWindowTitle(int(hwnd))) # dm.MoveWindow(int(hwnd),100,100) # 推荐相对移动 dm.MoveR(40, 10) ### 注意 在线程里面使用dm,要注意初始化pythoncom,否则每次都要注册DM,单线程情况下不用设置。 import pythoncom pythoncom.CoInitialize() dm = DM() 管理员运行cmd命令,/C代表打开执行之后直接关闭 注意cmd会直接运行你传入的命令,如果你使用/K 参数保留命令行,不会显示你传入的命令,但确实已经执行了,如果有回显你才会看到 ctypes.windll.shell32.ShellExecuteW(None, "runas", "cmd.exe", "/C %s" % self.cmd_un_dll, None, 1) 管理员运行本程序代码,通常在最开始执行,即整个代码以管理员运行 ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1) ### 其他 `pydmdll`仅仅封装了免费接口,默认使用的是内部封装的是`V3.1233`版本的`dm.dll`,也可以指定本地的`dm.dll`。 `大漠插件`是用vb语言写的一个闭源且收费的的`dll`,`V3.1233`是其最后一个免费的版本,当然也仅是免费使用部分功能。 ### 键盘 | key_str | 虚拟键码 | | --------- | -------- | | "1", | 49 | | "2", | 50 | | "3", | 51 | | "4", | 52 | | "5", | 53 | | "6", | 54 | | "7", | 55 | | "8", | 56 | | "9", | 57 | | "0", | 48 | | "-", | 189 | | "=", | 187 | | "back", | 8 | | "a", | 65 | | "b", | 66 | | "c", | 67 | | "d", | 68 | | "e", | 69 | | "f", | 70 | | "g", | 71 | | "h", | 72 | | "i", | 73 | | "j", | 74 | | "k", | 75 | | "l", | 76 | | "m", | 77 | | "n", | 78 | | "o", | 79 | | "p", | 80 | | "q", | 81 | | "r", | 82 | | "s", | 83 | | "t", | 84 | | "u", | 85 | | "v", | 86 | | "w", | 87 | | "x", | 88 | | "y", | 89 | | "z", | 90 | | "ctrl", | 17 | | "alt", | 18 | | "shift", | 16 | | "win", | 91 | | "space", | 32 | | "cap", | 20 | | "tab", | 9 | | "~", | 192 | | "esc", | 27 | | "enter", | 13 | | "up", | 38 | | "down", | 40 | | "left", | 37 | | "right", | 39 | | "option", | 93 | | "print", | 44 | | "delete", | 46 | | "home", | 36 | | "end", | 35 | | "pgup", | 33 | | "pgdn", | 34 | | "f1", | 112 | | "f2", | 113 | | "f3", | 114 | | "f4", | 115 | | "f5", | 116 | | "f6", | 117 | | "f7", | 118 | | "f8", | 119 | | "f9", | 120 | | "f10", | 121 | | "f11", | 122 | | "f12", | 123 | | "[", | 219 | | "]", | 221 | | "\\", | 220 | | ";", | 186 | | "'", | 222 | | ",", | 188 | | ".", | 190 | | "/", | 191 |