尊旭网
当前位置: 尊旭网 > 知识 >

findwindow

时间:2024-10-19 12:01:26 编辑:阿旭

C语言在FindWindow()中使用类名,结果本来多个窗口,只输出了一个句柄,用数组也是如此。

FindWindowEx
说明


在窗口列表中寻找与指定条件相符的第一个子窗口


返回值


Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError


参数表


参数
类型及说明


hWnd1
Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找)


hWnd2
Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索


lpsz1
String,欲搜索的类名。零表示忽略


lpsz2
String,欲搜索的类名。零表示忽略


C语言FindWindow和SetFocus的问题

FindWindow返回HWND类型的句柄。在MSDN上关于SetFocus函数的介绍,其中有一句很关键“该窗口必须与调用线程的消息队列相关。”意思就是说在窗口线程中才可以对这个窗口SetFocus(),估计你是别的线程中对查找到的窗口,然后使用SetFocus,所以失败了。

SetFocus函数的说明:

函数功能:该函数对指定的窗口设置键盘焦点。该窗口必须与调用线程的消息队列相关。
函数原型:HWND SetFocus(HWND hWnd)。
参数:
hWnd:接收键盘输入的窗口指针。若该参数为NULL,则击键被忽略。
返回值:若函数调用成功,则返回原先拥有键盘焦点的窗口句柄。若hWnd参数无效或窗口未与调用线程的消息队列相关,则返回值为NULL。若想要获得更多错误信息,可以调用GetLastError函数。


vb中API函数findwindow的详细用法

vb中FindWindow函数可以用来返回窗体的句柄。
1、VB6.0中的API声明:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
2、具体使用:
dim i as long
i=FindWindow(vbNullString,"窗体的标题")
注意:这里的vbNullString是空的,没有任何字符,即不传递。和""空字符串是不一样的!
3、例子:
有一个标题名字是计算器的窗体或软件,获取这个计算器的句柄
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Command1_Click()
Dim i As Long
i = FindWindow(vbNullString, "计算器")
msgbox& i '显示窗体句柄
End sub


FindWindow怎么用

Find Window的函数原型:

FindWindow(
lpClassName, {窗口的类名}
lpWindowName: PChar {窗口的标题}
): HWND; {返回窗口的句柄; 失败返回 0}

C语言测试代码(假如要查系统自带的 放大镜 窗口,前提是已经打开放大镜窗口):

HWND h = FindWindow(NULL, "放大镜");
if(0 == h)
{
ShowMessage("can't find 放大镜");

}
else
{
ShowMessage(IntToStr(h)); //查找到窗口,并且打印出该窗口的句柄

}


FindWindow()的返回值究竟是什么

FindWindow是典型的窗口类封装API函数,你的困惑在于两种环境下,其实使用的是不同的函数。win32 SDK编程环境下,::FindWindow是WINAPI函数,返值是句柄;MFC下,FindWindow使用的是窗口类CWnd::FindWindow函数,返值是窗口类指针。从MFC移植到SDK,麻烦是不可避免的,只能逐一修改,因为没法用到很多MFC封装的类。但反过来移植,就容易多了,因为MFC兼容全部API函数。参考:CWnd类FindWindow实现代码_AFXWIN_INLINE CWnd* PASCAL CWnd::FindWindow(LPCTSTR lpszClassName, LPCTSTR lpszWindowName) { return CWnd::FromHandle(::FindWindow(lpszClassName, lpszWindowName)); } 如果你能使用CWnd类,那么FromHandle就可以获取窗口类指针。