标题: [问题求助] 求教powershell如何调用api函数 [打印本页]
作者: xends 时间: 2024-7-11 16:22 标题: 求教powershell如何调用api函数
本人最近在写远程批量关闭应用的脚本,由于该应用不可强杀,需要触发其关闭后输入密码,故问题主要集中在输入密码及焦点聚焦到程序上两个问题。
输入密码我调用sendkeys解决,而激活程序,将焦点切换到密码的输入框这块却解决不了(我有尝试过vbs的appactivate但是仅在本机操作时生效,远程触发只会让任务栏闪烁,窗口不会被弹出)
经大佬指路,可以尝试使用函数
GetForegroundWindow 获取当前窗口
SetWindowPos 激活指定窗口
但苦于本人毫无api基础,故诚心请教,有其它思路亦可,感谢感谢!
作者: idwma 时间: 2024-7-11 19:02
- https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.utility/add-type?#4-windows-api
复制代码
作者: jyswjjgdwtdtj 时间: 2024-7-11 23:14
既然都用win32api了 何必再用不靠谱的sendkeys呢
作者: Five66 时间: 2024-7-13 12:34
查了下GetForegroundWindow和SetWindowPos说明
这两个都是需要作为前台线程调用的,不然的话也是闪烁或者什么都不干
貌似还得AttachThreadInput,但不知道这个能否跨进程使用
还有个SwitchToThisWindow,不是公开的,不知道还能不能用
建议还是试试模拟alt+tab之类的 , 或者尝试以前台线程运行原来的 , 说不定vbs的appactivate内部使用的是GetForegroundWindow,由于执行时不是前台线程导致闪烁(???)
作者: 77七 时间: 2024-7-14 16:45
解决不了就用现成的第三方 (http://bcn.bathome.net/s/tool/index.html)某些软件或者以管理员权限启动的软件,可能需用管理员权限执行批处理。
以下为我自用代码摘选。
- @fltmc>nul||mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~dpnx0","%*",,"runas",1)(window.close)&&exit
-
- rem 缩小及移动cmd窗口,防止干扰
- @echo off &mode con cols=40 lines=2 & color 0f
- cmdow @ /mov 0 0
- CurS /crv 0
-
- rem 获取完整标题
- for /f "tokens=12*" %%a in ('cmdow /f /t /p ^|find "部分软件名"') do (
- set window_xx=%%b
- )
- rem 显示并置顶(偶尔会失败,可执行两次)
- cmdow "%window_xx%" /res /top
- cmdow "%window_xx%" /res /top
-
- rem 使用cimt模拟键盘鼠标
-
- rem 取消置顶,最小化
- cmdow "%window_xx%" /not /min
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |