此批处理代码以“ WIDTH x HEIGHT”的格式检索屏幕宽度和屏幕高度
@echo off
setlocal
for /f %%A in ('wmic path Win32_VideoController get CurrentHorizontalResolution^,CurrentVerticalResolution /value ^| find "="') do set "%%A"
echo %CurrentHorizontalResolution% x %CurrentVerticalResolution%
现在,鉴于上面的输出返回“ 1920 x 1080”,下面的VBScript代码应在屏幕的右下角产生InputBox
。
InputBox "","Title","",1920,1080
但是,不是。这是因为VBS InputBox函数中的PosX
和PosY
变量是用Twips
而不是Pixels
测量的。
有什么方法可以仅使用Batch和VBScript将Pixels
转换为Twips
?
答案 0 :(得分:1)
我在创建错误消息自定义程序时遇到了一个解决方案。这个想法是从WMIC中获取第二对值,称为“ PixelsPerXLogicalInch”和“ PixelsPerYLogicalInch”
for /f %%A in ('wmic path Win32_DesktopMonitor get PixelsPerXLogicalInch^,PixelsPerYLogicalInch /value ^| find "="') do set "%%A"
echo %PixelsPerXLogicalInch% x %PixelsPerYLogicalInch%
这将输出用于将像素转换为英寸的转换因子。由于缇只是1/1440英寸,因此将这些值除以1440将得到每个像素的缇数。
for /f %%A in ('wmic path Win32_DesktopMonitor get PixelsPerXLogicalInch^,PixelsPerYLogicalInch /value ^| find "="') do set "%%A"
set /a TwipsPerPixelX=1440/%PixelsPerXLogicalInch%
set /a TwipsPerPixelY=1440/%PixelsPerYLogicalInch%
echo %TwipsPerPixelX% x %TwipsPerPixelY%
现在,只需将这些转换因子乘以一点乘积即可应用于位置计算。
@echo off
setlocal
for /f %%A in ('wmic path Win32_VideoController get CurrentHorizontalResolution^,CurrentVerticalResolution /value ^| find "="') do set "%%A"
for /f %%A in ('wmic path Win32_DesktopMonitor get PixelsPerXLogicalInch^,PixelsPerYLogicalInch /value ^| find "="') do set "%%A"
set /a TwipX=%CurrentHorizontalResolution%*(1440/%PixelsPerXLogicalInch%)
set /a TwipY=%CurrentVerticalResolution%*(1440/%PixelsPerYLogicalInch%)
echo %TwipX% x %TwipY%
这组命令的输出值将在屏幕右下角的上方生成一个InputBox(因为窗口位于左上角。)
考虑到所有这些因素,您可以创建一个脚本,该脚本在屏幕上的随机位置产生InputBox
。这样,或者提示用户输入位置值,或者甚至在您自己的CMD / VBS应用程序中使用它来更准确地定位输入框。
<!-- :
@echo off
setlocal
for /f %%A in ('wmic path Win32_VideoController get CurrentHorizontalResolution^,CurrentVerticalResolution /value ^| find "="') do set "%%A"
for /f %%A in ('wmic path Win32_DesktopMonitor get PixelsPerXLogicalInch^,PixelsPerYLogicalInch /value ^| find "="') do set "%%A"
set /a RandX=(%Random%*%CurrentHorizontalResolution%/32768)*(1440/%PixelsPerXLogicalInch%)
set /a RandY=(%Random%*%CurrentVerticalResolution%/32768)*(1440/%PixelsPerYLogicalInch%)
start /b cscript //nologo "%~f0?.wsf" "%RandX%" "%RandY%"
exit /b
-->
<job><script language="VBScript">
InputBox "","Randomly-Positioned Input Box","",Wscript.Arguments(0),Wscript.Arguments(1)
</script></job>