使用win32函数需要导入
using system.runtime.interop services;
///summary
//获取窗体的句柄函数
////summary
///param name='lpClassName '窗口类名/param
///param name=' LP窗口名称'窗口标题名称/param
返回/returns句柄/returns
[dllimport('user32.dll ',输入点=' findwindow ',SetLastError=true ) ]
publicstaticexternintptrfindwindow (stringlpclassname,string lpWindowName );
函数概述:
函数:此函数获取类名和表单名称与指定字符串匹配的顶层表单的句柄。 此函数不搜索子窗体。 搜索不区分大小写。
函数类型: hwnd findwindow (lpctstripclassname,LPCTSTR IpWindowName );
参数:
IpClassName :标识指定类名的空结束字符串或类名字符串成员的指针。 假设此参数是成员,则它必须是上次调用theGlobafAddAtom函数时生成的全局成员。 此成员必须为16位,位于IpClassName的后16位,前0位。
IpWindowName :指定表单名称(表单标题)的空结束字符串。 如果此参数为空,则所有表单将完全匹配。
返回值:假设函数成功,返回值是具有指定类名和表单名称的表单句柄。 如果函数失败,则返回值为空
[dllimport('user32.dll ',输入点=' findwindowex ',SetLastError=true ) ]
publicstaticexternintptrfindwindowex (intptrhwndparent,uint hwndChildAfter,string lpszClass,string lpszWindow );
函数概述:
函数原型: hwnd findwindowex (hwndhwndparent,HWND hwndChildAfter,lpctstr lpsz类,LPCTSTR lpszWindow );
参数:
hwndParent :查找子窗口的父窗口句柄。
如果hwnjParent为NULL,则函数使用桌面窗口作为父窗口来搜索桌面窗口的所有子窗口。
windows nt 5.0 andl ater :如果hwnd parent为HWND_MESSAGE,则函数仅搜索所有消息窗口。
hwndChildAfter :子窗口句柄。 从查找z订单中的下一个子窗口开始。 子窗口必须是hwndPareRt窗口的直接子窗口,而不是后代窗口。 如果HwndChildAfter为NULL,则搜索从hwndParent的第一个子窗口开始。 如果hwndParent和hwndChildAfter同时为NULL,则函数将搜索所有顶级窗口和消息窗口。
lpszClass :标识指定类名的空结束字符串或类名字符串成员的指针。 如果此参数是成员,则它必须是上次调用theGlobaIAddAtom函数时生成的全局成员。 此成员必须为16位,位于lpClassName的后16位,前0位。
lpszWindow :指定窗口名称(窗口标题)的空结束字符串。 如果此参数为NULL,则所有窗口都完全匹配。 返回值:如果函数成功,则返回值是具有指定类名和窗口名的窗口句柄。 如果函数失败,则返回值为空。
使用方法:
const int BM_CLICK=0xF5; intptrmaindhwnd=findwindow (空,' QQ用户登录'); //QQ登录框的句柄if (主hwnd!=intptr.zero (intptrchildhwnd=findwindowex ) maindhwnd,intptr.zero,null,'登录'); 获取//按钮的手柄if (child hwnd!=intptr.zero (sendmessage (child hwnd,BM_CLICK,0,0 ); 发送已单击//按钮的消息(else ) (messagebox.show ) (“找不到子窗口”); }}else{ MessageBox.Show ('找不到窗口); }但是,在使用中,控件的标题可能带有下划线。 因此,必须如下标记“”。
intptrchildhwnd=findwindowex (主hwnd,IntPtr.Zero,null,' no(n ) ); 获取//按钮的句柄