用EnumWindows枚举窗口,然后在回调函数里判断如果窗口是可见的,则将程序数量加1,这样应该可以获得程序数。
=============================
期待更好的解决方法!
=============================
期待更好的解决方法!
解决方案 »
- 多了三角, 按csdn传统, 散分庆祝了****
- 哪本书详细讲到FindFirst和FindNext查找文件???
- 用ADO直接连接Excel出现的问题,然后用DBGrid显示,但是Excel中部分单元格数据无法在DBGrid中显示,请教各位大侠是什么问题?
- 菜鸟求助,急!!!
- 怎样响串口输出一个指定的电压(如10V)
- 我想截获所有的键盘消息,不管是送往哪个应用程序的键盘消息,可以吗?给他100分
- 拜师学艺呀!吾乃一介武夫!忽转型!想作文人!!望各位大侠成全!!
- delphi对excel表格的调用问题?
- 怎么将Treeview.Items.Item[i].data的值赋给一个record类型的变量啊?
- 那位会根据计算机名算出IP(注意:运行程序的计算机与所求计算机的域名服务器不是一台)!
- 怎么修改记录中某个字段的值?
- 在线等待,马上送分:怎样将Query查询的数据集全部删除,数据库SQL中的数据也删除
enumwindows倒是不难的,
BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // callback function
LPARAM lParam // application-defined value
);BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
);
//////////////////////////////////////////////////////
procedure TForm1.FormShow(Sender: TObject);
var I : integer;
begin
EnumWindows(@WndEnumProc,LongInt(ListView1));
{for I := Listview1.Items.Count - 1 downto 0 do begin
if Listview1.Items[i].Caption = '' then
Listview1.Items.Delete(i);
end;}
end;function WndEnumProc(H: Hwnd; LParam : TListview): boolean;
var
Buff : PChar;
begin
Result := true;
GetMem(Buff,255);
GetWindowText(H, Buff, 255);
//if buff <> '' then
//;LParam.Items.Add();
//Add);
New(X);
X^.Caption := StrPas(Buff);
X^.HND := H;
with LParam.Items.Add do begin
Caption := X^.Caption;
Data := X;
end;
// L.Add(X);
FreeMem(Buff);
end;
声明是这样的;
function WndEnumProc(H : Hwnd; LParam : TListView): boolean; StdCall;type
Pa = ^Ta;
Ta = record
Caption : string;
HND : Hwnd;
end;