判断 ActiveX.EXE 是否已经在执行中

本文探讨了在编程环境中如何通过支持GetObject()函数解决对象获取问题,并结合实例展示了如何在特定场景下实现对象的首次创建。通过设置变量与错误处理机制,确保程序在对象不存在时能够正确初始化。

首先需要支持GetObject(),

这在 http://topic.youkuaiyun.com/u/20080827/13/01b722a7-de68-46b8-a0c6-8d551a194e8f.html 中已经解决了。

其次,你的问题看下面就明白了
VB code
dim f as object, bIsFirstCreate as boolean on error resume next set f = getobject(...) on error goto 0 if f is nothing then set f = createobject(...) bIsFirstCreate = True end if

chcp 65001 @echo off color 0a @echo 正在关闭浏览器... taskkill /F /IM chrome.exe /T >nul 2>nul taskkill /F /IM msedge.exe /T >nul 2>nul taskkill /F /IM firefox.exe /T >nul 2>nul taskkill /F /IM iexplore.exe /T >nul 2>nul taskkill /F /IM opera.exe /T >nul 2>nul taskkill /F /IM 360se.exe /T >nul 2>nul taskkill /F /IM 360chrome.exe /T >nul 2>nul taskkill /F /IM QQBrowser.exe /T >nul 2>nul taskkill /F /IM SogouExplorer.exe /T >nul 2>nul taskkill /F /IM UCBrowser.exe /T >nul 2>nul @echo 浏览器已关闭 echo. REM 设置英文目录名 set "DIRNAME=GuideCertificate" REM 获取系统盘符 set "SYSDRIVE=%SystemDrive%" REM 判断系统位数 if "%PROCESSOR_ARCHITECTURE%"=="x86" ( set "TARGETDIR=%SYSDRIVE%\Program Files\%DIRNAME%" set "SYS32=%WINDIR%\System32" set "WOW64=%WINDIR%\SysWOW64" ) else ( REM 64位系统 set "TARGETDIR=%SYSDRIVE%\Program Files (x86)\%DIRNAME%" set "SYS32=%WINDIR%\System32" set "WOW64=%WINDIR%\SysWOW64" ) REM 创建目标目录 if not exist "%TARGETDIR%" ( mkdir "%TARGETDIR%" if %errorlevel% neq 0 ( @echo 创建目录 "%TARGETDIR%" 失败。 ) else ( @echo 创建目录 "%TARGETDIR%"成功。 ) ) else ( @echo "%TARGETDIR%"目录已存在 ) echo. REM 复制当前目录所有文件到目标目录 xcopy "%CD%\*.*" "%TARGETDIR%\" /E /I /Y if %errorlevel% neq 0 ( @echo 复制文件到 "%TARGETDIR%" 失败。 ) else ( @echo 复制文件到 "%TARGETDIR%" 成功。 ) echo. REM 获取当前用户名 for /f "tokens=*" %%u in ('whoami') do set "CURUSER=%%u" @echo 当前用户名: %CURUSER% echo. REM 获取目录所有权 takeown /f "%TARGETDIR%" /r /d y >nul if %errorlevel% neq 0 ( @echo 获取目录 "%TARGETDIR%" 的所有权失败。 ) else ( @echo 获取目录 "%TARGETDIR%" 的所有权成功。 ) echo. REM 设置目录权限 icacls "%TARGETDIR%" /grant "%CURUSER%:(OI)(CI)F" /t /c >nul if %errorlevel% neq 0 ( @echo 设置目录 "%TARGETDIR%" 的权限失败。 ) else ( @echo 设置目录 "%TARGETDIR%" 的权限成功。 ) echo. REM 卸载旧的OCX控件 if exist "%SYS32%\DTC1250eCardPrinter.ocx" ( regsvr32 /u /s "%SYS32%\DTC1250eCardPrinter.ocx" del /f /q "%SYS32%\DTC1250eCardPrinter.ocx" if %errorlevel% neq 0 ( @echo 卸载 "%SYS32%\DTC1250eCardPrinter.ocx" 失败 ) else ( @echo 卸载 "%SYS32%\DTC1250eCardPrinter.ocx" 成功 ) ) else ( @echo "%SYS32%\DTC1250eCardPrinter.ocx"该控件已被删除或不存在 ) echo. if exist "%WOW64%\DTC1250eCardPrinter.ocx" ( regsvr32 /u /s "%WOW64%\DTC1250eCardPrinter.ocx" del /f /q "%WOW64%\DTC1250eCardPrinter.ocx" if %errorlevel% neq 0 ( @echo 卸载 "%WOW64%\DTC1250eCardPrinter.ocx" 失败 ) else ( @echo 卸载 "%WOW64%\DTC1250eCardPrinter.ocx" 成功 ) ) else ( @echo "%WOW64%\DTC1250eCardPrinter.ocx"该控件已被删除或不存在 ) echo. REM 注册新控件(假设新控件在目标目录) if exist "%TARGETDIR%\DTC1250eCardPrinter.ocx" ( regsvr32 "%TARGETDIR%\DTC1250eCardPrinter.ocx" if %errorlevel% neq 0 ( @echo 注册 "%TARGETDIR%\DTC1250eCardPrinter.ocx" 失败。 ) else ( @echo 注册 "%TARGETDIR%\DTC1250eCardPrinter.ocx" 成功。 ) ) else ( @echo 控件文件 "%TARGETDIR%\DTC1250eCardPrinter.ocx" 不存在,请检查前面复制文件命令是否执行成功。 ) echo. REM 添加 tgadmin.mr.mct.gov.cn 为受信任站点 reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\tgadmin.mr.mct.gov.cn" /v https /t REG_DWORD /d 2 /f if %errorlevel% neq 0 ( @echo 添加受信任站点失败。 ) else ( @echo 已添加tgadmin.mr.mct.gov.cn到受信任站点 ) REM 添加 *.*.*.*.* 为受信任站点 reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\*.*.*.*.*" /v https /t REG_DWORD /d 2 /f if %errorlevel% neq 0 ( @echo 添加受信任站点失败。 ) else ( @echo 已添加*.*.*.*.*到受信任站点 ) echo. REM 启用受信任站点区域(Zones\2)的全部ActiveX控件 reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2" /v 1200 /t REG_DWORD /d 0 /f if %errorlevel% neq 0 ( @echo 添加受信任站点失败。 ) else ( @echo 启用控件1200成功 ) echo. reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2" /v 1201 /t REG_DWORD /d 0 /f if %errorlevel% neq 0 ( @echo 添加受信任站点失败。 ) else ( @echo 启用控件1201成功 ) echo. reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2" /v 1406 /t REG_DWORD /d 0 /f if %errorlevel% neq 0 ( @echo 添加受信任站点失败。 ) else ( @echo 启用控件1406成功 ) echo. REM 批量设置受信任站点相关注册表项 for %%k in (1001 1004 1200 1201 1405 2201 1208) do ( reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2" /v "%%k" /t REG_DWORD /d 0 /f >nul if %errorlevel% neq 0 ( @echo 设置注册表项 "%%k" 失败。 ) else ( REM 注册表项 "%%k" 设置成功 ) ) echo. REM 执行外部程序 @echo 正在执行VC环境64位安装程序....出现界面后,请点击下一步直到完成! if exist "%cd%\MSVBCRT.AIO.2019.05.08.x64.exe" ( "%cd%\MSVBCRT.AIO.2019.05.08.x64.exe" if %errorlevel% neq 0 ( @echo MSVBCRT.AIO.2019.05.08.x64.exe 执行失败。 ) else ( @echo MSVBCRT.AIO.2019.05.08.x64.exe 执行成功。 ) ) else ( @echo 文件 MSVBCRT.AIO.2019.05.08.x64.exe 不存在。 ) @echo 正在执行VC环境32位安装程序....出现界面后,请点击下一步直到完成! if exist "%cd%\MSVBCRT.AIO_2019.05.08.x32.exe" ( "%cd%\MSVBCRT.AIO_2019.05.08.x32.exe" if %errorlevel% neq 0 ( @echo MSVBCRT.AIO_2019.05.08.x32.exe 执行失败。 ) else ( @echo MSVBCRT.AIO_2019.05.08.x32.exe 执行成功。 ) ) else ( @echo 文件 MSVBCRT.AIO_2019.05.08.x32.exe 不存在。 ) echo. powershell -Command "Get-ExecutionPolicy" powershell -Command "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser" REM 搜索本地打印机并修改配置文件 set "INI_FILE=%TARGETDIR%\Config\GuanYuan_CardPrinter.ini" set "PRINTER_NAME=" setlocal enabledelayedexpansion for /f "skip=2 tokens=*" %%p in ('wmic printer get name') do ( echo %%p | findstr /C:"DTC1250e Card Printer" >nul if !errorlevel! == 0 ( set "PRINTER_NAME=DTC1250e Card Printer" goto :SetPrinter ) else ( REM 未找到 DTC1250e Card Printer ) ) for /f "skip=2 tokens=*" %%p in ('wmic printer get name') do ( echo %%p | findstr /C:"XPS Card Printer" >nul if !errorlevel! == 0 ( set "PRINTER_NAME=XPS Card Printer" goto :SetPrinter ) else ( REM 未找到 XPS Card Printer ) ) goto :EndPrinter :SetPrinter REM 修改 ini 文件中的 CardPrinter 项 if exist "!INI_FILE!" ( powershell -Command "(Get-Content -Raw '!INI_FILE!') -replace 'CardPrinter=.*', 'CardPrinter=!PRINTER_NAME!' | Set-Content '!INI_FILE!'" echo 打印机已设置为: !PRINTER_NAME! REM 修改 PrintParam 项 powershell -Command "(Get-Content -Raw '!INI_FILE!') -replace 'PrintParam=.*', 'PrintParam=0|0|53.98|85.6' | Set-Content '!INI_FILE!'" echo 打印参数已设置为: 0^|0^|53.98^|85.6 ) else ( echo 配置文件不存在: !INI_FILE! ) :EndPrinter echo. @echo 如果上面出现错误提示,请联系程序提供方! echo. @echo 操作完成! pause 搜索打印机部分追加机型如下: SD360 U1 HDP5000 Card Printer DTC1500 Card Printer 并增加判断逻辑,如果找到打印机,提示是否设置当前打印机,如果选择否,则继续寻找下一个打印机
最新发布
07-08
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值