[玩转系统] 用于保持屏幕活动的 PowerShell 脚本 [3 种方法]
作者:精品下载站 日期:2024-12-14 05:30:25 浏览:13 分类:玩电脑
用于保持屏幕活动的 PowerShell 脚本 [3 种方法]
使用 while
循环和 SendKeys()
方法
使用 while
循环无限次调用 SendKeys()
方法,以使用 PowerShell 保持 PC/笔记本电脑屏幕处于活动状态。
将 while 循环与 SendKeys() 方法结合使用:
$wScriptShellObj = New-Object -Com "Wscript.Shell"
while (1) {
$wScriptShellObj.SendKeys(".")
Sleep 2
}
在这里,我们使用 New-Object
cmdlet 使用 COM(组件对象模型)技术创建 WSH(Windows Script Host)Shell 对象的实例,并将其存储在 $wScriptShellObj
。该对象允许脚本与 Windows shell 交互并运行不同的 shell 命令。
然后,我们使用 while(1)
进入无限循环,使其保持运行,直到使用 Ctrl+C 终止脚本。在循环内部,我们使用了 $wScriptShellObj
对象的 SendKeys()
方法,该方法每 将
秒。如果我们打开 .
发送到活动应用程序一次>2NotePad
,脚本会在那里输入点,如果我们打开 NotePad++
,它会在那里打印点。
SendKeys()
方法模拟击键,就像用户键入/输入一样。每次击键后,脚本都会使用 Sleep
命令暂停 2
秒,然后继续执行 while
循环的下一次迭代。这样,我们就可以保持电脑屏幕处于活动状态。
使用 while
循环和 SendWait()
方法
使用 while
循环无限次调用 SendWait()
方法,以使用 PowerShell 保持 PC/笔记本电脑屏幕处于活动状态。按 Ctrl+C 终止脚本。
将 while 循环与 SendWait() 方法结合使用:
while ($true) {
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
[System.Windows.Forms.SendKeys]::SendWait("{NUMLOCK}")
Start-Sleep -Seconds 2
}
同样,我们使用了可以无限运行的 while
循环,因为条件 $true
始终为 True。在 while
循环中,我们使用了 System.Reflection.Assembly
类的 LoadWithPartialName()
方法。请记住,[System.Reflection.Assembly]
引用了 .NET 中的 System.Reflection.Assembly
类,该类提供了处理程序集的属性和方法。
我们通过指定 'System.Windows.Forms'
作为参数来使用 LoadWithPartialName()
方法来加载 System.Windows.Forms
程序集进入当前的 PowerShell 会话。 [void]
转换用于丢弃 LoadWithPartialName()
方法调用的任何值或输出。此外,它还用于抑制加载装配时产生的任何值。
为什么我们要加载System.Windows.Forms
程序集?强制加载是为了确保 System.Windows.Forms.SendKeys 类可供使用并提供模拟击键的方法。
现在,我们使用 System.Windows.Forms.SendKeys 类的 SendWait() 方法来模拟按下 NumLock 键。此处,"{NUMLOCK}"
字符串作为参数传递给 SendWait()
方法;该字符串参数指定要发送的击键序列。
之后,我们使用 Start-Sleep
cmdlet 休眠两秒钟。此 cmdlet 确保循环内的语句每两秒执行一次。这样,我们可以通过模拟击键并将其发送到活动窗口或应用程序来防止我们的 PC/笔记本电脑进入睡眠模式或屏幕锁定。
使用 keybd_event()
方法
使用 keybd_event()
方法通过 PowerShell 无限地保持 PC/笔记本电脑屏幕处于活动状态。按 Ctrl+C 停止此脚本。
使用 keybd_event() 方法:
$pInvokeSignature = @'
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
'@
Add-Type -MemberDefinition $pInvokeSignature -Namespace Win32Functions -Name KeyboardFunctions
while ($true) {
[Win32Functions.KeyboardFunctions]::keybd_event(0x90, 0, 0, 0)
[Win32Functions.KeyboardFunctions]::keybd_event(0x90, 0, 2, 0)
Start-Sleep -Seconds 2
}
首先,我们在 C# 中为 user32.dll
中的 keybd_event()
定义了一个 PInvoke 签名。此签名存储在 $pInvokeSignature
变量中,该变量允许使用 Add-Type
cmdlet 从 PowerShell 调用 keybd_event()
函数。在深入了解 Add-Type 及后续内容之前,让我们先分解一下签名来理解它。
为了定义签名,我们使用了 @''@
构造(称为逐字字符串文字)来定义多行字符串,而无需解释转义序列或转义特殊字符。 @'
和 '@
用于在 PowerShell 中开始和结束逐字字符串。它们之间的所有内容都被视为文字字符串,包括特殊字符和换行符。
接下来,[DllImport("user32.dll")]
指定将从 user32.dll
库导入 keybd_event()
方法。之后,我们声明了 keybd_event() 方法及其签名。以下是 keybd_event()
函数声明的不同组成部分的简要说明:
public
指定该函数可以在类外部访问。static
表示该函数是该类的一个static
方法,无需实例化该类即可访问。extern
表示该函数是外部实现的;在上面的示例中,它是在user32.dll
库中实现的。void
是函数的返回类型,表明keybd_event()
不会返回任何值。byte bVk
是一个byte
类型参数,表示我们想要模拟的给定按键的虚拟按键代码。byte bScan
是一个byte
类型参数,显示必须模拟的按键的硬件扫描代码。uint dwFlags
的类型为unit
(无符号整数),表示控制按键事件的附加标志。uint dwExtraInfo
也是uint
(无符号整数)类型,用于与击键相关的额外信息。
我们使用 Add-Type
cmdlet 将自定义 C# 类型 (KeyboardFunctions
) 添加到当前 PowerShell 会话。该类型在 Wind32Functions
命名空间中定义,并具有 keybd_event()
函数的 PInvoke 声明。我们在 Add-Type
cmdlet 中使用了各种参数:
- 我们使用
-Name
参数来提及自定义 C# 类型。 -Namespace
参数用于指定命名空间的名称。-MemberDefinition
参数用于写入 PInvoke 签名变量 ($pInvokeSignature
)。
之后,我们使用了 while 循环,由于指定了 $true 条件,该循环始终为 true。在循环内,我们调用了 keybd_event() 方法并传递了四个参数,解释如下:
0x90
表示 NUMLOCK 键的虚拟键代码;您可以在这里找到更多虚拟代码。0
是硬件扫描码。0
表示KEYEVENTF_KEYDOWN
标志,表示按键被按下。- 第四个参数是
0
因为我们不需要有关击键的附加信息。
我们再次使用 0x90
、0
、2
和 0
调用 keybd_event()
方法code> 作为第一个、第二个、第三个和第四个参数。与第一次调用 keybd_event()
函数相同,但不包括第三个参数,即 2
,表示 KEYEVENTF_KEYUP
标志,意味着钥匙被释放了。
然后,我们使用 Start-Sleep
cmdlet 将脚本执行暂停 2
秒,这是使用 -Seconds
参数指定的。 这样,我们模拟了每两秒无限次按下和释放 NUMLOCK 键,以防止 PC 进入睡眠模式。
keybd_event()
函数可用,但在较新版本的 Windows 中被取代,因此建议使用替代方法;例如,我们在本文前面学到的 SendKeys()
和 SendWait()
方法。
这就是用于保持屏幕活动的 powerShell 脚本的全部内容。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag