Win32 API - Спрятать окно до того как оно отобразилось на экране

Аватара пользователя
Sanchos

Win32 API - Спрятать окно до того как оно отобразилось на экране

Сообщение Sanchos »

В общем суть вопроса такова:

Есть утилита, которая никак не реагирует на запуск себя как HIDE. Она всё время запускается видимая и с активным фокусом.

Если применить ShowWindow hwnd, SW_HIDE сразу после запуска, тогда видно моргание окна, то есть оно сначала появляется и тут же прячется.

Нужно как то "спрятать" его сразу после запуска, но до того как окно отобразится... говорят что можно сделать хук на это дело.

Правда ли это, и если можно то как именно?
Аватара пользователя
Casper-SC

Re: Win32 API - Спрятать окно до того как оно отобразилось на экране

Сообщение Casper-SC »

Я вот тоже искал ответ на этот вопрос. Но или ярано перестал искать или просто посчитал вполне возможным сделать так:

Просто делаю, чтобы форма не отображала своё присутствие на панели задач, и имела координаты на экране по оси Х: -ширина формы -10 (десять с потолка на всякий случай).



C#

Проверено, работает:



Код:

Код: Выделить всё

        public Form1()
        {
            InitializeComponent();
            this.ShowInTaskbar = false;
            this.StartPosition = FormStartPosition.Manual;
            this.Left = -this.Width - 10;
        }

Какая разница как прятать, главное работает. да и антивирус явно не заругается.
Аватара пользователя
ganselo

Re: Win32 API - Спрятать окно до того как оно отобразилось на экране

Сообщение ganselo »

Можно перехватить API функцию, которая создаёт окно и выставить ей флаг SW_HIDE. Некоторые антивирусы могут ругатся на такое, т.к. большинство вирусов используют перехват API.
Аватара пользователя
Sanchos

Re: Win32 API - Спрятать окно до того как оно отобразилось на экране

Сообщение Sanchos »

Знать бы ещё какие функции перехватывать и самое главное КАК ))))
Аватара пользователя
Sanchos

Re: Win32 API - Спрятать окно до того как оно отобразилось на экране

Сообщение Sanchos »

Sanchos CreateProcess() - создать (запустить) процесс с атрибутом wShowWindow в STARTUPINFO равному SW_HIDE. Консольные программы при этом даже не показываются, есть шанс что и данная оконная утилита поведёт себя так же.
Аватара пользователя
Admiral

Re: Win32 API - Спрятать окно до того как оно отобразилось на экране

Сообщение Admiral »

Я пробовал через CreateProcess(), в этом случае возникает куча ошибок в самом приложении.
Аватара пользователя
RUVATA

Re: Win32 API - Спрятать окно до того как оно отобразилось на экране

Сообщение RUVATA »

что за утилита, есть исходники?



.StartInfo.UseShellExecute = False

пробовал?
Аватара пользователя
Sanchos

Re: Win32 API - Спрятать окно до того как оно отобразилось на экране

Сообщение Sanchos »

Какие исходники? )))) утилита сторонняя, к тому же является частью недешёвой программы.

Называется BarCode Vizard

.StartInfo.UseShellExecute = False это где пробовать?
Аватара пользователя
Admiral

Re: Win32 API - Спрятать окно до того как оно отобразилось на экране

Сообщение Admiral »

Спасибо за ссылку. Крутил я эту прогу и так и сяк. Запускать запускает, но всё как обычно.

И ещё, после недавних тестов, отказался от ShowWindow hWnd, SW_HIDE. Почему то на ХР с ним заметно тормознее отсылаются команды приложению. А порой и вообще подвисает.
Ответить

Вернуться в «Программирование и базы данных»