Доброго времени суток. Подскажите пожалуйста, мне необходимо создать процессы (несколько разных в разное время) со скрытыми окнами, то есть чтобы наличие процесса не отразилось на экране, таксбаре и по альттабу. Большего сокрытия не требуется. Я пробывал сделать так: Код (Text): STARTUPINFO si; si.cb = sizeof(STARTUPINFO); si.wShowWindow = 0; si.dwFlags = STARTF_USESHOWWINDOW; С какими то процессами работает нормально, а некоторые процессы игнорируют параметры запуска и создают окна по своему усмотрению. Пробывал делать так: Код (Text): BOOL CALLBACK HideThreadWndProc(HWND hWnd, LPARAM lParam) { ShowWindow(hWnd, 0); return TRUE; } ... while(flag) { EnumThreadWindows(pi.dwThreadId, HideThreadWndProc, 0); } Работает для всех процессов, но окошко успевает мигнуть на мгновение. К сожалению это не устраивает. Может есть какие-то более корректные для данной ситуации методы? ЗЫ Про создание процесса в другом десктопе знаю, к сожалению тоже не подходит.
спасибо, но я не хочу использовать пацанские алгоритмы для такой задачи)) на машинах стоят последние кисы, то есть WriteProcessMemory не обойдешься, а делать что-то сложнее не хочется)) скажите, а можно ли создаваемое окно извне запихать по z-индексу за десктоп?
Ы! а вообще тут понимаете какая проблема, окно то создается в одном потоке, а скрыть вы хотите в другом, таким образом всегда будет вероятность "мелькания". Короче я хз тогда как. А вы скожите почему на другой десктоп нельзя?
Ну тогда так: создать окно на весь экран, вывести в него предварительно снятый скриншот десктопа а потом тихонько спрятать.
Ну прям на днях наткнулся на ранее незамеченный аналогичный топик с WASM.BEGINNERS - как запустить программу скрытой, решил было поучаствовать задним числом - да и забыл. И вот та же тема, напомнили
Всего лишь пример решения в частном случае: скрытно запускаем Process Hunter by Ms-Rem (не забываем вписать свой путь P.S. Всякий, кто приступает к задаче скрытного запуска, первым делом обнаруживает, что штатное средство от MS - - срабатывает далеко не всегда. Зависит от конкретной проги. А уж если в прогу включить противодействие скрытому запуску - то ваще... Кстати, для модальных диалогов можно заранее установить, сможет ли этот флаг управлять состоянием окна диалога при запуске: хотите, чтоб не влиял - вставьте в шаблон модального диалога WS_VISIBLE.
Это все бесполезно. Мужик хочет, что любой процесс запускаемый из "него" не открывал никаких окон. Это явно "пацанская прога" получится, но он талдычит .
Код (Text): main: invoke CreateProcess,addr buf,0,0,0,FALSE,NORMAL_PRIORITY_CLASS,0,0,addr sis,addr pi mov eax,pi.dwProcessId mov pid,eax invoke FixPid,eax hookproc: .if nCode==HCBT_CREATEWND invoke GetWindowThreadProcessId,wParam,addr var mov edx,var .if edx==pid Race Condition Поскольку процесс создаётся не засуспенженым, то он может создать окно быстрее, чем будет выполнена FixPid. Впрочем, к вопросу об xp sp3 это не должно относиться. Интересная особенность при следующих параметрах на Win7 x64: Окно winver'а таки появляется и тут же скрывается. А если так запустить калькулятор, то он появится, скроется, и снова появится. Похоже, там механизм тотальной отображаемости. Пользуясь случаем, хотелось бы спросить насчёт "invoke CallNextHookEx,hhook,nCode,wParam,lParam". Подобное встречали уже в нескольких программах (в трёх, на самом деле) и никак не можем интерпретировать включение выделенного параметра в код хука. Действительно – "invoke SetWindowsHookEx,WH_CBT,offset HookProc,hinst,0; mov hhook,eax" – hhook может принять осмысленное значение уже после выполнения "CallNextHookEx, hhook,..". Значит, опять Race Condition, ведущее к потенциальному трудноуловимому багу — точнее, было бы RaceCondition, если бы CallNextHookEx не игнорировала значение этого параметра. [...в целях экономии пространства здесь было вырезано полкилобайта бесценных рассуждений]. Таким образом, есть ли какая-то ускользнувшая от нас причина вставления hhook в расшаренную секцию хуковой длл?
Sol_Ksacap msdn говорит что hHook нужен только в win9x http://msdn.microsoft.com/en-us/library/ms644974%28VS.85%29.aspx