Показать полную графическую версию : Спрятать окно до того как оно отобразилось на экране
В общем суть вопроса такова:
Есть утилита, которая никак не реагирует на запуск себя как HIDE. Она всё время запускается видимая и с активным фокусом.
Если применить ShowWindow hwnd, SW_HIDE сразу после запуска, тогда видно моргание окна, то есть оно сначала появляется и тут же прячется.
Нужно как то "спрятать" его сразу после запуска, но до того как окно отобразится... говорят что можно сделать хук на это дело.
Правда ли это, и если можно то как именно?
Casper-SC
24-08-2010, 21:03
Я вот тоже искал ответ на этот вопрос. Но или ярано перестал искать или просто посчитал вполне возможным сделать так:
Просто делаю, чтобы форма не отображала своё присутствие на панели задач, и имела координаты на экране по оси Х: -ширина формы -10 (десять с потолка на всякий случай).
C#
Проверено, работает:
public Form1()
{
InitializeComponent();
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.Manual;
this.Left = -this.Width - 10;
}
Какая разница как прятать, главное работает. да и антивирус явно не заругается.
Можно перехватить API функцию, которая создаёт окно и выставить ей флаг SW_HIDE. Некоторые антивирусы могут ругатся на такое, т.к. большинство вирусов используют перехват API.
Знать бы ещё какие функции перехватывать и самое главное КАК ))))
Sanchos CreateProcess() - создать (запустить) процесс с атрибутом wShowWindow в STARTUPINFO равному SW_HIDE. Консольные программы при этом даже не показываются, есть шанс что и данная оконная утилита поведёт себя так же.
Я пробовал через CreateProcess(), в этом случае возникает куча ошибок в самом приложении.
что за утилита, есть исходники?
.StartInfo.UseShellExecute = False
пробовал?
Какие исходники? )))) утилита сторонняя, к тому же является частью недешёвой программы.
Называется BarCode Vizard
.StartInfo.UseShellExecute = False это где пробовать?
Sanchos, а если через эту программу запустить Скрытный запуск приложений (NB: скрытно - значит без промелькиваний) (http://wasm.ru/forum/viewtopic.php?id=35899)?
p.s.
В архиве присутствует исходный код.
Спасибо за ссылку. Крутил я эту прогу и так и сяк. Запускать запускает, но всё как обычно.
И ещё, после недавних тестов, отказался от ShowWindow hWnd, SW_HIDE. Почему то на ХР с ним заметно тормознее отсылаются команды приложению. А порой и вообще подвисает.
.StartInfo.UseShellExecute
например:
MyProcess.StartInfo.FileName = "7z"
' StartInfo.FileName - если приложение не описанно в sys.переменной PATH,
' то указывать полное имя к программе... н\п "C:\Program Files\7-Zip\7z.exe"
MyProcess.StartInfo.UseShellExecute = False
' это праметр определяет оболочку которая необходима для запуска процесса
' это приблуда для кроссплатформенности - ЗАБЫЛИ тупо всегда назначаем "False"
' тобишь открываем Wind-ой
MyProcess.StartInfo.RedirectStandardInput = True
' перенаправление потока ВВОД, и дискриптора 2 на стандартный поток реального времени
MyProcess.StartInfo.RedirectStandardOutput = False
' перенаправление потока ВЫВОД нам ни в коем случае не нужно... так что назначаем "False"
' и не забываем что речь идет о процессе у него все зеркально пользователю... т.е. то что пользователю ВЫВОД
' то процессу ВВОД
MyProcess.Start()
' запуск процесса.
Console.ReadKey()
' остановка на получении NextKey в консоли... для того чтоб она не закрылась
Да это уже и не важно...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.