在VFP中调用其他应用程序的实用技术
-在使用VFP的应用程序设计中,经常需要调用其他应用程序。这时,我们马上想到RUN命令。通过使用RUN命令,您只需要知道应用程序的文件名和路径。
-下面的例子是在Windows目录下启动画板程序,同时打开c:
\windows\Bubbles.bmp文件:
-RUN/n3 C:\ Windows \ Pb rush . exe C:\ Windows \ bubbles . BMP .RUN命令的参数用法可以参考Visual FoxPro的帮助文件。然而令人失望的是,在实际开发中,我们往往无法确定要启动的应用程序的文件名及其安装路径。比如我们需要在用户机器上启动浏览器,连接到某个网站。本机可能安装了IE、网景或其他浏览器软件,安装路径不确定。这是我在工作中发现的两个解决方案。这两种方法都是通过Win32 API函数来解决问题,所以它们的解决方案也可以用在其他编程语言中。
(1)从注册表中获取被调用软件的名称和路径。
-我们只需要提供被调用软件处理的文件类型(由文件扩展名决定),通过在注册表中查找软件注册的可以处理的文件类型的数据项,就可以得到软件的文件名和安装路径。
*主函数
过程lookreg
参数文件类型& &文件类型
*声明要使用的API函数
在Win32 API中声明integer regopenkey
Integer nHKey,String @cSubKey,
Integer @nResult
在Win32API中声明整数RegCloseKey
整数nHKey
在Win32API中声明整数RegQueryValueEx
Integer nHKey,String lpszValueName,
Integer dwReserved,;
Integer @lpdwType,String @lpbData,
Integer @lpcbData
# define HKEY _类_根
-2147483648
# define c _ extnofound _ loc "查找失败!"
LOCAL cExtn,cap key,cap name,nErrNum
LOCAL oReg,regfile
cap key = " "
cap name = " "
nCurrentKey = 0
nErrNum =GetAppPath
(文件类型,@ cAppKey,@ cAppName)
*确保参数
(如:C:\ excel \ excel.exe/e)
if ATC(" .exe ",m . CAPP name)# 0
m . CAPP name = all trim(substr
)m . CAPP name)+3)]
if ASC(left(CAPP name,1)) = 34
&&去掉多余的"字符
m . CAPP name = substr(m . CAPP name,2)
迪恩。
retu LOWER(m . cap name)
end proc
*打开注册表
过程openkey
l参数clookupkey
local n子项,nErrCode
nSubKey = 0
m . nregkey = HKEY _ CLASSES _ ROOT
nErrCode = regopen key
(m . nregkey,m.cLookUpKey,@ nSubKey)
nCurrentKey = m . nSubKey
*关闭注册表
procedure close key
= regclosekey(ncurrentkey)
ncurrentkey = 0
end proc。
*查询注册表
过程getkey value
l参数cvalue name,ckey value。
LOCAL lpdwReserved,lpdwType,
lpbData,lpcbData,nErrCode
STORE 0 TO lpdwReserved,lpdwType
STORE SPACE(256)TO lpb data
STORE LEN(m . lpb data)TO m . lpcbData
m . nerr code = RegQueryValueEx
(nCurrentKey,m.cValueName,;
m.lpdwReserved,@lpdwType,@lpbData,@ lpcb data)
m . ckey value = LEFT(m . lpb data,m.lpcbData-1)
ENDPROC
0条评论