GetClassName,该函数获得指定窗口或控件所属的类的类名。
函数原型
int GetClassName(HWND hWnd, LPTSTR IpClassName, int nMaxCount);
参数
hWnd:窗口的句柄及间接给出的窗口所属的类。
IpClassName:指向接收窗口类名字符串的缓冲区的 指针。
nMaxCount:指定由参数lpClassName指示的缓冲区的字节数。如果类名字符串大于缓冲区的长度,则多出的部分被截断。
返回值
如果函数成功,返回值为拷贝到指定缓冲区的字符个数:如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
【AHK实现】方式如下:
;测试2: 看看 "计算器" 窗口的类名(先启动计算器)
WinGet,h,ID,计算器 ; {这句是获取计算器窗口的句柄}
WinGetClass, classname, ahk_id %h%
MsgBox ahk_class %classname% ;输出 {CalcFrame}
;测试3: 看看记事本窗口的类名(先重新启动记事本):
WinGet,h,ID,无标题 - 记事本 ; {这句是获取记事本窗口的句柄}
WinGetClass, classname, ahk_id %h%
MsgBox ahk_class %classname% ;输出 {Notepad}
【AHK调用Dll】方式如下:
WinGet,h,ID,计算器
VarSetCapacity(c,255,0)
DllCall("GetClassNameW","int",h, "Ptr", &c, "Int", 255) ;获取控件类
classname := StrGet(&c,255)
MsgBox %classname%
【Delphi实现】方式如下:
WinAPI: GetClassName - 获取指定窗口的类名
//声明:
GetClassName(
hWnd: HWND; {指定窗口句柄}
lpClassName: PChar; {缓冲区}
nMaxCount: Integer {缓冲区大小}
): Integer; {返回类名大小; 失败返回 0}
--------------------------------------------------------------------------------
//测试1: 新建一个工程, 主窗口的类名默认是 TForm1, 用程序获取一下看看
var
ps: array[0..254] of Char;
begin
GetClassName(Handle, ps, 255);
ShowMessage(ps); {TForm1}
end;
--------------------------------------------------------------------------------
//测试2: 看看 "计算器" 窗口的类名(先启动计算器)
var
h: HWND;
ps: array[0..254] of Char;
begin
h := FindWindow(nil, '计算器'); {这句是获取计算器窗口的句柄}
GetClassName(h, ps, 255);
ShowMessage(ps); {SciCalc}
end;
--------------------------------------------------------------------------------
//测试3: 看看记事本窗口的类名(先重新启动记事本):
var
h: HWND;
ps: array[0..254] of Char;
begin
h := FindWindow(nil, '无标题 - 记事本'); {这句是获取记事本窗口的句柄}
GetClassName(h, ps, 255);
ShowMessage(ps); {Notepad}
end;