|
|
楼主 |
发表于 2026-5-21 15:47:32
|
显示全部楼层
最小化自身后区域截屏
还是消息暂停时鼠标指定左上角、右下角坐标
- function 最小化自身后截取屏幕部分图像放入剪贴板测试(){
- console.clear();
- //一、最小化自身
- let 自身窗口句柄=获取活动窗口句柄();
- console.log("自身窗口句柄:"+自身窗口句柄);
- 窗口最小化(自身窗口句柄);
-
- //二、获取全屏架图纸
- let 屏幕句柄=0,屏幕坐标尺寸=获取屏幕坐标尺寸();
- console.log("屏幕像素尺寸:("+屏幕坐标尺寸[2]+","+屏幕坐标尺寸[3]+")");
- let 全屏架图纸句柄=获取屏幕架图纸();
- console.log("全屏幕框架图纸句柄:"+全屏架图纸句柄);
-
- //三、指定截取坐标尺寸,裁剪得部分图纸
- let 裁剪坐标尺寸=消息框获取区域坐标(); //左上右下
- let 图纸对象句柄=框架图纸裁剪转图纸(全屏架图纸句柄,裁剪坐标尺寸);
- //四、图纸转入剪贴板
- 图纸放入剪贴板(图纸对象句柄);
-
- //五、恢复窗口显示
- let 恢复结果=恢复窗口(自身窗口句柄);
- console.log("恢复结果:"+恢复结果);
- }
- function 获取活动窗口句柄(){ //进程所在自身窗口
- const 执行宏调用=ExecuteExcel4Macro;
- let 自身窗口句柄=执行宏调用(`CALL("User32","GetActiveWindow","J")`);
- return 自身窗口句柄;
- }
- function 窗口最小化(窗口句柄){let 激活最小化=2;return 显示窗口(窗口句柄,激活最小化);}
- function 恢复窗口(窗口句柄){let 恢复=9;return 显示窗口(窗口句柄,恢复);}
- function 显示窗口(窗口句柄,显示标识){ //普通显示=1,显示=5,激活最小化=2,最小化=6,恢复=9;
- const 执行宏调用=ExecuteExcel4Macro;
- let 显示结果=执行宏调用(`CALL("User32","ShowWindow","AJJ",${窗口句柄},${显示标识})`);
- return 显示结果;
- }
- function 消息框获取区域坐标(){ //返回左上右下坐标数组
- console.clear();
- let 左上结果=确定消息对话框("鼠标指针定位","移动鼠标指针到待截取区域 左上角 后,按 回车 或 空格 以确定。"); //标题,内容
- console.log("左上点击结果"+左上结果);
- let 左上鼠标指针坐标=获取鼠标位置(); //===调用函数===//
- let 左上水平=左上鼠标指针坐标[0],左上垂直=左上鼠标指针坐标[1];
- console.log("左上鼠标位置:("+左上水平+","+左上垂直+")");
- let 右下结果=确定消息对话框("鼠标指针定位","移动鼠标指针到待截取区域 右下角 后,按 回车 或 空格 以确定。"); //标题,内容
- console.log("右下点击结果"+右下结果);
- let 右下鼠标指针坐标=获取鼠标位置(); //===调用函数===//
- let 右下水平=右下鼠标指针坐标[0],右下垂直=右下鼠标指针坐标[1];
- console.log("右下鼠标位置:("+右下水平+","+右下垂直+")");
- return [左上水平,左上垂直,右下水平,右下垂直];
- }
- function 获取鼠标位置(){ //屏幕左上角开始,向右为x,向下为y
- const 执行宏调用=ExecuteExcel4Macro;
- let 坐标数据=执行宏调用(`CALL("User32","GetCursorPos","1E",0)`);
- const 缓冲区=new ArrayBuffer(8); //8字节对应64位
- const 数据操作=new DataView(缓冲区); //操作对象
- 数据操作.setFloat64(0,坐标数据); //(操作)写入64位数
- let 坐标=[];
- 坐标[0]=数据操作.getInt32(4); //取32位坐标x
- 坐标[1]=数据操作.getInt32(0); //取32位坐标y
- return 坐标; //返回坐标数组
- }
- function 确定消息对话框(消息标题,消息内容){return 消息对话框(0,消息内容,消息标题,0);}
- function 消息对话框(窗口句柄,消息内容,消息标题,图标按钮标志){
- const 执行宏调用=ExecuteExcel4Macro;
- let 点击结果=执行宏调用(`CALL("User32","MessageBoxA","JJFFJ",${窗口句柄},"${消息内容}","${消息标题}",${图标按钮标志})`);
- return 点击结果; //确定1 取消2 是6 否7 中止3 重试4 忽略5 再试一次10 继续11
- }
- function 框架图纸裁剪转图纸(框架图纸句柄,裁剪坐标尺寸数组){ //返回图纸句柄
- //框架图纸及尺寸 //参数
- console.log("框架图纸句柄:"+框架图纸句柄);
- let 切起始左=切横左=裁剪坐标尺寸数组[0],切起始上=切纵上=裁剪坐标尺寸数组[1],切横右=裁剪坐标尺寸数组[2],切纵下=裁剪坐标尺寸数组[3];
- let 切图像宽=切横右-切横左,切图像高=切纵下-切纵上;
- console.log("截图像宽高:("+切图像宽+","+切图像高+")");
-
- //创建(抬出)桌台和(取出)空白纸张
- let 印台图纸句柄=抽取内照框图纸(框架图纸句柄);
- if(印台图纸句柄){console.log("内台图纸创建成功!"+印台图纸句柄);}else{console.log("内台图纸创建失败。");}
- let 图纸对象句柄=抽取内照空白纸(框架图纸句柄,切图像宽,切图像高); //最后图像存于图纸对象
- if(图纸对象句柄){console.log("创建位图成功!"+图纸对象句柄);}else{console.log("创建位图失败。");}
-
- //台面换上新纸,屏幕图景(拓印)复制到图纸上 //图随纸走
- let 原图纸对象=更换纸笔(印台图纸句柄,图纸对象句柄);
- if(原图纸对象){console.log("成功固定纸张!新:"+图纸对象句柄+" 旧:"+原图纸对象);}else{console.log("固定纸张失败。");}
- //let 拓印=0xCC0020;
- let 部分拓印结果=图纸部分拓印(印台图纸句柄,切图像宽,切图像高,框架图纸句柄,切起始左,切起始上); //九参
- //let 转印结果=图纸转印(印台图纸句柄,图像宽,图像高,框架图纸句柄); //十一参
- if(部分拓印结果){console.log("部分拓印成功!"+部分拓印结果);}else{console.log("部分拓印失败。");}
-
- //清理(撤下)画桌和释放(忘记)全屏图景
- let 取下画纸=更换纸笔(印台图纸句柄,原图纸对象); //释放前操作、或删除前操作
- if(取下画纸){console.log("成功取下画纸!取下:"+取下画纸+" 替换:"+原图纸对象);}else{console.log("取下画纸失败。");}
- let 收纸结果=收起纸笔(原图纸对象);
- if(收纸结果){console.log("对象删除成功!"+收纸结果);}else{console.log("对象删除失败。");}
- let 收内框纸结果=收起内照框图纸(印台图纸句柄); //此为错误结果:0x800A07DF=-2146826273
- if(收内框纸结果){console.log("删除成功!"+收内框纸结果);}else{console.log("删除失败。");}
- //let 释放画桌=放下框架纸(印台图纸句柄);
- //if(释放画桌){console.log("释放画桌成功!"+释放画桌);}else{console.log("\t释放画桌失败。");}
- let 释放结果=放下框架纸(框架图纸句柄); //参数清理
- if(释放结果){console.log("释放成功!"+释放结果);}else{console.log("释放失败。");}
-
- //返回(卷起后用)图纸对象
- return 图纸对象句柄;
- }
- function 图纸放入剪贴板(图纸对象句柄){
- //新图转到剪贴板
- 打开剪贴板();清空剪贴板();
- let 位图数据格式=2;
- 设置剪贴板(位图数据格式,图纸对象句柄); //?使用拓印的新白纸句柄会是全黑色
- //设置剪贴板(位图格式,图纸对象句柄);
- 关闭剪贴板();
- }
- function 获取屏幕坐标尺寸(){ //返回宽高数组[屏幕像素宽,屏幕像素高]
- const 执行宏调用=ExecuteExcel4Macro;
- let 屏幕宽度=0,屏幕高度=1;
- let 屏幕像素宽度=获取系统尺寸(屏幕宽度),屏幕像素高度=获取系统尺寸(屏幕高度);
- return [0,0,屏幕像素宽度,屏幕像素高度];
- }
- function 获取系统尺寸(名称标识){
- const 执行宏调用=ExecuteExcel4Macro;
- let 获取尺寸=执行宏调用(`CALL("User32","GetSystemMetrics","JJ",${名称标识})`);
- return 获取尺寸;
- }
- function 获取屏幕架图纸(){return 取架图纸(0);} //屏幕hDC
- function 取架图纸(窗口句柄){ //返回框架图纸句柄
- const 执行宏调用=ExecuteExcel4Macro; //GetDC后ReleaseDC
- let 框架图纸=执行宏调用(`CALL("User32","GetDC","JJ",${窗口句柄})`); //窗口工作区hDC
- return 框架图纸;
- }
- function 获取屏幕框图纸(){return 取框图纸(0);} //主屏幕hDC
- function 取框图纸(窗口句柄){ //返回框架图纸句柄
- const 执行宏调用=ExecuteExcel4Macro;
- let 框架图纸=执行宏调用(`CALL("User32","GetWindowDC","JJ",${窗口句柄})`); //窗口hDC
- return 框架图纸;
- }
- function 放下框架纸(框架图纸句柄){
- const 执行宏调用=ExecuteExcel4Macro;
- let 释放结果=执行宏调用(`CALL("User32","ReleaseDC","JJJ",0,${框架图纸句柄})`);
- return 释放结果; //成功1
- }
- function 抽取内照框图纸(参照框架图纸句柄){ //返回内存框架图纸句柄
- const 执行宏调用=ExecuteExcel4Macro; //Gdi32.dll //CreateCompatibleDC后DeleteDC
- let 内存框架图纸=执行宏调用(`CALL("Gdi32","CreateCompatibleDC","JJ",${参照框架图纸句柄})`);
- return 内存框架图纸;
- }
- function 收起内照框图纸(内存框架图纸句柄){
- const 执行宏调用=ExecuteExcel4Macro;
- let 回收结果=执行宏调用(`CALL("Gdi32","DeleteDC","AJ",${内存框架图纸句柄})`);
- return 回收结果; //成功true
- }
- function 取空白纸(纸宽,纸高){ //返回空白图纸句柄
- const 执行宏调用=ExecuteExcel4Macro; //CreateBitmap后DeleteObject
- let 新空白纸句柄=执行宏调用(`CALL("Gdi32","CreateBitmap","JJJJJJ",${纸宽},${纸高},1,32,0)`);
- return 新空白纸句柄; //if(新空白纸句柄){console.log("取空白纸成功!");}else{console.log("取空白纸失败。");}
- }
- function 抽取内照空白纸(参照框架图纸句柄,纸宽,纸高){ //返回内存空白纸句柄
- const 执行宏调用=ExecuteExcel4Macro; //CreateCompatibleBitmap后DeleteObject
- let 内存空白纸句柄=执行宏调用(`CALL("Gdi32","CreateCompatibleBitmap","JJJJ",${参照框架图纸句柄},${纸宽},${纸高})`);
- return 内存空白纸句柄;
- }
- function 更换纸笔(框架图纸句柄,新纸笔对象句柄){ //返回原纸笔对象句柄
- const 执行宏调用=ExecuteExcel4Macro;
- let 旧纸笔对象句柄=执行宏调用(`CALL("Gdi32","SelectObject","JJJ",${框架图纸句柄},${新纸笔对象句柄})`);
- return 旧纸笔对象句柄;
- }
- function 收起纸笔(纸笔对象句柄){
- const 执行宏调用=ExecuteExcel4Macro;
- let 收回结果=执行宏调用(`CALL("Gdi32","DeleteObject","AJ",${纸笔对象句柄})`);
- return 收回结果; //成功true
- }
- function 图纸拓印(拓台图纸句柄,图纸宽度,图纸高度,印架图纸句柄){let 拓印=0xCC0020;let 拓印结果=图纸线描(拓台图纸句柄,0,0,图纸宽度,图纸高度,印架图纸句柄,0,0,拓印);return 拓印结果;}
- function 图纸部分拓印(拓台图纸句柄,图纸宽度,图纸高度,印架图纸句柄,图纸起始水平,图纸起始垂直){let 拓印=0xCC0020;let 部分拓印结果=图纸线描(拓台图纸句柄,0,0,图纸宽度,图纸高度,印架图纸句柄,图纸起始水平,图纸起始垂直,拓印);return 部分拓印结果;}
- function 图纸线描(桌台图纸句柄,白纸起始水平,白纸起始垂直,描宽,描高,架板图纸句柄,图纸起始水平,图纸起始垂直,描手法){
- const 执行宏调用=ExecuteExcel4Macro; //框架印向桌台 //动作为拓印
- let 线描结果=执行宏调用(`CALL("Gdi32","BitBlt","AJJJJJJJJJ",${桌台图纸句柄},${白纸起始水平},${白纸起始垂直},${描宽},${描高},${架板图纸句柄},${图纸起始水平},${图纸起始垂直},${描手法})`);
- return 线描结果; //成功true
- }
- function 图纸转印(拓台图纸句柄,图纸宽度,图纸高度,印架图纸句柄){let 转印=0xCC0020;let 转印结果=图纸涂绘(拓台图纸句柄,0,0,图纸宽度,图纸高度,印架图纸句柄,0,0,图纸宽度,图纸高度,转印);return 转印结果;}
- function 图纸涂绘(桌台图纸句柄,白纸起始水平,白纸起始垂直,绘宽,绘高,架板图纸句柄,图纸起始水平,图纸起始垂直,图纸宽度,图纸高度,绘手法){
- const 执行宏调用=ExecuteExcel4Macro,转印=0xCC0020; //框架印向桌台 //动作转印同拓印
- let 涂绘结果=执行宏调用(`CALL("Gdi32","StretchBlt","AJJJJJJJJJJJ",${桌台图纸句柄},${白纸起始水平},${白纸起始垂直},${绘宽},${绘高},${架板图纸句柄},${图纸起始水平},${图纸起始垂直},${图纸宽度},${图纸高度},${绘手法})`);
- return 涂绘结果; //成功true
- }
- function 打开剪贴板(){
- const 执行宏调用=ExecuteExcel4Macro;
- let 打开结果=执行宏调用(`CALL("User32","OpenClipboard","AJ",0)`);
- return 打开结果; //if(打开结果){console.log("成功打开剪贴板!");}else{console.log("剪贴板打开失败。");}
- }
- function 清空剪贴板(){
- const 执行宏调用=ExecuteExcel4Macro;
- let 清空结果=执行宏调用(`CALL("User32","EmptyClipboard","A")`);
- return 清空结果; //if(清空结果){console.log("成功清空剪贴板!");}else{console.log("剪贴板清空失败。");}
- }
- function 设置剪贴板(数据格式,数据句柄){
- const 执行宏调用=ExecuteExcel4Macro; //数据格式:位图2 文本1 统一文本0xD=13
- let 数据内存句柄=执行宏调用(`CALL("User32","SetClipboardData","JJJ",${数据格式},${数据句柄})`);
- return 数据内存句柄; //if(数据内存句柄){console.log("成功设置剪贴板!");}else{console.log("剪贴板设置失败。");}
- }
- function 关闭剪贴板(){
- const 执行宏调用=ExecuteExcel4Macro;
- let 关闭结果=执行宏调用(`CALL("User32","CloseClipboard","A")`);
- return 关闭结果; //if(关闭结果){console.log("成功关闭剪贴板!");}else{console.log("剪贴板关闭失败。");}
- }
复制代码 |
评分
-
查看全部评分
|