Как скрыть программу из списка который появляется по нажатию Alt+Tab
Попробовал написать так (по аналогии с Delphi)
Style = WS_EX_TOOLWINDOW;
SetWindowLong(Application->Handle, GWL_EXSTYLE, Style);
На панели задач программа пропала, но по Alt+Tab ее все равно видно...
Помогите, добрые люди :)
SetWindowLong(Application->Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
Пробовалось, правда на диалоговом приложении написанном под VC6.
SetWindowLong(Application->Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
Пробовалось, правда на диалоговом приложении написанном под VC6.
Везде тоже пишут, что должно получиться, но я же прекрасно вижу, что программа есть в списке, с двумя первыми строчками или без, все равно не получается... :(
[INDENT]
!WS_EX_APPWINDOW = 0, скорее всего, т.е. преобразовано к булевому значению.
и толку от этого .... никакого, только вред
Т.е. в данном случае, нужно писать не
Style = WS_EX_TOOLWINDOW;
а
Style |= WS_EX_TOOLWINDOW;
просто как то пропустил, акцент поставил на другом.
!WS_EX_APPWINDOW = 0, скорее всего, т.е. преобразовано к булевому значению.
и толку от этого .... никакого, только вред
я нашел тут и сделал по аналогии
uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
var
ExtendedStyle : integer;
begin
Application.Initialize;
ExtendedStyle:=GetWindowLong(application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
ExtendedStyle or WS_EX_TOOLWINDOW {AND NOT WS_EX_APPWINDOW});
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
что толку нет, я понял...
Но вопрос остается открытым...
Style =| WS_EX_TOOLWINDOW;
Style &= ~WS_EX_APPWINDOW;
SetWindowLong(Application->Handle, GWL_EXSTYLE, Style);
Т.е. в данном случае, нужно писать не
Style = WS_EX_TOOLWINDOW;
а
Style |= WS_EX_TOOLWINDOW;
Так тоже попробовал. Толку нет. Может дело не в коде, а в настройках компилятора? Компилирую в Borland C++Builder 6, специально ничего не настраивал...
Style =| WS_EX_TOOLWINDOW;
Style &= ~WS_EX_APPWINDOW;
SetWindowLong(Application->Handle, GWL_EXSTYLE, Style);
Тоже не работает...
Style |= WS_EX_TOOLWINDOW;
Style ^= WS_EX_APPWINDOW;
SetWindowLong(Application->Handle, GWL_EXSTYLE, Style);
Строкой Style ^= WS_EX_APPWINDOW;
мы правильно исключаем стиль WS_EX_APPWINDOW из набора
работает,
но моя запись короче :))
а то мож. у тебя проблем не совсем в этом :)
а то мож. у тебя проблем не совсем в этом :)
Я уже предположил про проблемы в другом месте, но куда копать не знаю...
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("ncmf.cpp", MainForm);
USEFORM("ncsf.cpp", SettingsForm);
USEFORM("ncaf.cpp", AboutForm);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HANDLE hFile = CreateFile("nclockisrun.tmp",
GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, NULL);
if(hFile == INVALID_HANDLE_VALUE)
return 1;
DWORD Style = GetWindowLong(Application->Handle, GWL_EXSTYLE);
Style |= WS_EX_TOOLWINDOW;
Style ^= WS_EX_APPWINDOW;
SetWindowLong(Application->Handle, GWL_EXSTYLE, Style);
try
{
Application->Initialize();
Application->Title = "nuclear clock";
Application->CreateForm(__classid(TMainForm), &MainForm);
Application->CreateForm(__classid(TSettingsForm), &SettingsForm);
Application->CreateForm(__classid(TAboutForm), &AboutForm);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
Благодарю за программу! Найду и обязательно попробую
Надо где-то в др. месте, в функции инициализации формы например
Кстати, а какую умную книгу (кроме MSDN) можно почитать про программирование исключительно на API? :)
А после Application->Initialize() я тоже пробовал и не помогло :)
Даже не знаю, я когда-то давно учился так: взял исходник программы "Hello world" и по хелпу Borland C++, искал, что делает каждая функция. Потом просто почитал оттуда же файл win32.hlp по главам. Одновременно с этим и C постигал. А первый мой язык был ассемблер на Spectrum, вот и не захватил я как-то MFC и прочие, облегчающие жизнь программиста, примочки :)
Почему так, да потому что до вызова метода Run(), я как понимаю на самом деле диаложек не отобразиться, че там делают функции CreateForm не знаю, а билдеровской справки под рукой нет.
Самый верный выход: как я говорил, создать на главном диаложке кнопочку и по нажатию на неё попробовать поменять стили.
Дома попробую :))
Почему так, да потому что до вызова метода Run(), я как понимаю на самом деле диаложек не отобразиться, че там делают функции CreateForm не знаю, а билдеровской справки под рукой нет.
Самый верный выход: как я говорил, создать на главном диаложке кнопочку и по нажатию на неё попробовать поменять стили.
Дома попробую :))
Ураа! Короче, вроде решил проблему.
Надо сделать так:
1. В свойствах формы свойство BorderStyle установить в значение bsToolWindow.
2. В том файлике кот. ты показывал дописать перед вызовом: Application->Run();
такие строчки:
style |= WS_EX_TOOLWINDOW;
SetWindowLong(Application->Handle,GWL_EXSTYLE,style);
У меня это достаточным.
P.S. Почемуто без п.1 ничего не получалось.
ИМХО лучше программить с помощью VisualStudio.
Надо сделать так:
1. В свойствах формы свойство BorderStyle установить в значение bsToolWindow.
2. В том файлике кот. ты показывал дописать перед вызовом: Application->Run();
такие строчки:
style |= WS_EX_TOOLWINDOW;
SetWindowLong(Application->Handle,GWL_EXSTYLE,style);
У меня это достаточным.
P.S. Почемуто без п.1 ничего не получалось.
ИМХО лучше программить с помощью VisualStudio.
Так. Ясно. Тоже получилось. Спасибо! Но возникает другая проблема. Мне BorderStyle нужен bsNone, т.к. в любом другом случае у меня у окна есть заголовок, который мне не нужен
или ошибся? :rolleyes:
ЗЫ: никада так не баловался )
Но самое интересное, что если на хендл стиль не наложить ни фига не выходило :)) (в моём последнем варианте)