CMD、DevCon 和 Visual Fox Pro
CMD,DevCon and Visual Fox Pro
我使用 DevCon 制作了一个 .bat 文件来重新启动设备,当 运行 它工作时。
当我尝试使用 运行 命令 运行 VFP 形式的同一个文件时,它说无法识别 DevCon。
!命令 /c "C:\Windows\System32\restart.bat"
! "C:\Windows\System32\restart.bat"
我试过将 Sistem32 作为起始路径并作为默认起始路径,但无论哪种方式都不起作用。似乎 CMD 在此过程中感到困惑。在此先感谢您的帮助。
我会尝试使用 ShellExecute API。即:
#Define SW_HIDE 0
#Define SW_NORMAL 1
#Define SW_SHOWMINIMIZED 2
#Define SW_SHOWMAXIMIZED 3
Local lcResult
lcResult = ShellExec('C:\Windows\System32\restart.bat', '', 'C:\Windows\System32', SW_NORMAL)
If !Empty(m.lcResult) && error
Messagebox(m.lcResult)
Endif
Function ShellExec
Lparameters tcExecutable,tcParams,tcWorkingDir,tnShowType,tcOperation
Declare Long ShellExecute In "shell32.dll" ;
long HWnd, String lpszOp, ;
string lpszFile, String lpszParams, ;
string lpszDir, Long nShowCmd
tcOperation = Iif(Empty(m.tcOperation), 'Open', m.tcOperation)
tcExecutable = Iif(Empty(m.tcExecutable), '', m.tcExecutable)
tcParams = Iif(Empty(m.tcParams), '', m.tcParams)
tcWorkingDir = Iif(Empty(m.tcWorkingDir), '', m.tcWorkingDir)
tnShowType = Iif(Type('m.tnShowType') # 'N', SW_SHOWNORMAL, m.tnShowType)
Local lnResult, lcError
lcError = ''
lnResult = ShellExecute(0,m.tcOperation,m.tcExecutable,m.tcParams,m.tcWorkingDir,m.tnShowType)
If !( m.lnResult > 32 ) && Error
lcError = GetShExecErrorMsg(m.lnResult)
Endif
Return m.lcError
Endfunc
Function GetShExecErrorMsg
Lparameters tnErrNum
Local Array aErrors[1]
Local lcMessage, lcErrors,lnErrors,ix
TEXT to m.lcErrors noshow
0,The operating system is out of memory or resources. \n
2,The specified file was not found. \n
3,The specified path was not found. \n
11,The .exe file is invalid (non-Win32® .exe or error in .exe image). \n
5,The operating system denied access to the specified file. \n
27,The file name association is incomplete or invalid. \n
30,The DDE transaction could not be completed because
other DDE transactions were being processed. \n
29,The DDE transaction failed. \n
28,The DDE transaction could not be completed because the request timed out. \n
32,The specified dynamic-link library was not found. \n
31,There is no application associated with the given file name extension.
This error will also be returned if you attempt to print a file that is not printable. \n
8,There was not enough memory to complete the operation. \n
26,A sharing violation occurred. \n
ENDTEXT
Clear
lnErrors = Alines(aErrors,m.lcErrors,.T.,'\n')
For ix=1 To m.lnErrors
If ( Val(Chrtran(Left(aErrors[m.ix],;
At(',',aErrors[m.ix])-1),Chr(13)+Chr(10),'')) = m.tnErrNum )
lcMessage = Substr(aErrors[m.ix],At(',',aErrors[m.ix])+1)
Exit
Endif
Endfor
If Empty(m.lcMessage)
lcMessage = 'An unspecified error occurred.'
Endif
Return m.lcMessage
Endfunc
我使用 DevCon 制作了一个 .bat 文件来重新启动设备,当 运行 它工作时。 当我尝试使用 运行 命令 运行 VFP 形式的同一个文件时,它说无法识别 DevCon。
!命令 /c "C:\Windows\System32\restart.bat"
! "C:\Windows\System32\restart.bat"
我试过将 Sistem32 作为起始路径并作为默认起始路径,但无论哪种方式都不起作用。似乎 CMD 在此过程中感到困惑。在此先感谢您的帮助。
我会尝试使用 ShellExecute API。即:
#Define SW_HIDE 0
#Define SW_NORMAL 1
#Define SW_SHOWMINIMIZED 2
#Define SW_SHOWMAXIMIZED 3
Local lcResult
lcResult = ShellExec('C:\Windows\System32\restart.bat', '', 'C:\Windows\System32', SW_NORMAL)
If !Empty(m.lcResult) && error
Messagebox(m.lcResult)
Endif
Function ShellExec
Lparameters tcExecutable,tcParams,tcWorkingDir,tnShowType,tcOperation
Declare Long ShellExecute In "shell32.dll" ;
long HWnd, String lpszOp, ;
string lpszFile, String lpszParams, ;
string lpszDir, Long nShowCmd
tcOperation = Iif(Empty(m.tcOperation), 'Open', m.tcOperation)
tcExecutable = Iif(Empty(m.tcExecutable), '', m.tcExecutable)
tcParams = Iif(Empty(m.tcParams), '', m.tcParams)
tcWorkingDir = Iif(Empty(m.tcWorkingDir), '', m.tcWorkingDir)
tnShowType = Iif(Type('m.tnShowType') # 'N', SW_SHOWNORMAL, m.tnShowType)
Local lnResult, lcError
lcError = ''
lnResult = ShellExecute(0,m.tcOperation,m.tcExecutable,m.tcParams,m.tcWorkingDir,m.tnShowType)
If !( m.lnResult > 32 ) && Error
lcError = GetShExecErrorMsg(m.lnResult)
Endif
Return m.lcError
Endfunc
Function GetShExecErrorMsg
Lparameters tnErrNum
Local Array aErrors[1]
Local lcMessage, lcErrors,lnErrors,ix
TEXT to m.lcErrors noshow
0,The operating system is out of memory or resources. \n
2,The specified file was not found. \n
3,The specified path was not found. \n
11,The .exe file is invalid (non-Win32® .exe or error in .exe image). \n
5,The operating system denied access to the specified file. \n
27,The file name association is incomplete or invalid. \n
30,The DDE transaction could not be completed because
other DDE transactions were being processed. \n
29,The DDE transaction failed. \n
28,The DDE transaction could not be completed because the request timed out. \n
32,The specified dynamic-link library was not found. \n
31,There is no application associated with the given file name extension.
This error will also be returned if you attempt to print a file that is not printable. \n
8,There was not enough memory to complete the operation. \n
26,A sharing violation occurred. \n
ENDTEXT
Clear
lnErrors = Alines(aErrors,m.lcErrors,.T.,'\n')
For ix=1 To m.lnErrors
If ( Val(Chrtran(Left(aErrors[m.ix],;
At(',',aErrors[m.ix])-1),Chr(13)+Chr(10),'')) = m.tnErrNum )
lcMessage = Substr(aErrors[m.ix],At(',',aErrors[m.ix])+1)
Exit
Endif
Endfor
If Empty(m.lcMessage)
lcMessage = 'An unspecified error occurred.'
Endif
Return m.lcMessage
Endfunc