找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 10213|回复: 4

[问题求助] 求教powershell如何调用api函数

[复制链接]
发表于 2024-7-11 16:22:20 | 显示全部楼层 |阅读模式
本人最近在写远程批量关闭应用的脚本,由于该应用不可强杀,需要触发其关闭后输入密码,故问题主要集中在输入密码及焦点聚焦到程序上两个问题。
输入密码我调用sendkeys解决,而激活程序,将焦点切换到密码的输入框这块却解决不了(我有尝试过vbs的appactivate但是仅在本机操作时生效,远程触发只会让任务栏闪烁,窗口不会被弹出)
经大佬指路,可以尝试使用函数
GetForegroundWindow 获取当前窗口
SetWindowPos 激活指定窗口
但苦于本人毫无api基础,故诚心请教,有其它思路亦可,感谢感谢!
发表于 2024-7-11 19:02:46 | 显示全部楼层
  1. https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.utility/add-type?#4-windows-api
复制代码
发表于 2024-7-11 23:14:36 | 显示全部楼层
既然都用win32api了 何必再用不靠谱的sendkeys呢
发表于 2024-7-13 12:34:50 | 显示全部楼层
查了下GetForegroundWindow和SetWindowPos说明
这两个都是需要作为前台线程调用的,不然的话也是闪烁或者什么都不干
貌似还得AttachThreadInput,但不知道这个能否跨进程使用
还有个SwitchToThisWindow,不是公开的,不知道还能不能用

建议还是试试模拟alt+tab之类的 , 或者尝试以前台线程运行原来的 , 说不定vbs的appactivate内部使用的是GetForegroundWindow,由于执行时不是前台线程导致闪烁(???)
发表于 2024-7-14 16:45:52 | 显示全部楼层
解决不了就用现成的第三方 (http://bcn.bathome.net/s/tool/index.html)某些软件或者以管理员权限启动的软件,可能需用管理员权限执行批处理。
以下为我自用代码摘选。
  1. @fltmc>nul||mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~dpnx0","%*",,"runas",1)(window.close)&&exit

  2. rem 缩小及移动cmd窗口,防止干扰
  3. @echo off &mode con cols=40 lines=2 & color 0f
  4. cmdow @ /mov 0 0
  5. CurS /crv 0

  6. rem 获取完整标题
  7. for /f "tokens=12*" %%a in ('cmdow /f /t /p ^|find "部分软件名"') do (
  8.         set window_xx=%%b
  9. )
  10. rem 显示并置顶(偶尔会失败,可执行两次)
  11. cmdow "%window_xx%" /res /top
  12. cmdow "%window_xx%" /res /top

  13. rem 使用cimt模拟键盘鼠标

  14. rem 取消置顶,最小化
  15. cmdow "%window_xx%" /not /min
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 03:52 , Processed in 0.017607 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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