找回密码
 加入
搜索
查看: 1013|回复: 17

[系统综合] 命令行窗口在win11下稳定执行

[复制链接]
发表于 2023-4-10 09:54:21 | 显示全部楼层 |阅读模式
本帖最后由 redapple2008 于 2023-4-10 11:58 编辑

如上代码和思路,在win11下测试执行不稳定,有win11系统不能执行,谁帮忙测试一下,在win11上执行看看有没问题或者有更好的解决方案。

上面的sleep太多。对电脑的要求也能达到统一。
 楼主| 发表于 2023-4-10 11:47:25 | 显示全部楼层
zhaoceshi 发表于 2023-4-10 11:16
代码是要实现用管理员账号来安装搜狗输入法吗?

安装软件或者用管理员权限运行程序。两个功能。
 楼主| 发表于 2023-4-10 11:46:45 | 显示全部楼层
zhaoceshi 发表于 2023-4-10 11:34
不能直接使用autoit3自带的runas函数吗?另外有些软件可以查看下是否有静默参数,比如搜狗输入法就可以用 ...

这个自带的函数不好用,效果达不到。
 楼主| 发表于 2023-4-10 11:29:06 | 显示全部楼层
zhaoceshi 发表于 2023-4-10 11:16
代码是要实现用管理员账号来安装搜狗输入法吗?

是,域用户是user权限,有些软件或安装软件需要管理员权限。在dos下用runas最稳定。手动操作没问题。所以想模拟手工操作达到自动化。
Local $UserName = "red" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
Send("#r")
WinWaitActive("[CLASS:#32770]")
Local $flag = ControlSend("", "", "[CLASS:Edit; INSTANCE:1]", "cmd.exe" & "{Enter}")
Sleep(2300)
Local $sdoscommand = "runas /user:" & $UserName & " " & "cmd.exe"
WinActivate("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]")
Local $flag = ControlSend("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]", "", "", $sdoscommand & "{Enter}")
Sleep(1300)
ControlSend("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]", "", "", $PassWord & "{Enter}")
Sleep(300)
WinClose("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]")
Sleep(2300)
If WinExists("[CLASS:ConsoleWindowClass]") Then ControlSend("[CLASS:ConsoleWindowClass]", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}")
If WinExists("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]") Then ControlSend("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}")
Sleep(2300)
WinClose("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]")
WinClose("[CLASS:ConsoleWindowClass]")
发表于 2023-4-10 10:16:41 | 显示全部楼层
WinWaitActive  拆分成  WinWait  、 WinActivate试试
 楼主| 发表于 2023-4-10 10:32:16 | 显示全部楼层
本帖最后由 redapple2008 于 2023-4-10 10:36 编辑
zghwelcome 发表于 2023-4-10 10:16
WinWaitActive  拆分成  WinWait  、 WinActivate试试
Global $class
Local $UserName = "red" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
Send("#r")
WinWaitActive("[CLASS:#32770]")
Local $sdoscommand = "runas /user:" & $UserName & " " & "D:\sogou_pinyin_79c.exe"
Local $flag = ControlSend("", "", "[CLASS:Edit; INSTANCE:1]", $sdoscommand & "{Enter}")
If $flag Then
        Sleep(300)
        If WinExists("[CLASS:ConsoleWindowClass]") Then _dos("[CLASS:ConsoleWindowClass]")
        If WinExists("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]") Then _dos("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]")
EndIf
Func _dos($class)
        WinWait($class)
        WinActive($class)
        $flag = ControlSend($class, "", "", $PassWord & "{Enter}")
        If $flag Then
                Sleep(300)
                WinClose($class)
        Else
                MsgBox(0, "", "")
        EndIf
EndFunc   ;==>_dos
发表于 2023-4-10 11:16:39 | 显示全部楼层
代码是要实现用管理员账号来安装搜狗输入法吗?
发表于 2023-4-10 11:34:32 | 显示全部楼层
redapple2008 发表于 2023-4-10 11:29
是,域用户是user权限,有些软件或安装软件需要管理员权限。在dos下用runas最稳定。手动操作没问题。所以 ...

不能直接使用autoit3自带的runas函数吗?另外有些软件可以查看下是否有静默参数,比如搜狗输入法就可以用/s来达到静默安装的效果。
RunAs("用户名", "域", "密码", 注册标志, "程序"[, "工作目录"[, 显示标志[, 选项标志]]])


发表于 2023-4-10 11:57:34 | 显示全部楼层
redapple2008 发表于 2023-4-10 11:47
安装软件或者用管理员权限运行程序。两个功能。

不知道效果不好是什么意思,win11的cmd窗口的类和win10的窗口不一样,你试下下面的代码看看是否能跑起?



Global $class
Local $UserName = "red" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
Send("#r")
WinWaitActive("[CLASS:#32770]")
Local $sdoscommand = "runas /user:" & $UserName & " " & "D:\sogou_pinyin_79c.exe"
Local $flag = ControlSend("", "", "[CLASS:Edit; INSTANCE:1]", $sdoscommand & "{Enter}")



If $flag Then
        Sleep(300)
        If WinExists("[CLASS:ConsoleWindowClass]") Then _dos("[CLASS:ConsoleWindowClass]")
        If WinExists("[CLASS:Windows.UI.Composition.DesktopWindowContentBridge; INSTANCE:1]") Then _dos("[CLASS:Windows.UI.Composition.DesktopWindowContentBridge; INSTANCE:1]")  ;win11终端窗口
EndIf
Func _dos($class)
        WinWait($class)
        WinActive($class)
        $flag = ControlSend($class, "", "", $PassWord & "{Enter}")
        If $flag Then
                Sleep(300)
                WinClose($class)
        Else
                MsgBox(0, "", "")
        EndIf
EndFunc   ;==>_dos
 楼主| 发表于 2023-4-10 11:59:32 | 显示全部楼层
zhaoceshi 发表于 2023-4-10 11:57
不知道效果不好是什么意思,win11的cmd窗口的类和win10的窗口不一样,你试下下面的代码看看是否能跑起?
...
我这个可以跑起来,sleep太多,不稳定。
Local $UserName = "red" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
Send("#r")
WinWaitActive("[CLASS:#32770]")
Local $flag = ControlSend("", "", "[CLASS:Edit; INSTANCE:1]", "cmd.exe" & "{Enter}")
Sleep(2300)
Local $sdoscommand = "runas /user:" & $UserName & " " & "cmd.exe"
WinWaitActive("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]")
ControlSend("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]", "", "", $sdoscommand & "{Enter}")
Sleep(300)
ControlSend("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]", "", "", $PassWord & "{Enter}")
Sleep(300)
WinClose("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]")
Sleep(2300)
If WinExists("[CLASS:ConsoleWindowClass]") Then
        ControlSend("[CLASS:ConsoleWindowClass]", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}")
        Sleep(2300)
        WinClose("[CLASS:ConsoleWindowClass]")
EndIf
If WinExists("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]") Then
        ControlSend("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}")
        Sleep(2300)
        WinClose("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]")
EndIf
 楼主| 发表于 2023-4-10 12:05:35 | 显示全部楼层
zhaoceshi 发表于 2023-4-10 11:57
不知道效果不好是什么意思,win11的cmd窗口的类和win10的窗口不一样,你试下下面的代码看看是否能跑起?
...

你这样写不能发送字符,需要我下面的写法。
        ControlSend("[CLASS:CASCADIA_HOSTING_WINDOW_CLASS]", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}")
发表于 2023-4-10 12:10:24 | 显示全部楼层
你或者直接试下下面的代码是否能跑起来?

#RequireAdmin
Local $UserName = "admin" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
RunAs($UserName,@ComputerName,$PassWord, 0, "D:\soft\PureCodec20230222.exe", "", @SW_SHOWMAXIMIZED)
 楼主| 发表于 2023-4-10 12:16:43 | 显示全部楼层
zhaoceshi 发表于 2023-4-10 12:10
你或者直接试下下面的代码是否能跑起来?

#RequireAdmin

不行,不好用。我试过的。多次测试
发表于 2023-4-10 14:58:55 来自手机 | 显示全部楼层
win11下很多提权工具都不好用。AD域不是自带软件下发功能吗,而且可以指定管理员运行。
 楼主| 发表于 2023-4-10 17:15:10 | 显示全部楼层
gyp2000 发表于 2023-4-10 14:58
win11下很多提权工具都不好用。AD域不是自带软件下发功能吗,而且可以指定管理员运行。

是win11有点坑,我新建了两个管理员权限,一个弹出是win10界面,一个是弹出win11界面。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-28 00:16 , Processed in 0.081764 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表