首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

Declare INTEGER 命令和shellexecute函数解决方案

2012-02-23 
Declare INTEGER 命令和shellexecute函数DeclareINTEGERmciSendStringINwinmm.DLLSTRING,STRING@,INTEGER,

Declare INTEGER 命令和shellexecute函数
Declare   INTEGER   mciSendString   IN   winmm.DLL   STRING   ,STRING   @,INTEGER   ,INTEGER  
=mcisendstring( "open   "+cmusicname+ "   alias   sound ",@BUFFER,80,0)
=mcisendstring( "play   sound   from   0 ",@BUFFER,80,0)

i= "http:// "+allt(thisform.text1.value)
DECLARE   INTEGER   ShellExecute   IN   SHELL32.DLL   INTEGER   ,STRING   ,STRING   ,STRING   ,STRING   ,INTEGER  
return   shellexecute(0, "open ",i, " ", " ",1)

DECLARE这个是怎用的?不明的说明书都唔清楚啊~!~~
shellexecute(0, "open ",i, " ", " ",1)这是什么函数?请锡教~~~~!

[解决办法]
注册一个外部共享库中的函数。库是 32-位动态链接库文件(.DLL)。


DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName]
[cParamType1 [@] ParamName1, cParamType2 [@] ParamName2, ...]


 

参数
cFunctionType

表明共享库返回值的数据类型,如果有返回值的话。如果函数没有返回值,则省略 cFunctionType. cFunctionType 可以是以下值:
 
cFunctionType 说明
SHORT
16-位 整数

INTEGER
32-位 整数

SINGLE
32-位 浮点数

DOUBLE
64-位 浮点数

LONG
32-位 长整数

STRING
字符串

OBJECT
IDispatch 对象类型 *NEW


FunctionName

指定 Visual FoxPro 中要注册的共享库名。这个参数中传递的函数名要求区分大小写。
注意:
DLL 函数名可以与 Win32 API 手册中规定的不同。例如,MessageBox 函数应该命名为 MessageBoxA (对于单字节字符)和 MessageBoxW (对于 UNICODE)。如果 Visual FoxPro 不能定位 FunctionName 指定的 DLL 函数,则将字母 A 追加到函数名尾部,并且 Visual FoxPro 用新的函数名重新搜索。
 


 

如果指定的共享库函数与一个 Visual FoxPro 函数同名,或函数名不是一个合法的 Visual FoxPro 名,当注册此函数时,将用 AS 子句分配一个别名,这点在后面将要说明。也可以用 OBJECT 作为一个返回值,例如 "DECLARE OBJECT myfunc IN some DLL ... " 虽然 COM 通常没有任何这种格式的 API 。例如:
复制程序代码
DECLARE INTEGER AccessibleObjectFromWindow IN oleacc.dll ;
integer, integer, string , object @


IN LibraryName

指定外部共享库名,其中包含用 FunctionName 指定的函数。如果为 LibraryName 指定 WIN32API,则 Visual FoxPro 在Kernel32.dll, Gdi32.dll, User32.dll, Mpr.dll, 和 Advapi32.dll 中搜索 32-位 Windows .dll 函数。
AS AliasName

为一个与 Visual FoxPro 函数同名或不合法的共享库函数名,指定一个别名。AliasName 不能是 Visual FoxPro 保留字或已经由 Visual FoxPro 注册的共享库函数名。如果给函数指定了别名,可以用别名调用共享库函数。AliasName 不区分大小写。
cParameterType1[@] ParamName1, cParameterType2[@] ParamName2, ...

指定传递给共享库函数的参数类型。共享库函数由 cParameterType 指定需要的参数类型。cParameterType 可以为以下某一类型:
 
cParameterType 说明
INTEGER
32-位 整数

SINGLE
32-位 浮点数

DOUBLE
64-位 浮点数

LONG
32-位 长整数

STRING
字符串

如果参数不是共享库中的函数所希望的类型,Visual FoxPro 产生一条错误。Null 值可以传递一个空的字符串。调用函数时,若按引用传递一个参数,必须在这条命令的参数 cParameterType 后面、调用函数相应变量的前面,包含(@)标记。 如果在 DECLARE 中或在调用函数中没有包含 @,参数就按值传递。有关需要按引用传递参数的共享库函数的详细内容,请参见您的操作系统或环境的程序员指南(例如,为了获得传递参数到Windows DLL 时的信息,可翻阅 Microsoft Win32 程序员指南)。
注意:
参数名 ParamName1, ParamName2, 等等是可选的,Visual FoxPro 或共享库函数并不使用它们。可以包含它们作为函数接收的参数名和参数类型的提示。
 


 

备注
在 Visual FoxPro 中调用一个共享库函数前,必须发出带有函数名、包含该函数的共享库名以及函数将要接收的参数类型的 DECLARE 命令。

为了提供向后兼容性,Visual FoxPro 仍然支持使用 SET LIBRARY 命令调用外部 API 库。(使用 SET LIBRARY,您可以访问 Foxtools.fll 中的函数。)但是,使用 DECLARE 是注册共享库函数的首选方法。

虽然 Visual FoxPro 添加了 OBJECT cFunctionType 到这个命令,但其主要是用于支持一些 ActiveX Accessibility API 例程,一般可以用于其它 Windows API 例程中。

有关调用共享库函数的更多信息,请参见您的操作系统或环境的程序员指南(例如,为了获得调用 DLL 的信息,可翻阅 Microsoft Win32 程序员指南)。

执行 DISPLAY STATUS 或 LIST STATUS 可显示已注册的函数名。执行 CLEAR ALL 或 CLEAR DLLS 可从内存中删除已注册的函数。

示例
这个示例用来为 Visual FoxPro 返回当前活动的 Windows 窗口句柄,或者如果您切换到其它 Windows 应用程序返回 0 。当显示 WAIT 窗口时,可在 5 秒内按下 ALT+TAB ,来切换到不同的 Windows 应用程序,或您可以作为活动的应用程序离开 Visual FoxPro。



复制程序代码
CLEAR
DECLARE INTEGER GetActiveWindow IN win32api
WAIT WINDOW "现在您可以切换到另一个应用程序了 " TIMEOUT 5
? GetActiveWindow( )


[解决办法]
用过《网络蚂蚁》的朋友都知道,在帮助菜单的对话框里作者留下了他的电子邮件地址,单击该邮件地址我们便能给作者发送电子邮件。这种功能看起来有些神秘,实际上只要利用Windows API的ShellExecute函数,便可轻松地实现该功能。

  ShellExecute是用来打开特定格式的文件(如WORD文件、EXCEL表格)的函数。该函数存放在Shell32.DLL动态链接库中,通过查阅MSDN,我们能够得到下述帮助:

  HINSTANCE ShellExecute(HWND hwnd,LPCTSTR lpOperation,LPCTSTR lpFile,LPCTSTR lpParameters,LPCTSTR lpDirectory,INT nShowCmd);

  其调用参数的含义如下:

  hwnd:指明打开文件的窗口句柄。

  lpOperation:指明操作类型,分别是 "open "(打开)、 "print "(打印)、 "explore "(浏览)。

  lpFile:欲打开文件的文件名。这里应该将文件的含义向更深层次理解。文件可以是本地文件,也可以是远程文件;文件的类型可以是文本文件,也可以是多媒体文件。

  lpParameters:打开文件时所传递的参数。特别适合打开EXE文件。

  lpDirectory:文件所在路径。

  nShowCmd:打开文件时窗口的状态。0表示隐藏,1正常方式、2最小化方式、3最大化方式。

  如果该函数能够成功打开文件,则该函数的返回值大于32。该函数的返回值能够为你调试程序提供很多有用的信息,具体情况见MSDN内帮助文件。

  好,有了上述认识之后,我们便能在VFP的程序开发中利用ShellExecute函数来实现发送电子邮件的功能。新建一表单ABOUTME,在该表单上添加下列控件(见表1)。

  需要说明的是,在Label1中的MouseIcon设为一手型光标,其所对应的图标文件在系统内可以随处找到(利用查找文件功能),本文用的是Windows自带h_move.cur文件。针对Label11的各类设置都是为了将该标签打扮得更象 "超文本 "。

  添加完上述控件之后,接下来便是编写控件的CLICK事件代码了。对Label1和Label2的CLICK事件设定相同,其他代码为:

  *进行声明操作:

  DECLARE INTEGER ShellExecute IN shell32.DLL INTEGER HWND,STRING,STRING lpszFile,STRING,STRING,INTEGER

  *向kingdom@126.com邮箱内发送一封主题为 "你好 "的电子邮件。

  在Label1的CLICK事件里,添加以下代码:

  ShellExecute(0, "open ", "mailto:kingdom@126.com?subject=你好 ",0,0,1)

  在Label2的CLICK事件里,将上述语句改为:

  ShellExecute(0, "open ", "http://NationalTax.home.Chinaren.com ",0,0,1)

  *以最大化窗口方式打开IE,进入作者主页。

  确认按钮的CLICK事件代码很简单:thisform.release

  运行上述表单,当鼠标移动到电子邮件或是作者主页区域时,鼠标便会变成一只手,点一下即可进行相应的操作:单击Label1,启动Outlook Express;单击Label2,启动IE,表单真有些像一个小型的IE!其实,在VFP的程序开发中,一些看似不可能的事件只要稍微用到一些Windows API,所有的事件一下子都变得简单多了。 "山重水复疑无路,柳暗花明又一村 ",这可能就是编程的乐趣所在吧

  Windows API简介:

  Application Program Interface,即应用程序编程接口,它是Windows提供给程序员的一系列函数。这些API函数同一般的函数相似,同样具有输入输出参数,并编译到一个独立的文件中,该文件被称为动态链接库。运用API函数可以实现许多复杂和有趣的功能,如重新启动计算机、跟踪当前激活窗体、收发E-mail等。   

[解决办法]
激活一个 Visual FoxPro 系统的菜单项。


SYS(1500, cSystemItemName, cMenuName)


 

参数
cSystemItemName

指定要激活的 Visual FoxPro 系统菜单项名称。
cMenuName

指定包含该菜单项的 Visual FoxPro 系统菜单或子菜单的名称。
返回值
字符型

解释
要列示 Visual FoxPro 菜单和菜单项的名称可以查看 系统菜单名称 。同样可以使用 SYS(2013) - 系统菜单名称字符串 来显示 Visual FoxPro 菜单和菜单项名称的列表。

用户自定义菜单项和废止的系统菜单项不能用 SYS(1500) 激活。

SYS(1500) 返回空串。

示例
下列示例使用 SYS(1500) 来粘贴一个命令到程序文件中。

复制程序代码
_CLIPTEXT = "MESSAGEBOX( 'TEST ') " && Command to paste
MODIFY COMMAND myprog NOWAIT && Open a program file
SYS(1500, '_MED_PASTE ', '_MEDIT ') && Paste menu item

热点排行