批处理弹出对话框

利用批处理生成各种提示框
[code]
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin

start mshta vbscript:msgbox("    测试提示框之一    ",,"提示")(window.close)
ping 0 /n 3 >nul
taskkill /f /im mshta.exe >nul

start mshta vbscript:msgbox("测试提示框之二(此提示框能保持前端显示) ",vbSystemModal,"提

示")(window.close)
ping 0 /n 6 >nul
taskkill /f /im mshta.exe >nul

start mshta vbscript:msgbox("测试提示框之三    ",vbInformation,"提示")(window.close)
ping 0 /n 6 >nul
taskkill /f /im mshta.exe >nul

start mshta vbscript:msgbox("测试提示框之四    ",VbExclamation,"警告!")(window.close)
ping 0 /n 6 >nul
taskkill /f /im mshta.exe >nul

start mshta vbscript:msgbox("测试提示框之五    ",VbQuestion,"询问?")(window.close)
ping 0 /n 6 >nul
taskkill /f /im mshta.exe >nul

start mshta vbscript:msgbox("测试提示框之六    ",VbCritical,"错误!")(window.close)
ping 0 /n 6 >nul
taskkill /f /im mshta.exe >nul

mshta vbscript:CreateObject("Wscript.Shell").popup("测试提示框之七(6秒后自动退出)",6,"提示

",vbOKOnly)(window.close)

mshta vbscript:msgbox("测试提示框之八(请点击任意一个按扭退出)",vbOKCancel,"选择")

(window.close)

mshta vbscript:msgbox("测试提示框之九(请点击任意一个按扭退出)",vbRetryCancel,"选择")

(window.close)

mshta vbscript:msgbox("测试提示框之十(请点击任意一个按扭退出)",vbAbortRetryIgnore,"选择")

(window.close)

mshta vbscript:msgbox("测试提示框之十一 (请点击任意一个按扭退出)",vbYesNo,"选择")

(window.close)

mshta vbscript:msgbox("测试提示框之十二(请点击任意一个按扭退出)",3,"选择")(window.close)

msg %username% /time:5 "全部完成,5秒后自动退出!"

exit
[/code]
弹出标题为“选择”的提示框,均要作出选择才能显示下一个提示框,但意义不大,因为在此没有判断语

句。如果想增加判断语句,可以用临时文件方式,如下例:
[code]
@echo off
set b=
echo Wsh.Echo MsgBox("测试提示框之十二    ",vbYesNoCancel,"选择") >tmp.vbs
for /f %%a in ('cscript tmp.vbs //nologo //e:vbscript') do set "b=%%a"
if %b%==6 goto Yes
if %b%==7 goto No
if %b%==2 goto Cancel
del /q tmp.vbs
exit

:Yes
echo 你选择了“是”
echo.
pause>nul
goto end

:No
echo 你选择了“否”
echo.
pause>nul
goto end

:Cancel
echo 你选择了“取消”
echo.
pause>nul
goto end

:end
del /q tmp.vbs
exit
[/code]
经测试各种按扭的对应的数值如下:
[code]
OK(确定)=1
Cancel(取消)=2
Abort(终止)=3
Retry(重试)=4
Ignore(忽略)=5
Yes(是)=6
No(否)=7
[/code]
如果想获取在对话框中输入的内容,可以用以下实例:
[code]
@echo off
echo Wsh.Echo InputBox("请在下面输入字符:", "提示", "abc") >"%temp%\tmp.vbs"
for /f %%a in ('cscript "%temp%\tmp.vbs" //nologo //e:vbscript') do set "b=%%a"
if %b%=="" goto end
echo %b%
pause >nul

:end
del /q "%temp%\tmp.vbs"
exit
[/code]
MsgBox 常数说明(有时在提示框中可以用其值来代替常数名,如用 3 代替 vbYesNoCancel)
[code]
常数                                  值        描述

vbOKOnly                        0        只显示确定按钮。 
vbOKCancel                    1        显示确定和取消按钮。 
vbAbortRetryIgnore        2        显示终止、重试和忽略按钮。 
vbYesNoCancel            3        显示是、否和取消按钮。 
vbYesNo                          4        显示是和否按钮。 
vbRetryCancel                5        显示重试和取消按钮。 
vbCritical                        16      显示临界消息图标。 
vbQuestion                    32      显示询问消息图标。 
vbExclamation              48      显示警告消息图标。 
vbInformation                64      显示提示消息图标。 
vbDefaultButton1          0        第一个按钮是默认按钮。 
vbDefaultButton2          256    第二个按钮是默认按钮。 
vbDefaultButton3          512    第三个按钮是默认按钮。 
vbDefaultButton4          768    第四个按钮是默认按钮。 
vbApplicationModal        0      应用程序模式。用户必须响应消息框,才能继续在当前应用程序中

工作。 
vbSystemModal            4096 前端显示

<think>好的,我现在需要帮助用户解决如何使用IDL实现启动ENVI、弹出文件选择对话框、打开图像并获取数据的问题。首先,我需要回顾用户提供的引用内容,看看有没有相关的信息。 用户引用了三个部分,其中引用1提到了ENVI的文件保存和导出功能,引用2介绍了ENVI的基本情况,引用3涉及图像拉伸处理。但这些引用中并没有直接涉及IDL编程的内容。不过,用户的问题是关于使用IDL开发实现与ENVI交互的功能,所以可能需要结合IDL和ENVI的API知识。 首先,启动ENVI。ENVI是用IDL开发的,所以IDL应该可以直接调用ENVI的库函数。我记得ENVI提供了一系列的IDL例程,比如ENVI_OPEN_FILE,或者可能需要先启动ENVI的会话。用户需要启动ENVI应用程序,可能需要使用ENVI函数,比如ENVI或ENVI_HEAD。 接下来,弹出文件选择对话框。IDL本身有对话框函数,比如DIALOG_PICKFILE,可以让用户选择文件。但ENVI可能也有自己的文件选择对话框,可能需要用ENVI_PROJ_GET_FILES或者其他ENVI特定的函数来获取文件路径。 然后,打开图像并获取数据。这可能需要使用ENVI_OPEN_FILE来打开选择的文件,返回一个文件ID,接着使用ENVI_GET_DATA来获取数据数组。或者可能需要通过ENVI_FILE_QUERY获取文件的信息,比如尺寸、波段等,然后读取数据。 需要注意的是,使用ENVI的IDL函数前,必须确保ENVI库已经被正确加载到IDL中。通常是通过调用ENVI或ENVI_BATCH_INIT来初始化ENVI环境,尤其是在批处理模式下。对于交互式操作,可能需要启动ENVI的界面,但用户可能需要在后台运行,所以可能需要使用无头模式(headless)。 此外,用户可能需要处理异常情况,比如用户取消文件选择,或者文件无法打开。代码中应该包含错误处理,比如检查返回值是否为有效值。 现在,整合这些步骤。首先启动ENVI,可能用ENVI_BATCH_INIT来初始化,不显示界面。然后使用DIALOG_PICKFILE让用户选择文件,或者用ENVI_PROJ_GET_FILES。假设用户选择的是ENVI格式的文件,用ENVI_OPEN_FILE打开,获取文件ID和元数据。接着使用ENVI_GET_DATA获取数据数组。最后,可能需要返回数据或进行其他处理。 需要确认ENVI_OPEN_FILE的参数是否正确,比如是否需要传递FILE关键字。同时,获取数据时可能需要指定波段、空间子集等参数,默认可能读取整个数据集。 可能还需要引用相关的ENVI IDL帮助文档,但用户提供的引用中没有这些内容,所以需要根据已有的知识来编代码示例。 最后,用户可能需要生成相关问题,比如如何批量处理、如何获取元数据、如何处理多波段图像等。这些问题需要自然地从当前问题延伸出来,帮助用户进一步学习。 总结步骤: 1. 初始化ENVI环境。 2. 弹出文件选择对话框。 3. 打开选择的文件。 4. 获取文件数据和元信息。 5. 处理可能的错误。 6. 提供示例代码。</think>以下是在IDL中实现启动ENVI、文件选择、加载图像并获取数据的完整实现步骤: ### 一、初始化ENVI环境 使用`ENVI_BATCH_INIT`初始化无界面ENVI会话: ```idl ENVI_BATCH_INIT ``` 注:该命令会加载ENVI核心库但不会显示GUI界面,适合后台处理[^2] ### 二、创建文件选择对话框 使用IDL原生对话框选择ENVI支持的图像文件: ```idl filepath = DIALOG_PICKFILE(FILTER='*.dat') IF (filepath EQ '') THEN RETURN ; 用户取消选择 ``` ### 三、打开ENVI文件 使用ENVI核心函数读取文件元数据: ```idl ENVI_OPEN_FILE, filepath, R_FID=fid IF (fid EQ -1) THEN BEGIN PRINT, '文件打开失败' RETURN ENDIF ``` ### 四、获取图像数据 通过文件ID获取数据矩阵: ```idl ENVI_FILE_QUERY, fid, DIMS=dims, NB=nb data = ENVI_GET_DATA(FID=fid, DIMS=dims, POS=0) PRINT, '数据尺寸:', SIZE(data) ``` ### 完整代码示例 ```idl PRO load_envi_data ; 初始化ENVI ENVI_BATCH_INIT ; 选择文件 filepath = DIALOG_PICKFILE(TITLE='选择ENVI文件', FILTER='*.dat') IF (filepath EQ '') THEN RETURN ; 打开文件 ENVI_OPEN_FILE, filepath, R_FID=fid IF (fid EQ -1) THEN BEGIN PRINT, '错误:无法打开文件' RETURN ENDIF ; 获取元数据 ENVI_FILE_QUERY, fid, NS=ns, NL=nl, NB=nb, DIMS=dims ; 读取第一波段数据 data = ENVI_GET_DATA(FID=fid, DIMS=dims, POS=0) ; 显示基本信息 HELP, data PRINT, '图像尺寸:', ns, '×', nl, ' 波段数:', nb END ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值