利用findwindow(nil,'窗口名')找到窗口句柄,设置ShowWindow(句柄,SW_Hide),并做了一个隐藏的按钮,在只有一个程序的情况下,可以实现。
但是如果需要打开两个程序,两个程序的窗口名是相同的,那么怎样才能实现点击这个隐藏按钮,同时把两个程序都隐藏起来呢?用上面的程序使用,一般情况是先隐藏了其中的一个,把程序关掉,再执行,有时候可以把第二个也隐藏掉,有时候就不行。请问各位,有什么方法可以实现功能??

解决方案 »

  1.   

    procedure TForm1.HideWindows();
    var
      hd: HWND;
      sz: PAnsiChar;
    begin
      hd:=GetWindow(Handle,GW_HWNDFIRST);
      GetMem(sz, 200);
      while hd<>0 do
        begin
          GetWindowText(hd, sz, 200);
          if sz = 'Form1' then
            ShowWindow(hd, SW_Hide);
          hd:=GetWindow(hd,GW_HWNDNEXT);
        end;
      FreeMem(sz);
    end;
      

  2.   

    可能我描述不清楚~
    意思是,运行两个记事本程序,取同样的文件名'测试 - 记事本',
    怎么使点击隐藏按钮,同时的把两个记事本全部隐藏起来unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      WinH:THandle;
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    WinH:=FindWindow(nil,'测试 - 记事本');
    if WinH = 0 then
    ShowMessage('未找到');
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShowWindow(WinH,SW_Hide);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    ShowWindow(WinH,SW_Show);
    end;end.我把代码贴出来了,用这个代码执行,一次只能隐藏一个记事本.
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);var
      hCurrentWindow:HWnd;
      szText: array[0..254] of char;  begin
      hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
      while hCurrentWindow <> 0 do
      begin
     GetWindowText(hCurrentWindow, @szText, 255);
     if StrPas(@szText)):='测试 - 记事本' then
      ShowWindow(hCurrentWindow,SW_Hide);
      hCurrentWindow:=GetWindow(hCurrentWindow, GW_HWNDNEXT);
    end;
    end;遍历窗口,如果窗口标题='测试 - 记事本'就隐藏它。