Напиши сам на Delphi. Сперва получи список handle'ов окон, а потом с помощью функций API посылай им команды HIDE/SHOW. Для получения списка:
Код:
var
Wnd: hWnd;
buff: array [0..127] of char;
wCap: string;
begin
Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 do
begin
if (Wnd <> Application.Handle) and
(GetWindow(Wnd, gw_Owner) = 0) and
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then
begin
wCap := StrPas(buff);
{здесь получено handle окна и его имя в переменных Wnd и wCap соответственно}
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
end;
Добавлено через 1 час и 32 минуты:
Вот тебе проверенный код (компоненты располагай на форме сам):
Код:
unit untHS;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ValEdit, ExtCtrls, StdCtrls, Buttons;
type
TfrmHS = class(TForm)
vleHS: TValueListEditor;
bitRefresh: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure vleHSSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure vleHSClick(Sender: TObject);
procedure bitRefreshClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmHS: TfrmHS;
implementation
{$R *.dfm}
var
SelectedWnd: integer;
procedure TfrmHS.FormCreate(Sender: TObject);
begin
SelectedWnd := 0;
end;
procedure TfrmHS.vleHSSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
SelectedWnd := ARow;
end;
procedure TfrmHS.vleHSClick(Sender: TObject);
var
Wnd: hWnd;
begin
Wnd := 0;
if vleHS.Cells[0, SelectedWnd] <> '' then
Wnd := StrToInt(vleHS.Cells[0, SelectedWnd]);
if Wnd = 0 then Exit;
if not IsWindowVisible(Wnd) then ShowWindow(Wnd, SW_SHOWNOACTIVATE)
else ShowWindow(Wnd, SW_HIDE);
vleHS.Repaint;
bitRefreshClick(Sender);
end;
procedure TfrmHS.bitRefreshClick(Sender: TObject);
var
Wnd: hWnd;
buff: array [0..127] of char;
addStr: string;
begin
vleHS.Strings.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 do begin
if (Wnd <> Application.Handle) and
(GetWindow(Wnd, gw_Owner) = 0) and
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then begin
if IsWindowVisible(Wnd) then addStr := '+' else addStr := '--';
addStr := IntToStr(Wnd) + '=[' + addStr + '] ' + StrPas(buff);
vleHS.Strings.Add (addStr);
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
end;
end.