无忧启动论坛

标题: 有了这款简易对话框组件,批处理不用再面向黑框了 [打印本页]

作者: CodeHz    时间: 2020-11-17 20:47
标题: 有了这款简易对话框组件,批处理不用再面向黑框了
本帖最后由 CodeHz 于 2020-11-18 22:40 编辑

基本上就是用了 TaskDialog 这个 API,用的是win7以上都有的 comctl32 库(大概pe不会精简这个吧)
使用场景:
制作PE的时候运行一些脚本,其中包含一些交互选项,但是不想运行一个复杂的vbs或者开发新的界面,这个东西就可以配上用场了
先上截图
标准信息框
condlg /wintitle 测试 /title 这是消息框 /icon Shield msgbox 这是内容



自定义选项的信息框
可以从 %errorlevel% 中获得被选择的选项(数字可以看 https://docs.microsoft.com/en-us ... commctrl-taskdialog
condlg /wintitle 测试 /title 这是消息框 /icon Shield msgbox /button retry /button cancel 这是内容



选择框
可以从 %errorlevel% 中获得被选择的选项(0 - 关闭, 1,2,3...就是具体的选项)
condlg /title 选择器 /wintitle 演示 /icon Information select /option "选项 A" /option "选项 B" 这是说明



等待进度条
(同样可以指定显示的按钮,这里就不演示了)
condlg /wintitle 测试 /title 这是进度框 /icon Shield wait /timeout 5000 5秒后继续



可以跨进程控制的进度指示框
这个就比较复杂了,看图吧
其中 pipe 必须为 windows nt 的路径格式,也就是 \\.\Pipe\xxxx (理论上可以跨机,但是我没测试,格式是 \\<ip or hostname>\Pipe\xxxx )



具体参数解释
有如下通用参数 (子命令为rpc时无效)

参数格式是
condlg <通用参数> <子命令> <子命令参数> <可选的的内容以参数形式提供,不可以/开头>
然后子命令上面大概都介绍过了,这里重点说说没介绍的marquee 和 rpc命令
marquee子命令

rpc命令形式
condlg rpc <rpc参数> <rpc子命令> <rpc子命令参数>
rpc参数就是
它也有几个子命令,分别是 Ping|Close|SetWinTitle|SetTitle|SetContent|SetProgress|SetRange|SetMarquee|WaitButton

参数值和子命令解析规则:
大小写敏感,但是允许以 驼峰命名规则 和 下划线命名规则两种写法,
具体来说是 SetRange 和 set_range 合法,但是 Set_range 非法。

声明:
这是我业余时间做的一个小程序,因为复杂度还是有一点的,可能含有较多错误(甚至可能在目标设备上无法运行),希望大家使用之前先测试完备。
源码地址: https://github.com/codehz/condlg

下载压缩包(108kb)里会附带示例批处理,32位和64位
(另外还会附带一个 conapi.exe 用于隐藏/显示控制台,设置和获取标题,可以通过 help 子命令看帮助)
更新:
修复了select选项数量为2时会把关闭窗口也映射进去的问题。(同时增加了/cancellable选项指示是否显示关闭选项)
新特性,自动识别pipe路径,现在不以\开头时会自动使用 \\.\Pipe\ 作为前缀,感谢 @slore 的建议
另外在压缩包内增加了一个重要提示,就下面那条
更新 x2:增加了超链接解析,(只在content部分有效,语法是 <A HREF="XXXX">TEXT</A> 或者 [TEXT](XXXX) 两种格式)


[hide=d30] rel.7z (108.48 KB, 下载次数: 287) [/hide]





作者: ggmm888    时间: 2020-11-17 20:54
功能强大方便使用

作者: 826773297    时间: 2020-11-17 21:00
必须要顶
作者: slore    时间: 2020-11-17 21:01
rpc,管道指定,太程序员了。
普通用户用,不需要知道这些,你可以定一个name或者id,内部自己拼接。参数是对应功能的,而不是根据代码原理来设定。
作者: CodeHz    时间: 2020-11-17 21:04
slore 发表于 2020-11-17 21:01
rpc,管道指定,太程序员了。
普通用户用,不需要知道这些,你可以定一个name或者id,内部自己拼接。参数 ...

其实是为了连接远程服务器用的(虽然有没有这个需求另说)
其实我这还有个情况,就是我最近做的windows容器项目可以重新映射NT内核对象的路径,刚好也能用这个来测试(
作者: yamingw    时间: 2020-11-17 21:09
好东西必须的顶
作者: ttt0001    时间: 2020-11-17 21:09
看上去非常不错,感谢楼主无私分享!
作者: nishijiji1    时间: 2020-11-17 21:11
神马万一
作者: 834772509    时间: 2020-11-17 21:11
支持
作者: freesoft00    时间: 2020-11-17 21:11
感谢提供
作者: rstart    时间: 2020-11-17 21:14
来看看
作者: cccaaaa123    时间: 2020-11-17 21:18
学习一下
作者: 永远的大象    时间: 2020-11-17 21:45
这个是批处理可以实现的?那挺好
作者: wld    时间: 2020-11-17 21:52
好东西,顶一下,谢谢了
作者: 双响炮    时间: 2020-11-17 21:52
等的就是这个,马上学习。
作者: wxgwxg    时间: 2020-11-17 21:54
本帖最后由 wxgwxg 于 2020-11-17 21:57 编辑

说实话,我用utf8的bat文件就一直有乱码,用ansi没有问题。

作者: dnine999    时间: 2020-11-17 22:00
必须要顶
作者: 都市浪子666    时间: 2020-11-17 22:22
看起来很不错,。谢谢分享
作者: tedrick    时间: 2020-11-17 22:39
很强大~~API在WIN10上一致吧?
作者: mooning    时间: 2020-11-17 22:50
看看。
作者: slore    时间: 2020-11-17 23:05
直接跟名字简单多了。

不过放一个 “重要说明.txt”,为什么不直接把批处理给改成ANSI打包。。。
(你又不是分开发布的,批处理在一起啊。)

不改的话,progress不显示对话框,其他的是乱码。

Windows的批处理默认要ANSI。

如果非要用UTF8的话,得改下代码页。

@echo off
chcp 65001

作者: CodeHz    时间: 2020-11-17 23:16
slore 发表于 2020-11-17 23:05
直接跟名字简单多了。

不过放一个 “重要说明.txt”,为什么不直接把批处理给改成ANSI打包。。。

因为我本地的ANSI就是UTF-8
作者: 双响炮    时间: 2020-11-17 23:17
本帖最后由 双响炮 于 2020-11-17 23:50 编辑

持久对话框太符合我现在的需求了。但几个子命令不能同时使用吗?比如我想同时修改标题和内容。SetTitle起作用但SetContent不行
作者: CodeHz    时间: 2020-11-17 23:22
双响炮 发表于 2020-11-17 23:17
持久对话框太符合我现在的需求了。但几个子命令不能同时使用吗?不如我想同时修改标题和内容。SetTitle起作 ...

你可以分开写的
作者: m68    时间: 2020-11-17 23:48
谢谢楼主分享!
作者: chshrm    时间: 2020-11-17 23:58
告别黑框?!
作者: 双响炮    时间: 2020-11-18 00:03
本帖最后由 双响炮 于 2020-11-18 00:12 编辑
CodeHz 发表于 2020-11-17 23:22
你可以分开写的

这样写对吗?就是分两步修改标题和内容?
  1. @echo offre
  2. conapi title /value 设置标题
  3. conapi show /mode hide
  4. start /b condlg /title 友情提示! wintitle 一键恢复 /icon Information marquee /pipe snai9 /cascade 请不要关闭对话框 进度到100%%后会自动重启
  5. snapshot.exe
  6. condlg rpc /pipe snai9 set_title 恭喜!
  7. condlg rpc /pipe snai9 set_content 恢复成功,2秒后重启
  8. timeout 2
  9. condlg rpc /pipe snai9 close
复制代码




作者: chishingchan    时间: 2020-11-18 00:14
之前有用过类似的这些命令行小工具,只是贪新鲜,后来不了了之!
作者: CodeHz    时间: 2020-11-18 00:49
双响炮 发表于 2020-11-18 00:03
这样写对吗?就是分两步修改标题和内容?

对是对,不过为啥不直接关闭然后开一个新的wait对话框呢。。 反正都是最后一步了
作者: 双响炮    时间: 2020-11-18 01:01
CodeHz 发表于 2020-11-18 00:49
对是对,不过为啥不直接关闭然后开一个新的wait对话框呢。。 反正都是最后一步了

正自个儿闷着瞎琢磨要把rpc和wait放在一起用呢,就想最后2秒的进度条,怎么也不行,你这真是一语惊醒梦中人呀!
作者: 双响炮    时间: 2020-11-18 01:15
这样写果然可以了,问题又来了,wait能不能不显示确定按钮?或者有没有取消按钮?万一不想重启还能返回。
  1. @echo offre
  2. conapi title /value 设置标题
  3. conapi show
  4. start /b condlg /title 友情提示! /wintitle 一键恢复 /icon Information marquee /pipe snai9 /cascade 请不要关闭对话框 进度到100%%后会自动重启
  5. snapshot.exe
  6. condlg rpc /pipe snai9 close
  7. condlg /title 恭喜 /wintitle 一键恢复 /icon Information wait /timeout 2000 "恢复成功" "2秒后重启 " "........"
复制代码

作者: CodeHz    时间: 2020-11-18 01:42
双响炮 发表于 2020-11-18 01:15
这样写果然可以了,问题又来了,wait能不能不显示确定按钮?或者有没有取消按钮?万一不想重启还能返回。

可以,和msgbox一样可以用/button指定按钮,然后用%errorlevel%判断,具体数值你可以先试验一下
作者: maghreb    时间: 2020-11-18 06:51
感谢分享
作者: 苏州本是    时间: 2020-11-18 07:07
功能强大,值得使用。谢谢分享!
作者: liuzhaoyzz    时间: 2020-11-18 07:20
这个程序很有趣啊!批处理调用居然可以弹出个对话框!windows默认都是ansi编码的啊,为什么要用utf-8编码作为demo?
建议发布demo的时候用ansi编码。

作者: ly2389    时间: 2020-11-18 07:54
这个要支持!!!!!!!!!!!!!!!!!
作者: CodeHz    时间: 2020-11-18 08:05
liuzhaoyzz 发表于 2020-11-18 07:20
这个程序很有趣啊!批处理调用居然可以弹出个对话框!windows默认都是ansi编码的啊,为什么要用utf-8编码作 ...

Win10有个使用utf8选项啊。。。
作者: liuzhaoyzz    时间: 2020-11-18 08:17
CodeHz 发表于 2020-11-18 08:05
Win10有个使用utf8选项啊。。。

这个选项从来没有注意过,也从来没想过去修改,大家的cmd好像都是用的ansi编码吧,改了之后,一般的批处理运行都会出问题。
作者: 极冰凌心    时间: 2020-11-18 08:22
6666666666666666
作者: jkj    时间: 2020-11-18 08:35
功能强大,试用一下。
作者: xcajcj    时间: 2020-11-18 08:35

学习一下
作者: 双响炮    时间: 2020-11-18 08:51
CodeHz 发表于 2020-11-18 01:42
可以,和msgbox一样可以用/button指定按钮,然后用%errorlevel%判断,具体数值你可以先试验一下


不好意思,是我没有认真看说明,已弄成功!

作者: yxldh    时间: 2020-11-18 08:52
看着不错 支持一下
作者: lhwjl    时间: 2020-11-18 08:59

必须要顶
作者: 807979023    时间: 2020-11-18 09:12
学习学习
作者: xuexiang    时间: 2020-11-18 09:19
好东西下载看看
作者: sairen139    时间: 2020-11-18 09:28
非常好批处理重要可以弹出提示了有助于批处理的pe应用!
作者: xjshuaishuai    时间: 2020-11-18 09:30
学习了,谢谢分享!
作者: holley2008    时间: 2020-11-18 09:30
好玩,下载试试
作者: nttwqz    时间: 2020-11-18 10:18
好东西,批处理现在可以写的更高大上了
作者: xcajcj    时间: 2020-11-18 10:32
XP系统能用不?
作者: Bluebells    时间: 2020-11-18 10:33
CMD Tools with dialog window
https://www.horstmuc.de/wcon.htm
作者: 窄口牛    时间: 2020-11-18 11:07
搞个时间计算器吧,用于昨天今天明天获取。
作者: artedu    时间: 2020-11-18 11:28
功能强大方便使用
作者: nttwqz    时间: 2020-11-18 12:26
窄口牛 发表于 2020-11-18 11:07
搞个时间计算器吧,用于昨天今天明天获取。

批处理之家有现成的脚本,写这个得数学好。
作者: nttwqz    时间: 2020-11-18 12:27
Bluebells 发表于 2020-11-18 10:33
CMD Tools with dialog window
https://www.horstmuc.de/wcon.htm

好东西
作者: 2013dgyangxf    时间: 2020-11-18 12:43
让我试试~~~~~~~~~
作者: wych12    时间: 2020-11-18 14:00
感谢分享!!!
作者: 双响炮    时间: 2020-11-18 14:02
本帖最后由 双响炮 于 2020-11-18 22:10 编辑

最后是这样写的,勉强能够达到效果,还想请教一下有没有更好的写法
  1. @echo offre
  2. conapi title /value 一键恢复
  3. conapi show
  4. condlg /title 友情提示 /wintitle 一键恢复 /icon Information wait /button no /timeout 5000 "您确定现在马上恢复?" "如欲中止请按  【否】 "
  5. if "%errorlevel%" == "7" (exit) else (
  6. start /b condlg /title 友情提示! /wintitle 一键恢复 /icon Information marquee /pipe snai9 /cascade 请不要关闭对话框 进度到100%%后会自动重启
  7. for %%b in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%b:\windows\explorer.exe set sd=%%b
  8. for %%a in (i h g f e d ) do (
  9.    for /f "delims=" %%i in ('dir /s/a/b/a-d "%%a:\snap\sn.sna" 2^>nul') do (
  10.        %%~dpi\snapshot.exe %%~dpi\sn.sna %sd%: -Gx
  11. )
  12. )
  13. condlg rpc /pipe snai9 close
  14. condlg /title 恭喜 /wintitle 一键恢复 /icon Information wait /timeout 1000 "恢复成功" "即将重启 "
  15. )
  16. exit
复制代码

作者: 双响炮    时间: 2020-11-18 21:23
双响炮 发表于 2020-11-18 14:02
最后是这样写的,勉强能够达到效果,还想计教一下有没有更好的写法

奇怪呀,实际测试居然snapshot.exe的自动恢复界面出不来,把
  1. %%~dpi\snapshot.exe %%~dpi\sn.sna %sd%: -Gx
复制代码
修改成
  1. %%~dpi\snapshot.exe  -Gx
复制代码
仅仅打开snapshot.exe这个软件却又是可以的,到底是哪儿出问题啦?以前同样的批处理带黑框是可以的。
作者: CodeHz    时间: 2020-11-18 22:57
双响炮 发表于 2020-11-18 21:23
奇怪呀,实际测试居然snapshot.exe的自动恢复界面出不来,把修改成仅仅打开snapshot.exe这个软件却又是可 ...

理论上不会影响的,我比较怀疑是哪里打错了(要不你把那个show的那一行用rem吃掉测试下报错信息
作者: 双响炮    时间: 2020-11-18 23:42
CodeHz 发表于 2020-11-18 22:57
理论上不会影响的,我比较怀疑是哪里打错了(要不你把那个show的那一行用rem吃掉测试下报错信息

明天找电脑测试,自己电脑还不敢弄,资料太多,万一成功恢复了咋办刚才把snapshot的官网文档又看了一遍,希望找点什么出来
作者: mengxiangdao    时间: 2020-11-19 09:11
没有黑框 比较好看
作者: liuzhaoyzz    时间: 2020-11-19 15:25
本帖最后由 liuzhaoyzz 于 2020-11-19 15:26 编辑

        在xp的虚拟机里面试了下,似乎不能运行?utf-8双击没有反应,然后我改成了ansi编码,去掉了chcp 65001,还是出错,直接上图。


话说楼主不能做静态编译吗?静态编译应该就可以通杀XP WIN7 8 10了吧。

VXP-2020-11-19-15-23-33.png (24.13 KB, 下载次数: 169)

VXP-2020-11-19-15-23-33.png

作者: CodeHz    时间: 2020-11-19 15:38
本帖最后由 CodeHz 于 2020-11-19 15:41 编辑
liuzhaoyzz 发表于 2020-11-19 15:25
在xp的虚拟机里面试了下,似乎不能运行?utf-8双击没有反应,然后我改成了ansi编码,去掉了chcp 65 ...

显然不只是静态编译的问题,comctl32 6.0 这东西反向移植成本很高,xp用的低版本没有TaskDialog)而且这个错误明显是因为你在32位系统下跑64位的版本

作者: 2010wlm    时间: 2020-11-19 15:39
看起来很好用,有机会试一下
作者: liuzhaoyzz    时间: 2020-11-19 16:41
本帖最后由 liuzhaoyzz 于 2020-11-19 16:47 编辑
CodeHz 发表于 2020-11-19 15:38
显然不只是静态编译的问题,comctl32 6.0 这东西反向移植成本很高,xp用的低版本没有TaskDialog)而且这 ...

      哦,看了下rel目录里面,有32位的exe,有64位的exe。然后我试着把demo.bat里面,conapi换成了conapi32,condlg换成了condlg32,结果也是不行啊。果然不只是静态编译的问题。

  1. @echo off
  2. ::为了兼容UTF-8,实际上你可以直接用ANSI编码
  3. rem chcp 65001
  4. conapi32 title /value 设置标题
  5. condlg32 /title 请稍后 /wintitle 演示 /icon Information wait /timeout 5000 "第 一 行" "第二行" "链接[点我]([url]https://www.google.com[/url])" "接下来控制台将会被隐藏 "
  6. conapi32 show
  7. condlg32 /title 选择器 /wintitle 演示 /icon Information select /cancellable /option "选项 A" /option "选项 B" 这是说明
  8. set res=%errorlevel%
  9. if "%res%"=="1" (
  10.         condlg32 /title 选择 /wintitle 演示 /icon Warning msgbox /button Close "你选择了 A"
  11. ) else if "%res%"=="2" (
  12.         condlg32 /title 选择 /wintitle 演示 /icon Warning msgbox /button Close "你选择了 B"
  13. ) else (
  14.         condlg32 /title 选择 /wintitle 演示 /icon Warning msgbox /button Close "你没有选择"
  15. )
  16. start /b condlg32 /title 这是持久对话框 /wintitle 演示 /icon Warning marquee /pipe demo-dialog /cascade 可以动态修改内容哦(5秒后改变)
  17. timeout 5
  18. condlg32 rpc /pipe demo-dialog set_content 内容修改了(5秒后关闭)
  19. timeout 5
  20. condlg32 rpc /pipe demo-dialog close
复制代码

VXP-2020-11-19-16-37-40.png (24.38 KB, 下载次数: 172)

VXP-2020-11-19-16-37-40.png

VXP-2020-11-19-16-37-25.png (36.23 KB, 下载次数: 184)

VXP-2020-11-19-16-37-25.png

作者: plusv    时间: 2020-11-19 17:28
liuzhaoyzz 发表于 2020-11-19 16:41
哦,看了下rel目录里面,有32位的exe,有64位的exe。然后我试着把demo.bat里面,conapi换成了conap ...

仅有6KB的 ShellExecuteEx 实用程序,可用于绕过wow64,静默运行bat,UAC提权

52F
作者: ilywlm    时间: 2020-11-19 17:37
多谢楼主,我正需要
作者: plusv    时间: 2020-11-19 17:51
1.
回报一个问题,
防毒软件对 ZIG 语言非常敏感.
2.
还有要求 Vista 以上才能运行.




作者: wbs1997    时间: 2020-11-19 18:21

好东西必须的顶
作者: CodeHz    时间: 2020-11-19 18:26
本帖最后由 CodeHz 于 2020-11-19 18:31 编辑
plusv 发表于 2020-11-19 17:51
1.
回报一个问题,
防毒软件对 ZIG 语言非常敏感.

https://www.virustotal.com/gui/f ... 87f16d53b/detection
很显然,非常敏感是站不住脚的。。。72款杀毒只有两个误报,而且根据我测试,好像tm和我加上的CodeHz标签有关系,真就关键字检测呗。。。。
问题2 并不想解决,一来没有测试环境,二来很明显没有收益(我现在所有的设备都没法原生跑win7,更别说xp了(
作者: bfgxp    时间: 2020-11-19 18:42
有意思,这个可以 有
作者: 双响炮    时间: 2020-11-19 20:23
CodeHz 发表于 2020-11-18 22:57
理论上不会影响的,我比较怀疑是哪里打错了(要不你把那个show的那一行用rem吃掉测试下报错信息
  1. for %%b in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%b:\windows\explorer.exe set sd=%%b
复制代码

估计这句有点问题,系统盘和PE启动后的X盘都有explorer.exe,变量%sd%的值先是C,后来又变成X了,我对批处理不精通,不晓得在找到首个explorer.exe后如何跳出循环,希望这篇帖子里有高手看到的话能够给予指点
作者: CodeHz    时间: 2020-11-19 20:43
双响炮 发表于 2020-11-19 20:23
估计这句有点问题,系统盘和PE启动后的X盘都有explorer.exe,变量%sd%的值先是C,后来又变成X了,我对批 ...

hmm,你可以在循环里去掉X盘的(PE是不是都用这个啊(
作者: 双响炮    时间: 2020-11-19 21:01
CodeHz 发表于 2020-11-19 20:43
hmm,你可以在循环里去掉X盘的(PE是不是都用这个啊(

我也是这样想,如果实在搞不好就去掉X,但也有PE不是X的,或者把PE的explorer.exe删除,但别人的PE就不能用了,所以还是想多学点批处理的知识,应当能解决,只是在网上看了下问这个的不多
作者: 双响炮    时间: 2020-11-19 21:40
双响炮 发表于 2020-11-19 20:23
估计这句有点问题,系统盘和PE启动后的X盘都有explorer.exe,变量%sd%的值先是C,后来又变成X了,我对批 ...

感谢slore提供思路,我努力试试,确实水平有限。其实本来最先是为隐藏黑框在您的帖子里请教过的,也得到了耐心的解答,但因为需要给些提示的问题开了一个帖,从而得到了CodeHz的帮助,然后转了一圈又在这里居然同时受到两位大神的指点,真是幸运!
作者: liuzhaoyzz    时间: 2020-11-19 22:52
本帖最后由 liuzhaoyzz 于 2020-11-20 08:36 编辑
CodeHz 发表于 2020-11-19 18:26
https://www.virustotal.com/gui/f ... 87f16d53b/detection
很显然,非常敏感是站不住脚的。。。72款杀 ...

        1.说个有点搞笑的现实问题,viruscan这样的检测没有太大用处,为什么?因为根本不用检测大家都知道没有病毒,那么还检测个啥劲儿呢?国内360安全卫士之类的装机量很高(我自己不用任何杀软,只为重现别人的环境来测试),能顺利通过360这样的流氓检测,才能算数,感觉是不是有点滑稽?没办法,国内就这样,小白太多,给他们解释太费劲,索性程序员能绕开的就绕开,惹不起还躲不起吗。。。https://open.soft.360.cn/report.php
我已向360病毒误杀反馈。

2.可以在虚拟机装个xp,用于测试还是挺方便的,当然是您有兴趣的前提下。


作者: freesoft00    时间: 2020-11-20 00:03
liuzhaoyzz 发表于 2020-11-19 22:52
1.说个有点搞笑的现实问题,viruscan这样的检测没有太大用处,为什么?因为根本不用检测大家都知 ...

有时候你去关闭别人的杀毒软件,有了问题了,他们会说是你给整的有病毒了。
只能百口莫辩了。
作者: plusv    时间: 2020-11-20 01:53
nttwqz 发表于 2020-11-18 12:26
批处理之家有现成的脚本,写这个得数学好。

批处理之家 非我栖息之处,
离开了.
作者: felixatvan    时间: 2020-11-20 03:52
學習學習
作者: 5238869    时间: 2020-11-20 06:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: liuzhaoyzz    时间: 2020-11-20 08:41
freesoft00 发表于 2020-11-20 00:03
有时候你去关闭别人的杀毒软件,有了问题了,他们会说是你给整的有病毒了。
只能百口莫辩了。

程序员们有几个不是对360深恶痛绝的!
作者: tiansw1    时间: 2020-11-20 09:00
这个有意思
作者: 双响炮    时间: 2020-11-21 13:55
  1. show [/mode Hide|ShowNormal|ShowMinimized|ShowMaximized|ShowNoActivate|Show|Minimize|ShowMinimizedNoActivate|ShowNa|Restore|ShowDefault]
复制代码

这些个参数只有几个会用,其它几个能说说怎么用吗?特别是shownoactivate和showna的区别,再就是showminimied和miniize的区别,还有show和restore的区别。
另外就是想问,conapi.exe有UAC提权吗?
作者: wxgx    时间: 2020-11-21 14:05
学习,看看...
作者: plusv    时间: 2020-11-21 14:06
双响炮 发表于 2020-11-21 13:55
这些个参数只有几个会用,其它几个能说说怎么用吗?特别是shownoactivate和showna的区别,再就是showminim ...

https://baike.baidu.com/item/ShowWindow/5279029
作者: slore    时间: 2020-11-21 14:06
本帖最后由 slore 于 2020-11-21 14:09 编辑
双响炮 发表于 2020-11-19 21:40
感谢slore提供思路,我努力试试,确实水平有限。其实本来最先是为隐藏黑框在您的帖子里请教过的,也得到 ...

如果只是要去掉启动PE所在盘,直接获取环境变量中%SystemDrive%或者%windir%,然后从你的C到Z列表替换掉。
隐藏黑框的那个,startnet.cmd里面HideWindow的代码去掉标题就好了。
新版本已经更新了。不过CodeHz的小工具更纯粹。

作者: CodeHz    时间: 2020-11-21 14:12
双响炮 发表于 2020-11-21 13:55
这些个参数只有几个会用,其它几个能说说怎么用吗?特别是shownoactivate和showna的区别,再就是showminim ...

(具体来说就是微软提供了这些选项我就全列出来了。。。它自己的文档就没说清楚,选项之间也没有正交性...
但是大概
ShowNoActivate相比ShowNa是最小化,Na则是只显示不激活,原来最小化还是最小化
restore对应的是minimize和maximize,就是恢复先前最大化或者最小化的窗口
showdefault则是使用程序启动时默认的显示方式

https://docs.microsoft.com/en-us ... -winuser-showwindow

UAC提权不能在当前进程里完成,必须至少开一个新进程(指正常的,不进内核暴力改的方法),安装程序可以点按钮提权的原理是弄了个后台程序,然后把进度反映过来而已,不过PE的时候应该UAC都是关闭的吧。

作者: 双响炮    时间: 2020-11-21 15:00
plusv 发表于 2020-11-21 14:06
https://baike.baidu.com/item/ShowWindow/5279029

谢谢,提供的网址已收藏
作者: 双响炮    时间: 2020-11-21 15:13
slore 发表于 2020-11-21 14:06
如果只是要去掉启动PE所在盘,直接获取环境变量中%SystemDrive%或者%windir%,然后从你的C到Z列表替换掉 ...

没有去年PE所在的盘,按您的思路用goto成功跳出来了,只要C盘有explorer.exe,就确定需要恢复的系统盘是C,再不会往后查找了。现在已测试成功,效果还行。WimBuilder2更新啦?我赶紧过去啦
作者: 双响炮    时间: 2020-11-21 15:19
CodeHz 发表于 2020-11-21 14:12
(具体来说就是微软提供了这些选项我就全列出来了。。。它自己的文档就没说清楚,选项之间也没有正交性.. ...

似乎有点明白了。PE那个已成功了,这里表示感谢。因为我还有个安装PE的批处理,在WIN7里蛮好,但在WIN10里提权还要重启才能行,故而有此一问,不过ShellExecuteEx应该可以吧?
作者: CodeHz    时间: 2020-11-21 15:30
双响炮 发表于 2020-11-21 15:19
似乎有点明白了。PE那个已成功了,这里表示感谢。因为我还有个安装PE的批处理,在WIN7里蛮好,但在WIN10 ...

win7也得开个新的,可能你只是关闭了uac
win10关了uac也需要手动提权(只是没框)所以用shellexecuteex应该可以
作者: 9001    时间: 2020-11-21 16:14
这个有需求的
作者: sairen139    时间: 2020-11-22 08:40
非常好的工具,这样以后批处理基本上能补全和用户交互体验这唯一个短板了!
作者: zhdg    时间: 2020-11-22 15:48
非常好的工具。
作者: cjfcjf111    时间: 2020-11-23 18:21
fgdsffffffffff
作者: helloman    时间: 2020-11-23 21:16
看上去挺实用的,谢谢分享
作者: cchessbd    时间: 2020-11-26 13:05
悄悄好东东啊
作者: hydn    时间: 2020-11-26 13:11
谢谢分享





欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3