Q&A

  • 한방에 열려있는 모든 익스플로러창 닫을려면 어떻게 해야하나요?
몇일전까지 그소스가 있었는데 지금 하드디스크가 날아가버리는 바람에 모든소스를 다 잃어버렸어요...

부탁드립니다.
1  COMMENTS
  • Profile
    김영대 2003.03.29 07:15
    // 안녕하세요  김영대(http://www.howto.pe.kr) 입니다

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

    type
      TForm1 = class(TForm)
        Button1: TButton;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation
    {$R *.dfm}

    function EnumWindowsProc(Wnd: HWND; lb: TListbox): BOOL; stdcall;
    var
      ClassName: string;
      caption: Array [0..128] of Char;
    begin
      Result := True;
      SetLength(ClassName, 255);

      if IsWindowVisible(Wnd) and // invisible 윈도우는 제외
         ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or // top-level 윈도우만
          (HWND(GetWindowLong(Wnd, GWL_HWNDPARENT)) = GetDesktopWindow)) and
         ((GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW) = 0) then
      begin
        // 윈도우의 Title 캡션을 읽어온다
        SendMessage(Wnd, WM_GETTEXT, Sizeof(caption), integer(@caption));

        // 윈도우의 클래스명을 읽어온다
        GetClassName(Wnd, PChar(ClassName), 255);
        SetLength(ClassName, StrLen(PChar(ClassName)));

        lb.Items.AddObject(caption +' - '+ClassName, TObject(Wnd));

        // Microsoft Internet Explorer의 클래스명은 IEFrame  
        if ClassName = 'IEFrame' then
          PostMessage(Wnd, WM_CLOSE, 0, 0); // Close Window

      end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ListBox1.Clear;
      EnumWindows(@EnumWindowsProc, Integer(ListBox1));
    end;

    end.