VFP中调用API函数启动邮件程序

Author: 潘泳 Date: 2000年 第47期

  我们启动一个非Visual FoxPro的应用程序,经常使用的是RUN命令。使用RUN命令只需要应用程序的文件名及其路径,比如我们需要从Visual FoxPro中启动位于C:\PWIN98目录下的计算器程序CALC.EXE,就可以使用命令RUN C:\PWIN98\CALC.EXE来实现。该命令还有其他的一些参数,用来控制应用程序被激活时的状态,具体可以参考Visual FoxPro的帮助文件。
  但是,在很多情况下我们并不能够清楚地知道所需要启动的应用程序的文件名及其位置。比如我们需要启动用户机器上缺省的WWW浏览器并连接到某一个网站地址,该用户使用的可能是IE,也可能是NetScape,还有可能是其他的浏览器软件如Opera,这时候RUN命令就显得无能为力了。
  我们知道,在桌面上或者是资源管理器里双击某个文件时,Windows 就会自动调用与该文件相关联的应用程序来对其进行处理。比如我们在桌面上双击某个DOC文件,Windows就会启动Word并将该DOC文件打开。在这个过程中Windows使用了一个名为ShellExecute 的Win32 API函数,其功能是打开或者是打印某个指定的文件,这个文件可以是一个可执行文件,也可以是一个文档。这个命令包含在Windows自带的SHELL32.DLL文件中,调用的语法为:
  HINSTANCE ShellExecute(
  HWND hwnd, // 指向调用本命令之父窗口的句柄
  LPCTSTR lpOperation, //指定本命令所要执行的动作
  LPCTSTR lpFile, // 指定本命令所要操作的文件
  LPTSTR lpParameters, // 指定操作文件时所使用的参数
  LPCTSTR lpDirectory, // 指定本命令所使用的缺省路径
  INT nShowCmd // 指定文件被打开时的状态
  );
  以下这段程序介绍了在Visual FoxPro中声明ShellExecute函数并调用缺省的电子邮件软件向wushanpy@sina.com发送电子邮件的方法。
  * 声明ShellExecute函数
  DECLARE INTEGER ShellExecute IN shell32.DLL INTEGER HWND,;
  STRING lpszOP, ;
  STRING lpszFile, ;
  STRING lpszParams, ;
  STRING lpszDir, ;
  INTEGER fsshowcmd
  * 声明GetDesktopWindow函数,该函数激活Windows桌面
  DECLARE INTEGER GetDesktopWindow IN win32api
  * 指定从Windows桌面上运行ShellExecute函数
  HWND = GetDesktopWindow()
  lpszOP = ″″
  * 指定ShellExecute操作的文件为mailto:wushanpy@sina.com
  lpszFile = ″mailto:wushanpy@sina.com″
  lpszParams = ″″
  * 指定ShellExecute的缺省目录为C:\
  lpszDir = ″C:\″
  fsshowcmd = 1
  * 执行ShellExecute命令
  LNRETURN = ShellExecute(HWND, lpszOP, lpszFile, lpszParams, lpszDir,fsshowcmd)
  如果需要启动缺省的WWW浏览器并连接到某个站点,只需要将参数lpszFile换成该站点的URL地址即可。关于ShellExecute命令的其他用法,可以参考Visual FoxPro所提供的Win32 API 帮助。