Batch file 如何使用BAT脚本关闭屏幕,然后实际关闭屏幕

Batch file 如何使用BAT脚本关闭屏幕,然后实际关闭屏幕,batch-file,Batch File,我发现此脚本用于关闭我的计算机屏幕: powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2) 除了这个脚本有问题,因为它不会自动关闭,并且在我移动光标重新打开屏幕时关闭控制台之前阻止f.lux工

我发现此脚本用于关闭我的计算机屏幕:

powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)
除了这个脚本有问题,因为它不会自动关闭,并且在我移动光标重新打开屏幕时关闭控制台之前阻止f.lux工作之外,我发现这个脚本需要使用Windows PowerShell这一事实似乎有些过分

因此,这可能是一个愚蠢的请求,但我希望有人知道一种方法,可以在不使用PowerShell的情况下运行批处理脚本,从而关闭屏幕并自动关闭

编辑:

以下是我尝试过的一些命令(及其结果):

此命令(无论是否在结尾处使用
-NoLogo
-NoProfile
-command
的任意组合)关闭屏幕,但会使空白的powershell窗口保持打开状态:

start powershell -NoLogo -NoProfile -Command (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)
此命令(带或不带对powershell.exe的特定引用,前面带或不带空引号,前面带或不带
@
符号,后面带或不带
-NoLogo
-NoProfile
-command
的任意组合)不会关闭屏幕,并导致下面的powershell窗口(仅由于我的
-NoExit
命令而保持打开状态):

输入该命令后,唯一更改的是此powershell窗口中引用的临时文件:
我的假设是,您找到的命令没有双引号,因此需要转义字符
^
,才能运行。根据我之前关于将命令括在双引号内的建议,以下是我的建议,即删除插入符号:

@Start”“”%\uuuuu AppDir\uuuu%WindowsPowerShell\v1.0\powershell.exe“-NoLogo-NoProfile-Command”(添加类型“[DllImport(\'user32.dll\”)公共静态外部int sendmages(int-hWnd,int-hMsg,int-wParam,int-lParam);”-名称a-Pas::sendmages(-1,0x0112)

我的假设是,您找到的命令没有双引号,因此需要转义字符
^
,才能运行。根据我之前关于将命令括在双引号内的建议,以下是我的建议,即删除插入符号:

@Start”“”%\uuuuu AppDir\uuuu%WindowsPowerShell\v1.0\powershell.exe“-NoLogo-NoProfile-Command”(添加类型“[DllImport(\'user32.dll\”)公共静态外部int sendmages(int-hWnd,int-hMsg,int-wParam,int-lParam);”-名称a-Pas::sendmages(-1,0x0112)

如果不希望在Powershell运行命令时cmd.exe窗口保持打开状态,请使用
Start
。打开命令提示窗口并输入
start/?
,以读取其使用信息。@Compo虽然这样做有效,但会导致powershell窗口保持打开,从而产生另一个问题。@Squashman@Compo noter
powercfg.exe-change-monitor timeout ac 0
,也不
powercfg.exe-x-monitor timeout ac 0
导致我的计算机监视器关闭。即使我在命令提示符下以提升的权限运行这些命令。在提出一个你认为可行的解决方案之前,请重新打开我的问题,你甚至不需要先与我核实。这就是@Squashman要求你做的所有事情,我们不需要在选择答案作为重复答案时测试已经过投票并被接受的答案。我重新开始你的问题了,洛根。请尝试调查Powershell窗口打开的原因,好吗?从批处理文件运行powershell.exe时,我从来没有这样做过。如果不希望在powershell运行命令时cmd.exe窗口保持打开状态,请使用
Start
。打开命令提示窗口并输入
start/?
,以读取其使用信息。@Compo虽然这样做有效,但会导致powershell窗口保持打开,从而产生另一个问题。@Squashman@Compo noter
powercfg.exe-change-monitor timeout ac 0
,也不
powercfg.exe-x-monitor timeout ac 0
导致我的计算机监视器关闭。即使我在命令提示符下以提升的权限运行这些命令。在提出一个你认为可行的解决方案之前,请重新打开我的问题,你甚至不需要先与我核实。这就是@Squashman要求你做的所有事情,我们不需要在选择答案作为重复答案时测试已经过投票并被接受的答案。我重新开始你的问题了,洛根。请尝试调查Powershell窗口打开的原因,好吗?当从批处理文件中运行Posithel.EXE时,我从来没有这样做过。不幸的是,这使得空白的PultSek窗口打开。为了找到这个问题的答案,我对你的答案投了赞成票,但我不得不怀疑:如果你运行这个命令,它真的不会在你的电脑上打开PowerShell窗口吗?正如我已经说过的,PowerShell控制台不应该打开,你运行的是批处理文件,而不是PowerShell脚本。我的假设是,要么您已将批处理文件配置为在不同的应用程序中运行(尽管我不知道这会如何改变行为),要么C#代码正在向PowerShell返回结果,可能是错误级别,而不是真正的启动应用程序。如果我以后有时间访问Windows 10计算机,我会看一看。我刚刚尝试了你在
cmd.exe中发布的内容,以及Windows7中批处理文件中的答案,两种方法都有效!几个月后,我这个笨蛋终于明白了这个问题。我在一个已经打开的命令提示符窗口中运行这个命令。不幸的是,这使得空白的PultSek窗口打开。为了找到这个问题的答案,我对你的答案投了赞成票,但我不得不怀疑:如果你运行这个命令,它真的不会在你的电脑上打开PowerShell窗口吗?正如我已经说过的,PowerShell控制台不应该打开,你运行的是批处理文件,而不是PowerShell脚本。我的假设是eit
start "" "%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoExit -NoLogo -NoProfile -Command "(Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)"