Привет. Мне нужно открыть программу скрытно. Запускаю через ShellExecute, ставлю SW_HIDE, но программа просто сворачивается, а мне нужно, чтобы ее не было и на панели задач (как это делает функция ShowWindow с SW_HIDE). Попробовал сделать с CreateProcess, но не вышло
Как оказалось, нужная мне программа даже с ShowWindow не скрывается. Как быть? Мне нужно, чтобы программа не отображалась на панели задач и самой ее не было видно. Спасибо!
e4key Некоторые предложат использовать какието перехваты, манипуляции списками и пр., но это не актуально. Задача не будет существовать самостоятельно, если будет использовать ресурсы другой задачи, как частный случай контекст другого процесса. Отсюда и следует исходить.
e4key А SetWindowPos winHandle, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER Or SWP_HIDEWINDOW прокатывает?
Имеется ввиду создание нового системного процесса типа svchost.exe выделение в нем памяти и переключении контекста? Если так, то он будет запущен от имени пользователя, что неприменно вызовет подозрение.
Оконная программа. От юзера ничего скрывать не надо Просто моя программа вызывает другую, получает от туда некую информацию и закрывает. Просто не хочется, чтобы у юзера перед носом что-то мигало
e4key ну если программа константная, то просто запустить цикл, который после запуска будет скрывать все окна класса этой программы, до завершение приложения Код (Text): // создадим процесс CreateProcess(...); // подождем появление окна, к примеру в цикле, но если программа не создаст окна и выйдет с ошибкой, то и делать нечего register int x; while (ProcessRunning&&!x) { Sleep(0); x = FindWindow(...); }; // далее пока находятся окна это программы их скрываем while (ProcessRunning&&x) { ShowWindow(x, SW_HIDE); x = FindWindow(...); }; иначе просто процесс не успевает создать окно. на быстрой системе это конечно может вылезти, на микросекундочку, но на слабой вполне сойдет, особенно если программа написана на ЯВУ.
Решения типа Sleep\FindWindow ужасают. CreateProcess – параметр STARTUPINFO.wShowWindow значит, не работает? Окей, можно попробовать создать новый десктоп (CreateDesktop) и установить параметр STARTUPINFO.lpDesktop. В зависимости от того, как один получает информацию, может понадобится сделать SetThreadDesktop для получающего информацию потока. В совсем крайнем случае можно попробовать хукнуть функцию ShowWindow (NtUserShowWindow?).
Sol_Ksacap а нельзя сделать сначала по проще. для начала desktop, далее приведенные циклы и потом только хук, но на яву может быть принудительно задан десктоп, да и для ожидания можно использовать не слип, а какую-нибудь функция типа WaitFor для проверки параметра ProcessRunning и циклы эти призваны лишь дождаться появления окна, а не завершения процесса.
e4key Как я понял ты хочешь что бы в панели задач не висела твоя прога... Код (Text): DWORD style; style = GetWindowLong( hWnd, GWL_EXSTYLE ); style |= WS_EX_TOOLWINDOW; SetWindowLong( hWnd, GWL_EXSTYLE, style); так вроде...вырубить "иконку" в панеле задач. А вот что бы окно стало прозрачным я вызывал после CreateWindow в твоем случае после FindWindow: Код (Text): SetWindowPos( hLockWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_HIDEWINDOW ); правда тебе не нужен HWND_TOPMOST,посмотри что там мсдн говорит и поймеш что тебе надо
max7C4 У нас, лайк, различаются оценочные функции. И это, видимо, нормальное явление. Подобный вариант, будучи реализованным без всяких беговых условий, смотрелся бы много лучше хука, определённо. Однако в данный момент мы не видим ни одной апи, позволяющей вот так вот дождаться создания окна (видим только WaitForInputIdle, но там опять-таки получается как минимум гоночное условие, к сожалению).
а нельзя ли создать окно и применить к нему стиль WS_HIDDEN?) тогда оно будет отображатся только в диспетчере задач)когда мне надо было так делать(сделать скрытую программу,без видимого окна) то я так и делал
3dfunn WS_HIDDEN для чужой программы делается через ShowWindow sometime ни кто не мешает поменять у них (дочерних окон) родителя Sol_Ksacap ну а немного проанализировать код. к примеру прога закрывает свои копии или может запускаться кучу раз.
max7C4 я вобщем говорил про то мои слова относились к а причем тут -не понимаю Но знаю точно что можно десктоп поменять для любого родителя и он тоже станет не видимым вместе с дочерными окнами.