怎样得到一个程序的classname?(100分)

  • 主题发起人 主题发起人 amourz
  • 开始时间 开始时间
A

amourz

Unregistered / Unconfirmed
GUEST, unregistred user!
比如说,IE的classname是IEFrame,这怎么得到的。如果是我自己的一个程序如aaa.exe,它<br>的classname是什么呢?如何得到?
 
我抄的,很简单:<br>放一个Timer:Timer1和3个Label:labParent,labHandle,labclassname<br><br>procedure TForm1.Timer1Timer(Sender: TObject);<br>var<br>&nbsp; p:TPoint;<br>&nbsp; h:HWND;<br>&nbsp; s:array [0..255] of char;<br>begin<br>&nbsp; GetCursorPos(p);<br>&nbsp; h:=WindowFromPoint(p);<br>&nbsp; GetClassName(h,s,255);<br>&nbsp; labHandle.Caption:=format('0x%x',[h]);<br>&nbsp; labclassname.Caption:=s;<br>&nbsp; h:=GetParent(h);<br>&nbsp; GetClassName(h,s,255);<br>&nbsp; labParent.Caption:=s;<br>end;
 
classname=类名<br><br>应用程序不是类,所以不会有classname。但里面的表单、按钮、控件都有它们的classname
 
unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, ExtCtrls, StdCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Timer1: TTimer;<br>&nbsp; &nbsp; labHandle: TLabel;<br>&nbsp; &nbsp; labClassName: TLabel;<br>&nbsp; &nbsp; labParent: TLabel;<br>&nbsp; &nbsp; procedure Timer1Timer(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.Timer1Timer(Sender: TObject);<br>var<br>&nbsp; p:TPoint;<br>&nbsp; h:HWND;<br>&nbsp; s:array [0..255] of char;<br>begin<br>&nbsp; GetCursorPos(p);<br>&nbsp; h:=WindowFromPoint(p);<br>&nbsp; GetClassName(h,s,255);<br>&nbsp; labHandle.Caption:=format('0x%x',[h]);<br>&nbsp; labclassname.Caption:=s;<br>&nbsp; h:=GetParent(h);<br>&nbsp; GetClassName(h,s,255);<br>&nbsp; labParent.Caption:=s;<br>end;<br><br>end.<br><br>晕呀,怎么我的代码这么快就被贴上了呀,服!算我没写
 
[^][:)][:D][8D]
 
那如何判断一个程序正在运行,比如IE或者aaa.exe。我看到可以用findwindow('IEFrame',nil)<br>,这个IEFrame从何而来?
 
findwindow(类名,窗口名),类名或窗口名知其一即可。<br>IEFrame是类名,你用ysai的程序或Spy++能看到。把鼠标放在IE的标题栏,然后看<br>classname,就是IEFrame。
 
那难道没有好的办法了?我的要求是只要知道这个程序的文件名,就可以判断它是否处于运行<br>中,如果运行,就把他关闭。我知道可以用列举当前进程的方法,把所有进程都列出来,<br>然后拿这个程序名去比较,发现他在里面,就把他杀掉。但这种方法太费资源,把不需要<br>的进程也列出了。有没有省资源的方法,根据文件本身去找他是否处于运行中?
 
你用你用ysai的程序或Spy++得到类名之后写在程序里就行了,并不用把这段代码写进去。
 
多人接受答案了。
 
后退
顶部