Как спрятать програму от Alt+Tab?

Тема в разделе "Delphi - FAQ", создана пользователем anjey, 20 апр 2005.

Статус темы:
Закрыта.
  1. anjey

    anjey Гость

    есть основная форма (при запуске невидима) на ней куча всяких настроек (вызывается из трея) в частности как должна выглядеть вторая форма (поверх всех окон или нет, прозрачная - или нет)
    вторая форма видима - на ней отображается текущее время и пр.
    из панели задач обе формы я убрал, но все они видны через Alt+Tab при отображении на экране
    тобиш

    .....
    MainForm.FormCreate(Sender: TObject);
    begin
    // непоказывать окно приложения
    Application.ShowMainForm := False;
    // скрыть окна из панели задач
    SetWindowLong (Application.Handle,GWL_EXSTYLE,NOT WS_EX_APPWINDOW);
    ....
    end;

    во втром модуле кроме обработчика события на таймере ничего нет
    если использовать
    h := FindWindow (nil, 'Program Manager');
    windows.setparent (handle, h);
    то потом все попытки настроить вид второй формы бесполезны
     
  2. zubr

    zubr Гость

    Эта тема уже обсуждалась здесь
     
  3. anjey

    anjey Гость

    да там ваще какуюто хе№;% несли
    какие там еще драйвера
    у меня на компе миранда стоит в процесах видна, а по Alt+Tab нет, хотя окно на экране видно

    и если внимательно читать че написано выше то можно понять ято приложение выполняет какието действия и драйвером или сервисом его ну никак не назовеш

    кста тут поковырялся
    короче немного поиграл с параметрами SetWindowLong (без windows.setparent)
    вроде получается тока есть пару но
    - вид основного окна как у окна инструментов
    - при включении поверх всех окон все настройки сбрасываются и форма видна по Alt+Tab

    // непоказывать окно приложения
    Application.ShowMainForm := False;
    SetWindowLong (Application.Handle,GWL_EXSTYLE,NOT (WS_EX_APPWINDOW ));
    SetWindowLong (Основная форма.Handle,GWL_EXSTYLE, GetWindowLong (Основная форма,GWL_EXSTYLE) OR WS_EX_TOOLWINDOW);
    SetWindowLong (Вторая форма.Handle,GWL_EXSTYLE, GetWindowLong (Вторая форма.Handle,GWL_EXSTYLE) OR WS_EX_TOOLWINDOW);
     
  4. Barmutik

    Barmutik Гость

    Попробуйте следующее:

    Код (Text):
     ExtendedStyle := GetWindowLong(application.Handle, GWL_EXSTYLE);
    SetWindowLong(Application.Handle,GWL_EXSTYLE, ExtendedStyle or (not WS_EX_APPWINDOW));
    И во второй форме:

    Код (Text):
     protected
     procedure CreateParams(var Params: TCreateParams); override;

    ...............

    procedure TForm2.CreateParams(var Params: TCreateParams);
    begin
    inherited CreateParams(Params);
    with Params do begin
     ExStyle := ExStyle or WS_EX_TOPMOST;
     WndParent := GetDesktopwindow;
    end;
    end;

    procedure TForm2.FormCreate(Sender: TObject);
    var
    CurStyle: Integer;
    begin
    CurStyle := GetWindowLong(Handle, GWL_EXSTYLE);
    CurStyle := (CurStyle or WS_EX_TOOLWINDOW) and (not WS_EX_APPWINDOW);
    SetWindowLong(Handle, GWL_EXSTYLE, CurStyle);
    end;
    В Вин2000 и ХР всё работает...

    Да и кстати не стоит так негативно отзываться о том что было написано в топиках :angry:
    Там обсуждалась немного другая тема...
     
  5. Guest

    Guest Гость

    а как установить параметр поверх всех окон для второй формы если окно уже отображено на экране
    например при нажатии на кнопку
     
  6. Barmutik

    Barmutik Гость

    В нашем варианте сходу установить его не получилось ... надо смотреть возможно ли это вообще...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей