我们有点恐慌,我们不是专家,并且花了一天时间试图找到一行代码来完成我们在 BAT 文件中所需的操作。
基本上,我们有 Windows 7,我们希望在运行 .bat 文件时:
我们在 Windows XP 上有此配置,并且它运行完美,使用以下行:
C:\\WINDOWS\System32\rundll32.exe C:\\Windows\System32\shimgbw.dll,ImageView_Fullscreen %~1
但是,对于Windows 7,不可能让它工作。
我们尝试过:
如果您可以提供任何帮助或见解,那就太好了。谢谢你。
这可以通过每个批处理文件杀死前一个批处理文件并替换其图像来实现。
如果使用 START 命令启动映像并给出任务名称;当批处理文件启动时,它应该使用 TASKKILL 按名称删除前一个查看器,然后启动另一个查看器。
使用什么程序来显示图像取决于您。
我使用了一些批处理子例程,可用于此目的,我将它们附加起来。
将该程序名称放入服务器二进制文件中:
SET serverbinary=the.exe
CALL :GetPID ServerPID %servername% "%USERNAME% %serverbinary%"
CALL :KillPID %ServerPID%
START "%USERNAME% %serverbinary%" "%serverbinary%" %~1 < nul
EXIT /b
:: ------------------------------------------------------------------
:WaitForTask
::
:: Usage: Windowname imagename
:: Wait for a task to finish before continuing
::
set commentsPID=
CALL :GetPID commentsPID %1 %2
REM "%commentsPID%."
IF "%commentsPID%." == "." EXIT /b
echo Waiting for PID %commentsPID% %1 %2
CALL :Sleep 30
GOTO :WaitForTask
:: ===========================================================================
:GetPID
:: usage: PIDvar imagename windowname
:: Get the PID of a task
SETLOCAL EnableDelayedExpansion
set _SubArg=
for /f "skip=3 tokens=1,2*" %%a in ('tasklist /fi "imagename eq %~2" /fi "windowtitle eq %~3" 2^>nul ') do @set _SubArg=%%b
)
( ENDLOCAL
set %1=%_SubArg%
)
EXIT /B 0
:: ===========================================================================
:KillPID
:: usage: PID
SETLOCAL EnableDelayedExpansion
if NOT %1. == . taskkill /F /T /PID %1 > nul 2>nul
ENDLOCAL
EXIT /B 0