Maye Lite Script 基于 JavaScript ,支持 JavaScript 98% 以上的语法。
!!!每个脚本实例中必须包含
mz.exit();
退出命令,否则脚本实例将会一存在。
简介
Maye Lite Script Framework , 采用多线程调用多进程执行方式(开启minSpareChildProcess),与同类不同之处在于采用不调用退出命令不退自动退出的方式,该方式可随意操控脚本在想要的时候完全退出并释放资源。
代码编辑器
附加快捷键
Ctrl+S 保存,子窗口生效(以便及时调试使用)
Ctrl+Alt+Z 自动换行
Ctrl+D 复制
结构体与常量
// 此处为方便辨别以cpp方式展现,实际使用时自行转换为js方式
const int NULL = 0; // int 类型空值
const string NULLSTR = ""; // string 类型空值
const int S_OK = 0;
struct POINT {
int x;
int y;
};
struct RECT {
int left;
int top;
int right;
int bottom;
};
struct SIZE {
int cx;
int cy;
};
基础
exit()
// void exit();
// 用作退出脚本实例并释放内存,每个脚本都应存在该命令,否则脚本实例将一直存在并占用内存
mz.exit();
Delay()
// void Delay(int ms);
// 延时,延时执行后续命令
// @param int ms 延迟时间(毫秒)
mz.Delay(1000);
Sleep()
// void Sleep(int ms);
// 延时,延时执行后续命令
// @param int ms 延迟时间(毫秒)
mz.Sleep(1000);
按键
SendString()
// void SendString(string str);
// 模拟输入字符串(适用于大部分游戏)
// @param string str 要输入的字符串
mz.SendString('test');
SendVKeyDown()
// void SendVKeyDown(vk virtualKey);
// 模拟按下指定的VirtualKeyCode。
// @param vk virtualKey 要模拟发送的 VirtualKeyCode (VK.XX) 值
mz.SendVKeyDown(VK.A);
SendVKeyUp()
// void SendVKeyUp(vk virtualKey);
// 模拟释放指定的VirtualKeyCode。
// @param vk virtualKey 要模拟发送的 VirtualKeyCode (VK.XX) 值
mz.SendVKeyUp(VK.A);
SendVKey()
// void SendVKey(vk virtualKey);
// 模拟按下并释放指定的VirtualKeyCode。
// 执行方式为:按下->延时50ms->放开
// @param vk virtualKey 要模拟发送的 VirtualKeyCode (VK.XX) 值
mz.SendVKey(VK.A);
SendVKey2()
// void SendVKey2(vk virtualKey);
// 同SendVKey,但此函数执行按下后无延时
// 执行方式为:按下->放开
// @param vk virtualKey 要模拟发送的 VirtualKeyCode (VK.XX) 值
mz.SendVKey2(VK.A);
SendModifiedVKeys()
// void SendModifiedVKeys(dynamic Modifiers, dynamic Keys);
// 模拟按下组合键,如Ctrl+S,Win+E等。按住修饰键,发送按键,然后释放修饰键。(PS: 其他几个Ex结尾的也支持修饰键与按键一起发送🤣)
// 执行方式为:按下->延时50ms->放开
// @param dynamic Modifiers VirtualKeyCode 修饰符值的单个(VK.XX)或数组([VK.XX,VK.XX])。修饰符包括Control,Alt,Shift和Win键。
// @param dynamic Keys 在按下修饰键后要发送的 VirtualKeyCode 值,可以是单个(VK.XX)或数组([VK.XX,VK.XX])。
mz.SendModifiedVKeys([VK.LCONTROL,VK.LSHIFT],[VK.K]);
SendVKeyDownEx()
// void SendVKeyDownEx(dynamic Keys);
// 同SendVKeyDown
// @param dynamic Keys 要发送的 VirtualKeyCode 值,可以是单个(VK.XX)或数组([VK.XX,VK.XX])。
mz.SendVKeyDownEx([VK.M, VK.Z]);
SendVKeyUpEx()
// void SendVKeyUpEx(dynamic Keys);
// 同SendVKeyUp
// @param dynamic Keys 要发送的 VirtualKeyCode 值,可以是单个(VK.XX)或数组([VK.XX,VK.XX])。
mz.SendVKeyUpEx([VK.M, VK.Z]);
SendVKeyEx()
// void SendVKeyEx(dynamic Keys);
// 同SendVKey
// 执行方式为:按下->延时50ms->放开
// @param dynamic Keys 要发送的 VirtualKeyCode 值,可以是单个(VK.XX)或数组([VK.XX,VK.XX])。
mz.SendVKeyEx([VK.M, VK.Z]);
SendVKeyEx2()
// void SendVKeyEx2(dynamic Keys);
// 同SendVKeyEx,但此函数执行按下后无延时
// 执行方式为:按下->放开
// @param dynamic Keys 要发送的 VirtualKeyCode 值,可以是单个(VK.XX)或数组([VK.XX,VK.XX])。
mz.SendVKeyEx2([VK.M, VK.Z]);
IsKeyDown()
// bool IsKeyDown(vk virtualKey);
// 如果当前按下指定的键,则返回 true。
// @param vk virtualKey 要检查的 VirtualKeyCode (VK.XX) 值
// @return 按下返回true,否则为false
var isAKeyDown = mz.IsKeyDown(VK.A);
SendAltDown()
// void SendAltDown();
// 模拟按下左Alt键
mz.SendAltDown();
SendAltUp()
// void SendAltUp();
// 模拟释放左Alt键
mz.SendAltUp();
SendControlDown()
// void SendControlDown();
// 模拟按下左Ctrl键
mz.SendControlDown();
SendControlUp()
// void SendControlUp();
// 模拟释放左Ctrl键
mz.SendControlUp();
SendShiftDown()
// void SendShiftDown();
// 模拟按下左Shift键
mz.SendShiftDown();
SendShiftUp()
// void SendShiftUp();
// 模拟释放左Shift键
mz.SendShiftUp();
SendWinDown()
// void SendWinDown();
// 模拟按下左Win键
mz.SendWinDown();
SendWinUp()
// void SendWinUp();
// 模拟释放左Win键
mz.SendWinUp();
鼠标
MouseCilck()
// void MouseCilck(MouseBtn btn, bool isClick, bool isDown);
// 发送鼠标按键信息
// @param MouseBtn btn 按键信息(MouseBtn.XX)
// @param bool isClick 是否为单击(默认:true),如果该值为true则跳过isDown
// @param bool isDown 是否按下(默认:false),true按下,false弹起,如果isClick为true则该值失效
mz.MouseCilck(MouseBtn.Left);
MouseMove()
// void MouseMove(int x, int y, bool isAbsolute);
// 移动鼠标
// @param int x 水平
// @param int y 垂直
// @param bool isAbsolute 是否为绝对值,如果为true,则xy相对于桌面左上角,否则xy相对于鼠标当前坐标
mz.MouseMove(-10);
MouseWhell()
// void MouseWhell(int amount, bool isHorizontally);
// 鼠标滚轮
// @param int amount 滚动量(正负值)
// @param bool isHorizontally 是否水平滚动
mz.MouseWhell(-3);
IsButtonDown()
// bool IsButtonDown(MouseBtn btn);
// 如果当前按下指定的鼠标键,则返回 true。
// @param MouseBtn btn 要检查的 VirtualKeyCode (MouseBtn.XX) 值
// @return 按下返回true,否则为false
var isLeftMouseDown = mz.IsButtonDown(MouseBtn.Left);
GetCurrentMousePoint()
// POINT GetCurrentMousePoint();
// 返回包含当前鼠标位置坐标的点
// @return 返回xy坐标
var currentMouseLocation = mz.GetCurrentMousePoint();
系统
GetTickCount()
// int GetTickCount();
// 检索自系统启动以来已用过的毫秒数,最长为 49.7 天。
// @return 返回值是自系统启动以来已用过的毫秒数。
var r = mz.GetTickCount();
GetTickCount64()
// string GetTickCount64();
// 检索自系统启动以来已用过的毫秒数。
// @return 返回值是自系统启动以来已用过的毫秒数。
var r = mz.GetTickCount64();
QueryRecycleBin()
// int EmptyRecycleBin(string RootPath);
// 查询指定驱动器回收站上的项目数量。
// @param string RootPath 回收站所在的根驱动器的路径,可以包含根驱动器、文件夹和子文件夹(如:C:\windows\system)。如果此值为空或NULLSR,则查询所有驱动器上的所有回收站。
// @return 成功返回项目数,失败返回 0(成功也可能返回0🤣)
var r = mz.QueryRecycleBin('D:\\');
// 查询所有
var r = mz.QueryRecycleBin();
EmptyRecycleBin()
// int EmptyRecycleBin(string RootPath);
// 清空指定驱动器上的回收站。详情参照微软文档
// @param string RootPath 回收站所在的根驱动器的路径,可以包含根驱动器、文件夹和子文件夹(如:C:\windows\system)。如果此值为空或NULLSR,则清空所有驱动器上的所有回收站。
// @return 成功返回S_OK,失败返回 HRESULT 错误代码
var r = mz.EmptyRecycleBin('D:\\');
// 清空所有
var r = mz.EmptyRecycleBin();
ExpandEnvironmentVariables()
// int ExpandEnvironmentVariables(string stringToExpand);
// 展开环境变量字符串,同时支持maye的参数变量。
// @param string stringToExpand 要展开的环境变量字符串。
// @return 成功返回展开后的字符串,失败返回 stringToExpand
var expanded = mz.ExpandEnvironmentVariables('%OS%');
WinExecEx()
// void WinExecEx(string cmdLine, int cmdShow);
// 运行指定程序,该函数原型为 CreateProcess 二次封装而非 WinExec
// @param string cmdLine 要执行的程序命令行 (加入参数)
// @param int cmdShow 不懂可忽略,详情参照微软文档
mz.WinExecEx('C:\\Windows\\system32\\notepad.exe');
Run()
// int Run(RunType Mode, string path, string param, string dir, bool isThread, bool waitRunComplete, bool ignoreError);
// 展开环境变量字符串,同时支持maye的参数变量。
// @param RunType Mode 运行方式 (RunType.XX)
// @param string path 目标
// @param string param 启动参数
// @param string dir 起始位置
// @param bool isThread 是否通过多线程执行 (默认: true)
// @param bool waitRunComplete 等待程序退出后返回 (默认: false)
// @param bool ignoreError 忽略错误警告 (默认: false)
// @return 成功返回 1 如果未开启多线程执行则返回对应的进程PID,失败返回 0
var r = mz.Run(RunType.default, '%ComSpec%', '', 'C:\\', true, false, false);
RunCmeLine()
// void RunCmeLine(string cmdLine, bool isShow, bool isExit);
// 运行命令行
// @param string cmdLine 要执行的命令行
// @param bool isShow 是否显示窗口(默认:true)
// @param bool isExit 执行完毕是否退出(默认:false不退出)
mz.RunCmeLine('ping 127.0.0.1');
RunCmeLineEx()
// object RunCmeLineEx(string cmdLine);
// 运行命令行,并等待执行完毕。该命令会卡住主线程直道执行完毕。
// @param string cmdLine 要执行的命令行
// @return object{
// code: -1, 执行返回代码,-1表示执行失败,其他值为命令返回值,尽量别用这个判断是否成功
// out: '', 命令行输出字符串
// err: '' 错误信息
// }
var ret = mz.RunCmeLine('ping 127.0.0.1');
RunItem()
// void RunItem(int id);
// 运行 Maye 项目
// @param int id 项目id,右键编辑标题栏里面的数值就是
mz.RunItem(1001);
GetClipboardText()
// string GetClipboardText();
// 获取剪贴板文本
// @return 成功返回剪辑板文本,失败返回空
var r = mz.GetClipboardText();
SetClipboardText()
// bool SetClipboardText(string text);
// 设置剪贴板文本
// @param string text 欲设置的文本
// @return 成功返回 true,失败返回 false
var r = mz.SetClipboardText('test');
RegisterHotKey()
// bool RegisterHotKey(int id, int fsModifiers, vk vk);
// 注册快捷键(仅多进程生效)。详情参照微软文档
// @param int id 热键的标识符
// @param int fsModifiers 功能键 (MOD_XX)
// @param vk vk 主热键 (VK.XX)
// @return 成功返回 true,失败返回 false
var r = mz.RegisterHotKey(6, MOD_ALT | MOD_NOREPEAT, VK.A);
// 热键例子
mz.RegisterHotKey(6, MOD_ALT | MOD_NOREPEAT, VK.A);// ALT+A
function event_hotkey(id){
if(id == 6) {
mz.MsgBox('HotKey-6');
}
}
UnregisterHotKey()
// bool UnregisterHotKey(int id);
// 卸载快捷性(仅多进程生效)。详情参照微软文档
// @param int id 热键的标识符
// @return 成功返回 true,失败返回 false
var r = mz.UnregisterHotKey(6);
窗口
FindWindow()
// int FindWindow(string ClassName, string WindowName);
// 检索顶级窗口的句柄,该窗口的类名称和窗口名称与指定的字符串匹配。 此函数不搜索子窗口。 此函数不执行区分大小写的搜索。详情参照微软文档
// @param string ClassName 类名 (不使用则传递空字符串)
// @param string WindowName 窗口名 (不使用则传递空字符串)
// @return 成功返回窗口句柄,失败返回0
var hWnd = mz.FindWindow('', 'Maye Lite');
FindWindowEx()
// int FindWindowEx(int hWndParent, int hWndChildAfter, string ClassName, string WindowName);
// 检索一个窗口的句柄,该窗口的类名和窗口名称与指定的字符串匹配。 该函数搜索子窗口,从指定子窗口后面的子窗口开始。 此函数不执行区分大小写的搜索。详情参照微软文档
// @param int hWndParent 父窗口句柄 (不使用则传递0)
// @param int hWndChildAfter 子窗口句柄 (不使用则传递0)
// @param string ClassName 类名 (不使用则传递空字符串)
// @param string WindowName 窗口名 (不使用则传递空字符串)
// @return 成功返回窗口句柄,失败返回0
var hWnd = mz.FindWindowEx(0, 0, '', 'Maye Lite');
GetParent()
// int GetParent(int hWnd);
// 检索指定窗口的父或所有者的句柄。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 成功返回窗口句柄,失败返回0
var hWnd = mz.GetParent(68214);
GetAncestor()
// int GetAncestor(int hWnd, int gaFlags);
// 检索指定窗口的上级句柄。详情参照微软文档
// @param int hWnd 窗口句柄。 如果此参数是桌面窗口,则该函数返回 0
// @param int gaFlags 可选值:(默认:3)
// 1: 检索父窗口。 这不包括所有者,因为它与 GetParent 函数一样。
// 2: 通过走父窗口链来检索根窗口。
// 3: 通过走 GetParent 返回的父窗口和所有者窗口链来检索拥有的根窗口。
// @return 成功返回窗口句柄,失败返回0
var hWnd = mz.GetAncestor(68214);
GetDesktopWindow()
// int GetDesktopWindow();
// 检索桌面窗口的句柄。详情参照微软文档
// @return 成功返回句柄,失败返回0
var hWnd = mz.GetDesktopWindow();
WindowFromPoint()
// int WindowFromPoint(int x, int y);
// 检索包含指定点的窗口的句柄。详情参照微软文档
// @param int x 水平
// @param int y 垂直
// @return 成功返回句柄,失败返回0
var hWnd = mz.WindowFromPoint(100,100);
// 如获取鼠标处窗口句柄:
var pt = mz.GetCurrentMousePoint();
var hWnd = mz.WindowFromPoint(pt.x,pt.y);
GetDlgCtrlID()
// int GetDlgCtrlID(int hWnd);
// 检索指定控件的ID。详情参照微软文档
// @param int hWnd 控件的句柄
// @return 成功返回控件ID,失败返回0
var id = mz.GetDlgCtrlID(68214);
GetDlgItem()
// int GetDlgItem(int hDlg, int nIDDlgItem);
// 检索指定对话框中控件的句柄。详情参照微软文档
// @param int hDlg 父句柄
// @param int nIDDlgItem 要检索的控件的ID
// @return 成功返回句柄,失败返回0
var hWnd = mz.GetDlgItem(68214, 220);
GetWindowRect()
// RECT GetWindowRect(int hWnd);
// 检索指定窗口的边界矩形的尺寸。尺寸以相对于屏幕左上角的屏幕坐标提供。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 成功返回RECT结构体,失败返回false
var rc = mz.GetWindowRect(68214);
GetClientRect()
// RECT GetClientRect(int hWnd);
// 检索窗口工作区的坐标。 客户端坐标指定工作区的左上角和右下角。由于客户端坐标相对于窗口工作区的左上角,左上角的坐标 (0,0) 。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 成功返回RECT结构体,失败返回false
var rc = mz.GetClientRect(68214);
IsChild()
// bool IsChild(int hWndParent, int hWnd);
// 判断一个窗口和另一窗口是否为父子关系。详情参照微软文档
// @param int hWndParent 父窗口句柄
// @param int hWnd 要测试的窗口句柄
// @return 是子窗口返回true,否则返回false
var is = mz.IsChild(68214, 393850);
IsWindow()
// bool IsWindow(int hWnd);
// 确定指定的窗口句柄是否有效。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 成功返回true,失败返回false
var is = mz.IsWindow(68214);
IsWindowVisible()
// bool IsWindowVisible(int hWnd);
// 确定指定窗口的可见性状态。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 成功返回true,失败返回false
var is = mz.IsWindowVisible(68214);
IsWindowTop()
// bool IsWindowTop(int hWnd);
// 窗口是否置顶
// @param int hWnd 窗口句柄
// @return 置顶返回true,否则返回false
var is = mz.IsWindowTop(68214);
IsWindowEnabled()
// bool IsWindowEnabled(int hWnd);
// 判断指定窗口的是否被禁止。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 未禁止返回true,禁止返回false
var is = mz.IsWindowEnabled(68214);
IsWindowActive()
// bool IsWindowActive(int hWnd);
// 窗口是否激活
// @param int hWnd 窗口句柄
// @return 激活返回true,未激活返回false
var is = mz.IsWindowActive(68214);
IsIconic()
// bool IsIconic(int hWnd);
// 窗口是否最小化。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 最小化返回true,否则返回false
var is = mz.IsIconic(68214);
IsZoomed()
// bool IsZoomed(int hWnd);
// 窗口是否最大化。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 最大化返回true,否则返回false
var is = mz.IsZoomed(68214);
IsWindowRespond()
// bool IsWindowRespond(int hWnd);
// 窗口是否响应
// @param int hWnd
// @return 成功返回true(窗口可正常响应),失败返回false(窗口无响应)
var ret = mz.IsWindowRespond(68214);
ShowWindow()
// bool ShowWindow(int hWnd, int nCmdShow);
// 设置指定窗口的显示状态。详情参照微软文档
// @param int hWnd 窗口句柄
// @param int nCmdShow 可选值:(默认:1)
// 0: 隐藏窗口并激活另一个窗口。
// 1: 激活并显示窗口。 如果窗口最小化或最大化,系统会将其还原到其原始大小和位置。 首次显示窗口时,应用程序应指定此标志。
// 2: 激活窗口并将其显示为最小化窗口。
// 3: 激活窗口并显示最大化的窗口。
// 4: 在其最近的大小和位置显示一个窗口。 此值类似于 SW_SHOWNORMAL,但窗口未激活。
// 5: 激活窗口并以当前大小和位置显示窗口。
// 6: 最小化指定的窗口,并按 Z 顺序激活下一个顶级窗口。
// 7: 将窗口显示为最小化窗口。 此值类似于 SW_SHOWMINIMIZED,但窗口未激活。
// 8: 以当前大小和位置显示窗口。 此值类似于 SW_SHOW,但窗口未激活。
// 9: 激活并显示窗口。 如果窗口最小化或最大化,系统会将其还原到其原始大小和位置。 还原最小化窗口时,应用程序应指定此标志。
// 10: 根据启动应用程序的程序传递给 CreateProcess 函数的 STARTUPINFO 结构中指定的SW_值设置显示状态。
// 11: 即使拥有窗口的线程未响应,也会最小化窗口。 仅当将窗口从不同的线程最小化时,才应使用此标志。
// @return 如果窗口以前可见返回true,如果窗口之前已隐藏返回false
var is = mz.ShowWindow(68214, 0);
ShowWindowAsync()
// bool ShowWindowAsync(int hWnd, int nCmdShow);
// 设置窗口的显示状态,而无需等待操作完成。详情参照微软文档
// @param int hWnd 窗口句柄
// @param int nCmdShow 参考 ShowWindow 说明
// @return 如果操作成功返回true,否则返回false
var is = mz.ShowWindowAsync(68214, 0);
SetParent()
// int SetParent(int hWndChild, int hWndNewParent);
// 更改指定子窗口的父窗口。详情参照微软文档
// @param int hWndChild 窗口句柄
// @param int hWndNewParent 新父窗口的句柄,如果此参数为0,桌面将成为新的父窗口
// @return 成功返回上一个父窗口的句柄,否则返回0
var hWnd = mz.SetParent(68214, 0);
GetFocus()
// int GetFocus();
// 如果窗口附加到调用线程的消息队列,则检索具有键盘焦点的窗口的句柄。详情参照微软文档
// @return 返回值是具有键盘焦点的窗口的句柄。 如果调用线程的消息队列没有与键盘焦点关联的窗口,则返回值为 NULL。
var hWnd = mz.GetFocus();
SetFocus()
// int SetFocus(int hWnd);
// 将键盘焦点设置为指定的窗口。 该窗口必须附加到调用线程的消息队列。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 成功返回上一个焦点句柄,否则返回0
var hWnd = mz.SetFocus(68214);
GetActiveWindow()
// int GetActiveWindow();
// 检索附加到调用线程的消息队列的活动窗口的窗口句柄。详情参照微软文档
// @return 成功返回句柄,失败返回0
var hWnd = mz.GetActiveWindow();
SetActiveWindow()
// int SetActiveWindow(HWND hWnd);
// 激活窗口。 窗口必须附加到调用线程的消息队列。详情参照微软文档
// @param HWND hWnd 要激活的顶级窗口的句柄。
// @return 成功返回句柄,失败返回0
var hWnd = mz.SetActiveWindow(68214);
GetForegroundWindow()
// int GetForegroundWindow();
// 检索前台窗口的句柄, (用户当前正在使用的窗口) 。详情参照微软文档
// @return 成功返回句柄,失败返回0
var hWnd = mz.GetForegroundWindow();
SetForegroundWindow()
// bool SetForegroundWindow(int hWnd);
// 将创建指定窗口的线程引入前台并激活窗口。 键盘输入将定向到窗口,并为用户更改各种视觉提示。 系统向创建前台窗口的线程分配略高于其他线程的优先级。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 如果窗口被带到前台返回true,否则返回false
var hWnd = mz.SetForegroundWindow(68214);
GetClassName()
// string GetClassName(int hWnd);
// 检索指定窗口所属的类的名称。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 成功返回类名,否则返回空字符串
var className = mz.GetClassName(68214);
GetWindowText()
// string GetClassName(int hWnd);
// 如果指定窗口有标题栏,则将获取其文本。详情参照微软文档
// @param int hWnd 窗口句柄
// @return 成功返回标题字符串,否则返回空字符串
var str = mz.GetWindowText(68214);
SetWindowText()
// bool SetWindowText(int hWnd, string str);
// 更改指定窗口标题栏的文本。详情参照微软文档
// @param int hWnd 窗口句柄
// @param string str 新标题
// @return 成功返回true,否则返回false
var str = mz.SetWindowText(68214, 'test');
GetSCText()
// string GetSCText(int hWnd);
// 获取控件内容。
// @param int hWnd 窗口句柄
// @return 成功返回标题字符串,否则返回空字符串
var str = mz.GetSCText(68214);
SetSCText()
// bool SetSCText(int hWnd, string str);
// 设置控件内容。
// @param int hWnd 窗口句柄
// @param string str 新内容
// @return 成功返回true,否则返回false
var str = mz.SetSCText(68214, 'test');
WindowTopMost()
// void WindowTopMost(int hWnd, bool isTop);
// 设置窗口置顶状态。
// @param int hWnd 窗口句柄
// @param bool isTop 是否置顶
mz.WindowTopMost(68214, true);
MoveWindow()
// void MoveWindow(int hWnd, int x, int y);
// 移动窗口。
// @param int hWnd 窗口句柄
// @param int x 新的左边距离
// @param int y 新的顶边距离
mz.MoveWindow(68214, 100, 10);
SetWindowSize()
// void SetWindowSize(int hWnd, int cx, int cy);
// 设置窗口尺寸。
// @param int hWnd 窗口句柄
// @param int cx 新的宽度
// @param int cy 新的高度
mz.SetWindowSize(68214, 100, 100);
SetWindowPos()
// bool SetWindowPos(int hWnd, int hWndInsertAfter, int x, int y, int cx, int cy, int uFlags);
// 详情参照微软文档
// @param int hWnd
// @param int hWndInsertAfter
// @param int x
// @param int y
// @param int cx
// @param int cy
// @param int uFlags
// @return
var is = mz.SetWindowPos(68214, 0, 10, 10, 0, 0, 4 | 1);
GetWindowLongPtr()
// int GetWindowLongPtr(int hWnd, int nIndex);
// 详情参照微软文档
// @param int hWnd
// @param int nIndex
// @return 成功返回请求值,失败返回0
var style = mz.GetWindowLongPtr(68214, -16);
SetWindowLongPtr()
// int SetWindowLongPtr(int hWnd, int nIndex, int dwNewLong);
// 详情参照微软文档
// @param int hWnd
// @param int nIndex
// @param int dwNewLong
// @return 成功返回上一个值,失败返回0
var ret = mz.SetWindowLongPtr(68214, -16, 1417740416);
SendMessage()
// int SendMessage(int hWnd, int Msg, int wParam, int lParam);
// 详情参照微软文档
// @param int hWnd
// @param int Msg
// @param int wParam
// @param int lParam
// @return 返回指定消息处理的结果;这取决于发送的消息。
var ret = mz.SendMessage(68214, 16, 0, 0);
SendNotifyMessage()
// bool SendNotifyMessage(int hWnd, int Msg, int wParam, int lParam);
// 详情参照微软文档
// @param int hWnd
// @param int Msg
// @param int wParam
// @param int lParam
// @return 成功返回true,失败返回false
var ret = mz.SendNotifyMessage(68214, 16, 0, 0);
PostMessage()
// bool PostMessage(int hWnd, int Msg, int wParam, int lParam);
// 详情参照微软文档
// @param int hWnd
// @param int Msg
// @param int wParam
// @param int lParam
// @return 成功返回true,失败返回false
var ret = mz.PostMessage(68214, 16, 0, 0);
UpdateWindow()
// bool UpdateWindow(int hWnd);
// 更新窗口。详情参照微软文档
// @param int hWnd
// @return 成功返回true,失败返回false
var ret = mz.UpdateWindow(68214);
InvalidateRect()
// bool InvalidateRect(int hWnd, bool Erase);
// 更新窗口。详情参照微软文档
// @param int hWnd
// @param bool Erase 处理更新区域时是否要擦除更新区域中的背景
// @return 成功返回true,失败返回false
var ret = mz.InvalidateRect(68214, true);
GetWindowProcessId()
// int GetWindowProcessId(int hWnd);
// 通过窗口句柄获取进程PID
// @param int hWnd 窗口句柄
// @return 成功返回PID,否则返回0
var pid = mz.GetWindowProcessId(68214);
GetCaretRECT()
// dynamic GetCaretRECT();
// 获取插入符号的RECT。
// @return 成功返回RECT,失败返回false
var rc = mz.GetCaretRECT();
进程
GetNameProcessId()
// array GetNameProcessId(string name);
// 通过进程名获取进程PID
// @param string name 进程名
// @return 成功返回进程PID Array,否则返回空 Array
var ret = mz.GetNameProcessId('test.exe');
GetProcessIdName()
// string GetProcessIdName(int PID);
// 通过进程PID获取进程名称
// @param int PID 进程ID
// @return 成功返回进程名,否则返回0
var ret = mz.GetProcessIdName(6553);
GetProcessIdPath()
// string GetProcessIdPath(int PID);
// 通过进程PID获取进程路径
// @param int PID 进程ID
// @return 成功返回进程路径,否则返回空
var ret = mz.GetProcessIdPath(6553);
GetChildProcessId()
// array GetChildProcessId(int PID);
// 通过进程PID获取所有子进程PID
// @param int PID 进程ID
// @return 成功返回子进程ID Array,否则返回空Array
var ret = mz.GetChildProcessId(6553);
GetProcessIdThreads()
// int GetProcessIdThreads(int PID);
// 通过进程PID获取进程使用的线程数
// @param int PID 进程ID
// @return 成功返回线程数,否则返回0
var ret = mz.GetProcessIdThreads(6553);
IsProcessIdExists()
// bool IsProcessIdExists(int PID);
// 判断进程PID是否有效
// @param int PID 进程ID
// @return 有效返回true,否则返回false
var ret = mz.IsProcessIdExists(6553);
TerminateProcess()
// int TerminateProcess(int PID);
// 结束指定进程
// @param int PID 进程ID
// @return 成功返回true,否则返回false
var ret = mz.TerminateProcess(5112);
SuspendProcess()
// void SuspendProcess(int PID, bool state);
// 将指定进程暂停
// @param int PID 进程ID
// @param bool state 状态,true暂停,false恢复
mz.SuspendProcess(5112, true);
GetPriorityClass()
// int GetPriorityClass(int PID);
// 获取进程优先级
// @param int PID 进程ID
// @return 成功返回优先级别(0:高; 1:高于正常; 3: 正常; 4: 低于正常; 5: 低; 2: 实时;),否则返回-1
var ret = mz.GetPriorityClass(5112);
SetPriorityClass()
// bool SetPriorityClass(int PID, int level);
// 设置进程优先级
// @param int PID 进程ID
// @param int level 优先级(0:高; 1:高于正常; 3: 正常; 4: 低于正常; 5: 低; 2: 实时[如果权限不够则会设置为高于正常];)
// @return 成功返回true,否则返回false
var ret = mz.SetPriorityClass(5112);
文件目录
ReadFile()
// string ReadFile(string fileName);
// 读入文件
// @param string fileName 文件名
// @return 成功返回文件内容,失败返回空
var ret = mz.ReadFile('C:\\123.txt');
WriteFile()
// bool WriteFile(string fileName, string str);
// 写到文件
// @param string fileName 文件名
// @param string str 要写出的数据,需要转换为字符串
// @return 成功返回true,失败返回false
var ret = mz.WriteFile('C:\\123.txt', 'test\nabc');
FindFile()
// string FindFile(string fileName, FILE_ATTRIBUTE FileAttributes);
// 寻找文件
// @param string fileName 文件名或目录名。可以被省略。可以使用多字符 (*) 和单字符 (?) 通配符来指定多重文件。在非首次寻找文件时,参数值必须为空或被省略。
// @param FILE_ATTRIBUTE FileAttributes 要找文件的属性。可以被省略。参数值可以为一个或多个相加。如果省略本参数,默认为搜寻除子目录外的所有文件。
// @return 成功返回文件内容,失败返回空
var ret = mz.FindFile('C:\\*');
// 简单例子(搜索 'D:\123\' 下的所有子目录)
let path = mz.FindFile('D:\\123\\*', FILE_ATTRIBUTE.DIRECTORY),
out = ''
;
while (path != '') {
out += path + '\n';
path = mz.FindFile('', FILE_ATTRIBUTE.DIRECTORY);
}
alert(`[${out}]`);
PathFileExists()
// bool PathFileExists(string fileName);
// 判断指定文件或目录的路径是否有效
// @param string fileName 文件名
// @return 成功返回true,失败返回false
var ret = mz.PathFileExists('C:\\123.txt');
GetFileSize()
// int GetFileSize(string fileName);
// 获取文件尺寸,大于4G文件会失去精度
// @param string fileName 文件名
// @return 成功返回文件尺寸,失败返回-1
var ret = mz.GetFileSize('C:\\123.txt');
GetFileSizeEx()
// string GetFileSizeEx(string fileName);
// 获取文件尺寸,支持大文件(该函数返回值为字符串)
// @param string fileName 文件名
// @return 成功返回文件尺寸,失败返回-1
var ret = mz.GetFileSizeEx('C:\\123.txt');
CopyFile()
// bool CopyFile(string ExistingFileName, string NewFileName, bool FailIfExists);
// 将现有文件复制到新文件(不支持目录)。详情参照微软文档
// @param string ExistingFileName 现有文件的名
// @param string NewFileName 新文件的名
// @param bool FailIfExists 存在则不覆盖(默认:false)
// @return 成功返回true,失败返回false
var ret = mz.CopyFile('C:\\1.txt', 'C:\\2.txt');
MoveFile()
// bool MoveFile(string ExistingFileName, string NewFileName, bool FailIfExists);
// 移动现有文件或目录(包括子文件或目录)。详情参照微软文档
// @param string ExistingFileName 现有文件的名
// @param string NewFileName 新文件的名
// @param bool FailIfExists 存在则不覆盖(默认:false)
// @return 成功返回true,失败返回false
var ret = mz.MoveFile('C:\\1.txt', 'D:\\2.txt');
ReNameFile()
// bool ReNameFile(string ExistingFileName, string NewFileName);
// 更改现有文件或目录名称,如果新文件名父路径变更将会执行移动操作
// @param string ExistingFileName 现有文件的名(完整路径)
// @param string NewFileName 新文件的名(完整路径)
// @return 成功返回true,失败返回false
var ret = mz.ReNameFile('C:\\1.txt', 'C:\\2.txt');
DeleteFile()
// bool DeleteFile(string FileName);
// 删除文件(不支持目录)。详情参照微软文档
// @param string FileName 要删除的文件的名
// @return 成功返回true,失败返回false
var ret = mz.DeleteFile('C:\\1.txt');
CreateDirectory()
// bool CreateDirectory(string PathName);
// 创建目录(不支持多级创建)。详情参照微软文档
// @param string PathName 要创建的目录的路径
// @return 成功返回true,失败返回false
var ret = mz.CreateDirectory('C:\\123');
CreateDirectoryEX2()
// bool CreateDirectoryEX2(string PathName);
// 创建多级目录
// @param string PathName 要创建的目录的路径(字符串最大长度为248)
// @return 成功返回true,失败返回false
var ret = mz.CreateDirectoryEX2('C:\\123\\456\\789');
DeleteDirectory()
// bool DeleteDirectory(string PathName);
// 删除目录(同时删除子文件或子目录)
// @param string PathName 要删除的目录的路径
// @return 成功返回true,失败返回false
var ret = mz.DeleteDirectory('C:\\123');
PathIsDirectory()
// bool PathIsDirectory(string PathName);
// 验证路径是否为有效目录。详情参照微软文档
// @param string PathName 目录路径
// @return 成功返回true,失败返回false
var ret = mz.PathIsDirectory('C:\\123');
PathIsDirectoryEmpty()
// bool PathIsDirectoryEmpty(string PathName);
// 确定指定的路径是否为空目录(目录不存在也会返回false)。详情参照微软文档
// @param string PathName 目录路径
// @return 成功返回true,失败返回false
var ret = mz.PathIsDirectoryEmpty('C:\\123');
GetCurrentDirectory()
// string GetCurrentDirectory();
// 获取当前目录(Maye Lite的目录)
// @return 成功返回当前目录(如 C:\123\)
var ret = mz.GetCurrentDirectory();
输入与显示
MsgBox()
// void MsgBox(string msg, string title);
// 显示一个消息框
// @param string msg 消息框内容
// @param string title 消息框标题
mz.MsgBox('msg');
Confirm()
// bool Confirm(string msg, string title);
// 显示一个确认框
// @param string msg 确认框内容
// @param string title 确认框标题
// @return 点击Yes按钮返回true,否则返回false
var ret = mz.Confirm('msg');
InputBox()
// object InputBox(string initialText, string title);
// 显示一个确认框
// @param string initialText 输入框初始字符串
// @param string title 输入框标题
// @return object{
// code: -1, 执行返回代码,-1表示取消输入,1表示确认输入
// text: '' 输入的字符串
// }
var ret = mz.InputBox();
InputBoxEx()
// object InputBoxEx(string initialText, string title, string Msg, int InputMode, bool MultiLineEdit, int MsgHeight, string btnTextOK, string btnTextCancel, int hWnd);
// 显示一个确认框
// @param string initialText 输入框初始字符串
// @param string title 输入框标题
// @param string Msg 提示信息,如果提示信息太长或行数过多,可通过设置MsgHeight来保证全部显示。
// @param int InputMode 输入方式,参数值可以为以下值: 1、输入文本; 2、输入整数; 3、输入小数(未实现); 4、输入密码。
// @param bool MultiLineEdit 是否使用多行编辑框
// @param int MsgHeight 提示信息高度,默认:45
// @param string btnTextOK 确认按钮标题,默认:确认输入(&O)
// @param string btnTextCancel 取消按钮标题,默认:取消(&C)
// @param int hWnd 父窗口句柄
// @return object{
// code: -1, 执行返回代码,-1表示取消输入,1表示确认输入
// text: '' 输入的字符串
// }
var ret = mz.InputBoxEx('初始字符', '标题', '提示信息', NULL, true, 25, '输入(&O)', '取消(&C)', NULL);
HTML窗口(仅多进程生效)
调用
sf.Create()
命令创建窗口后才可调用其他sf.***()
命令
如果窗口被关闭将立即结束脚本进程。
sf.Create()
// int sf.Create(object val);
// 创建一个窗口,窗口创建后为隐藏状态,需调用 sf.Show() 显示。(该命令限制创建一次)
// 参数值必须与类型完全相等,否则返回-4(参数类型不正确)
// @param object val {
// html: '', // [string] 默认HTML(body内,后续可通过DOM随意建立)
// isUI: false, // [bool] 是否加载UI库,包含 jQuery(3.5.1),ZUI(1.10.0-标准版)
// isTransparent: false, // [bool] 是否为透明窗口
// isTop: false, // [bool] 是否置顶
// IsKillFocuHide: false, // [bool] 是否失去焦点后隐藏
// isMaxBtn: true, // [bool] 是否显示最大化按钮(不支持透明窗口)
// isMinBtn: true, // [bool] 是否显示最小化按钮(不支持透明窗口)
// isSizingBorder: true, // [bool] 是否为可调边框
// isAppWindow: true, // [bool] 是否在任务栏显示
// isDrag: false, // [bool] 是否接受拖放(需自行处理drop,dragleave,dragover,dragenter等事件)
// cx: 400, // [int] 窗口宽度
// cy: 300, // [int] 窗口高度
// x: -1, // [int] 窗口左边 (xy 均为-1则窗口居中)
// y: -1, // [int] 窗口顶边
// style: 0, // [int] 窗口附加style
// styleEx: 0, // [int] 窗口附加styleEx
// }
// @return 成功返回窗口句柄,失败返回错误代码(小于0)
var ret = mz.sf.Create({ html: '<b>test</b>', isTop: true });
sf.Show()
// int sf.Show(bool isShow);
// 显示或隐藏已创建窗口
// @param bool isShow 是否显示已创建窗口
// @return 成功返回值大于0,失败返回错误代码(小于0)
var ret = mz.sf.Show(true);
sf.GetHWnd()
// int sf.GetHWnd();
// 获取窗口句柄
// @return 成功返回窗口句柄,失败返回错误代码(小于0)
var ret = mz.sf.GetHWnd();
sf.Movevent()
// int sf.Movevent();
// 移动事件
// @return 成功返回值大于0,失败返回错误代码(小于0)
var ret = mz.sf.Show();
// 按下移动
mz.sf.Create('<button type="button" onmousedown="mz.sf.Movevent();">按下移动</button><style>body{background-color: #fff;}</style>', true);
mz.sf.Show(true);
sf.Move()
// dynamic sf.Move(dynamic pt);
// 获取或设置窗口位置。
// @param dynamic pt 如果参数值为 POINT 则设置窗口位置,空白则获取窗口位置
// @return 成功返回当前位置类型为POINT,失败返回错误代码(小于0)
var ret = mz.sf.Move({ x: 100, y: 300 });
// 获取窗口位置
var pt = mz.sf.Move();
// 设置窗口位置
var pt = mz.sf.Move({ y: 150 });
sf.Size()
// dynamic sf.Size(dynamic size);
// 获取或设置窗口尺寸。
// @param dynamic size 如果参数值为 SIZE 则设置窗口尺寸,空白则获取窗口尺寸
// @return 成功返回当前尺寸类型为SIZE,失败返回错误代码(小于0)
var ret = mz.sf.Size({ cx: 100, cy: 300 });
// 获取窗口尺寸
var size = mz.sf.Size();
// 设置窗口尺寸
var size = mz.sf.Size({ cy: 150 });
sf.SetWindowText()
// int sf.SetWindowText(string str);
// 设置窗口标题,仅非透明窗口生效
// @param string str 新标题
// @return 成功返回true,否则返回false
var ret = mz.sf.SetWindowText('new title');
sf.SetFocus()
// int sf.SetFocus();
// 获取焦点
// @return 成功返回true,否则返回false
var ret = mz.sf.SetFocus();
更多功能陆续添加中….
/*
TODO:
注册表
配置项
内存读写搜索
*/
5 条评论
var keepPressing = true;
// 当按下P键的时候,设置变量为false,退出循环
mz.IsKeyDown(VK.P, function() {
keepPressing = false;
});
// 循环模拟按下和释放1键,直到变量为false
while (keepPressing) {
mz.SendVKeyDown(VK.D1);
mz.Delay(500);
// 可以根据需要调整延时时间
mz.SendVKeyUp(VK.D1);
}
// 退出脚本
mz.exit();
请教一下这段代码哪里有问题,按P键没法终止循环
var keepPressing;
// 循环模拟按下和释放1键
while (true) {
// 检查 P 键的状态,并给 keepPressing 赋值
keepPressing = mz.IsKeyDown(VK.P);
// 如果 keepPressing 为 true,退出循环
if (keepPressing) break;
// 模拟按下1键
mz.SendVKeyDown(VK.D1);
// 延迟500毫秒
mz.Delay(500);
// 可以根据需要调整延时时间
// 模拟释放1键
mz.SendVKeyUp(VK.D1);
这样就行了吧,主要还是检测按P键不是在循环中了。
另外还想实现召唤窗口的功能,应该也时能实现的吧,检测进程不存在就打开进程,存在没有显示就显示窗口