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;