.用于在同一图像查看器窗口中打开图片的蝙蝠线

问题描述 投票:0回答:1

我们有点恐慌,我们不是专家,并且花了一天时间试图找到一行代码来完成我们在 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。没用,现在我们的 system32 很混乱。
  • 安装 IrfanView 作为替代方案。没成功
  • 在行中包含“start”,或在同一窗口中打开“/b”,但所有这些并没有真正改变任何东西......我们真的不是专家。

如果您可以提供任何帮助或见解,那就太好了。谢谢你。

batch-file
1个回答
0
投票

这可以通过每个批处理文件杀死前一个批处理文件并替换其图像来实现。

如果使用 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
© www.soinside.com 2019 - 2024. All rights reserved.