想到了用
h:=getwindow()
while h<>0 then
  getwindowtext(),
但这样找出来的窗体有许多是不可见的窗体,如什么“电源控制”……好象应该用enumwindow(),但不能具体实现。
哪个大师能帮帮忙?

解决方案 »

  1.   

    implementationprocedure EnumProc(hWnd: DWORD; lParam: DWORD);
    begin
      if IsWindowVisible(hWnd) then
      begin
        //...
      end;
    end;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      EnumWindows(@Enumproc, 0);
    end;end.
      

  2.   

    function EnumWndProc(AWnd: HWND; AlParam: LPARAM):Boolean;stdcall;
    var
     WndCaption: array[0..254] of Char;
    begin
     GetWindowText(AWnd, @WndCaption, 254);
    if IsWindowVisible(awnd) then
    begin
     if WndCaption[0]<>chr(0) then
       Form1.ListBox1.Items.Add(Format('%d  =  %s',[AWnd,StrPas(WndCaption)]));
    end;
     Result := True;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    EnumWindows(@EnumWndProc,0);
    end;
    呵呵,给分吧!
      

  3.   

    去掉没有用的
    function EnumWndProc(AWnd: HWND; AlParam: LPARAM):Boolean;stdcall;
    begin
    if IsWindowVisible(awnd) then//可视窗体吗?
    begin
       Form1.ListBox1.Items.Add(inttostr(awnd));
    end;
     Result := True;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    EnumWindows(@EnumWndProc,0);
    end;
      

  4.   

    借宝地一问:stdcall是什么东东?EnumWndProc是delphi自带的还是windows的?
      

  5.   

    Stadcall看帮助吧,说不清楚!
    EnumWndProc是自定义一个回调函数!
      

  6.   

    for i:=0 to screen.FormCount - 1 do
      

  7.   

    大家都说了。另外:
    blueshu(绝对是菜鸟)的方法只可以枚举当前进程的VCL窗体。