Board logo

标题: 如何 获得窗口的名称 [打印本页]

作者: gingsin    时间: 2006-5-31 12:22     标题: 如何 获得窗口的名称

我想将EXCEL中的数据写进一个ACCESS数据库
本来数据库的数据是从一个窗口逐条输入的,这个窗口是由ACCESS PROJECT转化而来的EXE文件.现在的问题是不能确定窗口的名称(PS.我用了窗口顶部的名称,但宏不认).
哪位大侠能指教一二.谢谢!!!!!!!111
作者: Nothing    时间: 2006-5-31 13:09

GetWindowText
使用这个API
作者: gingsin    时间: 2006-6-6 12:57

我本来想用FINDWINDOW函数的,但好象要类名称,不知道ACCESS PROJECT转化来的EXE文档有没有通用的类名称.
还有具体的API函数的DECLARE哪里能得到.
谢谢!!!!!
作者: Nothing    时间: 2006-6-6 13:03

直接查看MSDN吧,这个是开发人员必备的手册

Declare 语句

      

用于在模块级别中声明对动态链接库 (DLL) 中外部过程的引用。

语法 1

[Public | Private] Declare Sub name Lib "libname" [Alias "aliasname"] [([arglist])]

语法 2

[Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]

Declare 语句的语法包含下面部分:

部分 描述
Public 可选的。用于声明对所有模块中的所有其它过程都可以使用的过程。
Private 可选的。用于声明只能在包含该声明的模块中使用的过程。
Sub 可选的(但 Sub 或 Function 二者需选其一)。表示该过程没有返回值。
Function 可选的(但 Sub 或 Function 二者需选其一)。表示该过程会返回一个可用于表达式的值。
name 必需的。任何合法的过程名。注意动态链接库的入口处(entry points)区分大小写。
Lib 必需的。指明包含所声明过程的动态链接库或代码资源。所有声明都需要 Lib 子句。
libname 必需的。包含所声明的过程动态链接库名或代码资源名。
Alias 可选的。表示将被调用的过程在动态链接库 (DLL) 中还有另外的名称。当外部过程名与某个关键字重名时,就可以使用这个参数。当动态链接库的过程与同一范围内的公用变量、常数或任何其它过程的名称相同时,也可以使用 Alias。如果该动态链接库过程中的某个字符不符合动态链接库的命名约定时,也可以使用 Alias。
aliasname 可选的。动态链接库或代码资源中的过程名。如果首字符不是数字符号 (#),则 aliasname 是动态链接库中该过程的入口处的名称。如果首字符是 (#),则随后的字符必须指定该过程的入口处的顺序号。
arglist 可选的。代表调用该过程时需要传递的参数的变量表。
type 可选的。Function 过程返回值的数据类型;可以是 Byte、布尔、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)或 Variant,用户定义类型,或对象类型。


arglist 参数的语法以及语法各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]

部分 描述
Optional 可选的。表示参数不是必需的。如果使用该选项,则 arglist 中的后续参数都必需是可选的,而且必须都使用 Optional 关键字声明。如果使用了 ParamArray,则任何参数都不能使用 Optional。
ByVal 可选的。表示该参数按值传递。
ByRef 表示该参数按地址传递。 ByRef 是 Visual Basic 的缺省选项。  
ParamArray 可选的。只用于 arglist 的最后一个参数,表示最后的参数是一个 Variant 元素的 Optional 的数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByVal、ByRef或 Optional 一起使用。
varname 必需的。代表传给该过程的参数的变量名;遵循标准的变量命名约定。
( ) 对数组变量是必需的。指明 varname 是一个数组。
type 可选的。传递给该过程的参数的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object、Variant、用户自定义的类型或对象类型。


说明

对Function 过程而言,过程的数据类型决定其返回值的数据类型。可以在 arglist 之后使用 As 子句来指定函数返回值的数据类型。在 arglist 中,可以使用 As 子句来指定任何传给该过程的参数的数据类型。不单可以指定为任何标准数据类型,还可以在 arglist 中指定 As Any 来禁止类型检查,从而允许将任意数据类型传递给该过程。

空圆括号表示该 Sub 或 Function 过程没有参数,且 Visual Basic 应确保不会传递任何参数。在下面的示例中,First 不带任何参数。如果对 First 的调用中使用了参数,就会产生错误:

Declare Sub First Lib "MyLib" ()

如果带参数表,则每次调用该过程时都要检查参数的个数和类型。在下面的示例中,First 有一个 Long 参数:

Declare Sub First Lib "MyLib" (X As Long)

注意 在 Declare 语句的参数表中不能有定长的字符串;只有变长的字符串才能传给过程。定长的字符串可以作为过程参数使用,但在传递前都要被转换为变长的字符串。

注意 当所调用的外部过程需要一个值为 0 的字符串时,就要使用 vbNullString 常数。该常数与零长度字符串 ("") 是不相同的。
作者: Nothing    时间: 2006-6-6 13:03

Declare 语句示例
该示例演示如何在标准模块的模块级使用 Declare 语句来声明对动态链接库 (DLL) 中的一个外部过程的引用。如果是 Private 的 Declare 语句,则可以用于类模块。

'在 Microsoft Windows(16 位)中:
Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
'假设 SomeBeep 是该过程名的别名。
Declare Sub MessageBeep Lib "User" Alias "SomeBeep"(ByVal N As Integer)
'在 Alias 子句使用顺序号来调用 GetWinFlags。
Declare Function GetWinFlags Lib "Kernel" Alias "#132"() As Long

'在 32 位 Microsoft Windows 系统中,指定的库应是 USER32.DLL,
'而不是 USER.DLL。可以使用条件编译来编写
'既可在 Win32 又可在 Win16 环境运行的代码。
#If Win32 Then
   Declare Sub MessageBeep Lib "User32" (ByVal N As Long)
#Else
   Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
#End If
作者: Nothing    时间: 2006-6-6 13:03

以上的内容都转自MSDN
作者: gingsin    时间: 2006-6-6 17:48

再问ACCESS PROJECT转化来的EXE文档有没有通用的类名称,谢谢大虾指教!!!!!1111
作者: Nothing    时间: 2006-6-6 22:11

ACCESS PROJECT转成EXE,是不是将Access写的程序转成Exe文件呀,这样当是不能实现的。
作者: gingsin    时间: 2006-6-19 13:30

大概就是吧,我遇到的情况是:通过一个exe文档给一个access数据库输入数据。现在想建一个宏,要调用这个exe文档,但是在得到这个exe文档的名称时遇到了麻烦!!!!!!
作者: Nothing    时间: 2006-6-20 01:26

不过你这样用宏调用EXE文件是不可以的,因为涉及到安全的问题,这是绝对不可以的。很久以前的时候,宏可以操作的东西很多,但那时宏病毒也很多,后来MS加强了Office的安全性,再调用这个的方式很难实现了。
作者: gingsin    时间: 2006-6-23 12:12

那么我调用该EXE文件的窗口可行吗?其实我就是想调用该窗口,但是窗口的名称难以获得,想用API但不是很容易
多谢大侠的回帖!!!!!!!!
作者: Nothing    时间: 2006-6-23 18:52

可以使用Shell,等到启运的程序运行完了再执行下面的操作。
不过调用Shell需要用VB,而不是Access里的VBA,VBA很难调用API这些东西的。
不过你可以将安全级别调到最低,调用FILE对像试试。
作者: 黑发的放牧者    时间: 2006-9-23 08:41     标题: 回复 #12 Nothing 的帖子

看了你们的讨论,似乎明白了一点点东西!




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0