C#中,findWindow函数怎么不能找到??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中,findWindow函数怎么不能找到??相关的知识,希望对你有一定的参考价值。

在 C# 中使用 FindWindow() 函数时,有可能会找不到窗口。这可能是由于以下几个原因导致的:

    窗口句柄不存在: FindWindow() 函数只能查找已经存在的窗口,如果窗口不存在或已经关闭,则无法找到窗口句柄。

    窗口标题不匹配: FindWindow() 函数只能查找具有特定标题的窗口,如果标题不匹配或者拼写错误,则无法找到窗口句柄。

    窗口类名不匹配: FindWindow() 函数只能查找具有特定类名的窗口,如果类名不匹配或者拼写错误,则无法找到窗口句柄。

    窗口不在当前桌面: FindWindow() 函数只能查找在当前桌面的窗口,如果窗口在其他桌面或者运行在其他用户账户中,则无法找到窗口句柄。

    如果你确定窗口已经存在,可以尝试使用其他方法,比如 EnumWindows 函数来枚举所有窗口,再找到你需要的窗口。

参考技术A 1.缺少declare,正确的描述如下
private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

2 declare的说明
Declare 语句

用于在模块级别中声明对动态链接库 (DLL) 中外部过程的引用。
语法 1
[Public | Private] DeclareSubnameLib"libname" [Alias"aliasname"] [([arglist])]
语法 2
[Public | Private] DeclareFunctionnameLib"libname" [Alias"aliasname"] [([arglist])] [Astype]
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[( )] [Astype]

以上是关于C#中,findWindow函数怎么不能找到??的主要内容,如果未能解决你的问题,请参考以下文章

FindWindow函数执行失败,无法找到窗口句柄

C# 获取窗体的句柄和获取窗体中的空间

如何使用vba在windowapi中使用findwindow函数定位窗口?

C#的winform中怎么根据函数找到对应的控件?

vb怎么定义一个函数,比如用findwindow,用不了啊,出现子程序或函数未定义

关于vb2005中用到的arp函数findwindow无法在user32.dll中找不到findwindowA接口