我们有点恐慌,我们不是专家,并且花了一天时间试图找到一行代码来完成我们在BAT文件中所需的代码。
基本上,我们有Windows 7,我们希望在运行.bat文件时:
- 图像在图像查看器中打开
- (幻灯片模式)
- 每次运行BAT时,新图像都会替换幻灯片中的旧图像。
我们在Windows XP上进行了此配置,并且使用此行完美运行:
C:\ WINDOWS \ System32 \ rundll32.exe C:\ Windows \ System32 \ shimgbw.dll,ImageView_Fullscreen%~1
但是,使用Windows 7,无法使其正常工作 - 幻灯片显示无法打开 - 在新的图像查看器窗口中打开下一个图像
我们试图:
- 安装XP图像查看器,使用互联网上的一些技巧并修改shimg.dll。没有工作,现在我们的系统32已经搞砸了。
- 安装IrfanView作为替代方案。没工作
- 在行中包含“开始”,或在同一窗口中打开“/ b”,但所有这些并没有真正改变任何东西......我们真的不是专家。
如果您能提供任何帮助或见解,那将是非常棒的。谢谢。
答案 0 :(得分:0)
这可以通过每个批处理文件杀死前一个文件来实现,从而替换其图像。
如果使用START命令启动图像并提供任务名称;批处理文件启动时,应使用TASKKILL按名称删除上一个查看器,然后再启动另一个查看器。
您用来显示图像的程序取决于您。
我有一些我使用的批处理子程序,可用于此目的,并附加它们。
将该程序名放在serverbinary中:
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