有时, 开发者可能需要关联某些文件扩展名到自定义的 Visual FoxPro 应用程序. 它在要求对指定类型的文件执行某种操作时是有用的. 例如, 开发者可能想运行 .ZZ0 文件并编辑 .ZZ1 文件. 以下示例演示如何在 Visual FoxPro 中用 API 调用来完成该任务.
注意: 使用该示例中的代码时,需要 Visual FoxPro 6.0 和 Visual Studio 6.0 Service Pack 3 (VFP6_SP3) . 这是因为在自定义的 Visual FoxPro 应用程序中编译程序的能力只在 VFP6_SP3 才能实现.
设置关联
在 Windows 桌面创建一个新的名为 RUNTEST.TXT 的文本文件,其内容如下:
MESSAGEBOX("你好!",48,"通过 API 关联")
将该文件的扩展名由 .TXT 改为 .ZZ0. 当被提示文件可能变为不可用时选择确认.
在桌面复制一个 RUNTEST.ZZ0 并命名为 MODITEST.ZZ1.
注意: 这些文件的图标将变为 Windows 标志,如果双击它们将产生一个 "打开方式…"对话框. 如果出现以上情况, 说明文件扩展名没有与机器上的任何程序关联. 如果没有出现 "打开方式…"对话框, 则有一个已安装的应用程序与该扩展名关联. 如果是这样,切莫运行本应用程序! 若运行可能会破坏你的电脑上的文件关联.
打开 Visual FoxPro 并复制以下代码到一个新的程序文件中:
LOCAL nResult,nDisplay, cKeyName, cKeyValue, nKeyLen
#DEFINE SECURITY_ACCESS_MASK 983103 && SAM value KEY_ALL_ACCESS
#DEFINE SHCNE_ASSOCCHANGED 0x08000000
#DEFINE HKEY_CLASSES_ROOT -2147483648
#DEFINE SHCNF_IDLIST 0x0000
DECLARE RegCreateKeyEx IN ADVAPI32.DLL;
INTEGER,STRING,INTEGER,STRING,INTEGER,INTEGER,INTEGER,INTEGER @, INTEGER @
DECLARE RegSetValueEx IN ADVAPI32.DLL;
INTEGER,STRING,INTEGER,INTEGER,STRING,INTEGER
DECLARE RegCloseKey IN ADVAPI32.DLL INTEGER nHKey
DECLARE SHChangeNotify IN Shell32.DLL INTEGER, INTEGER, STRING, STRING
* 创建一个叫 aaApp 的根入口
nResult=0
nDisplay=0
cKeyName = "aaAPP"
cKeyValue = "My Application"
nKeyLen = LEN(cKeyValue)
RegCreateKeyEx(HKEY_CLASSES_ROOT,cKeyName ,0,"REG_SZ", ;
0,SECURITY_ACCESS_MASK,0,@nResult,@nDisplay)
RegSetValueEx(nResult,"",0,1,cKeyValue ,nKeyLen)
RegCloseKey(@nResult)
* 创建一个叫做 .ZZ0 的与 aaApp 关联的根入口
nResult= 0
nDisplay = 0
cKeyName = ".ZZ0"
cKeyValue = "aaApp"
nKeyLen = LEN(cKeyValue)
RegCreateKeyEx(HKEY_CLASSES_ROOT,cKeyName,0,"REG_SZ",;
0,SECURITY_ACCESS_MASK,0,@nResult,@nDisplay)
RegSetValueEx(nResult,"",0,1,cKeyValue,nKeyLen)
RegCloseKey(@nResult)
* 创建一个叫做 .ZZ1 的与 aaApp 关联的根入口
nResult= 0
nDisplay = 0
cKeyName = ".ZZ1"
cKeyValue = "aaApp"
nKeyLen = LEN(cKeyValue)
RegCreateKeyEx(HKEY_CLASSES_ROOT,cKeyName,0,"REG_SZ",;
0,SECURITY_ACCESS_MASK,0,@nResult,@nDisplay)
RegSetValueEx(nResult,"",0,1,cKeyValue,nKeyLen)
RegCloseKey(@nResult)
* 为与 aaApp 关联的文件设置命令行
* 路径需要修改.
nResult= 0
nDisplay = 0
cKeyName = "aaApp/shell/open/command"
*
* 修改该路径以反映你的目录结构
*
cKeyValue = "C:/WINDOWS/Desktop/testexe.exe %1"
*
*
*