как запустить программу скрытой

Тема в разделе "WASM.BEGINNERS", создана пользователем e4key, 31 авг 2009.

  1. e4key

    e4key New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2009
    Сообщения:
    101
    Привет. Мне нужно открыть программу скрытно.

    Запускаю через ShellExecute, ставлю SW_HIDE, но программа просто сворачивается, а мне нужно, чтобы ее не было и на панели задач (как это делает функция ShowWindow с SW_HIDE). Попробовал сделать с CreateProcess, но не вышло :dntknw:
     
  2. e4key

    e4key New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2009
    Сообщения:
    101
    Как оказалось, нужная мне программа даже с ShowWindow не скрывается. Как быть?

    Мне нужно, чтобы программа не отображалась на панели задач и самой ее не было видно.

    Спасибо!
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    e4key
    Некоторые предложат использовать какието перехваты, манипуляции списками и пр., но это не актуально.
    Задача не будет существовать самостоятельно, если будет использовать ресурсы другой задачи, как частный случай контекст другого процесса. Отсюда и следует исходить.
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    e4key
    А SetWindowPos winHandle, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER Or SWP_HIDEWINDOW прокатывает?
     
  5. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Имеется ввиду создание нового системного процесса типа svchost.exe выделение в нем памяти и переключении контекста? Если так, то он будет запущен от имени пользователя, что неприменно вызовет подозрение.
     
  6. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Flint_ta
    СreateProcessАsUser отменили?
    e4key
    что это за программа. консольная/оконная/и то и другое?
     
  7. e4key

    e4key New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2009
    Сообщения:
    101
    Оконная программа. От юзера ничего скрывать не надо :) Просто моя программа вызывает другую, получает от туда некую информацию и закрывает. Просто не хочется, чтобы у юзера перед носом что-то мигало :)
     
  8. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Это вот как тут описано?
    http://bug.fatal.ru/dlinnoenazvanie.html
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    e4key
    ну если программа константная, то просто запустить цикл, который после запуска будет скрывать все окна класса этой программы, до завершение приложения
    Код (Text):
    1. // создадим процесс
    2. CreateProcess(...);
    3. // подождем появление окна, к примеру в цикле, но если программа не создаст окна и выйдет с ошибкой, то и делать нечего
    4. register int x;
    5. while (ProcessRunning&&!x)
    6. {
    7.   Sleep(0);
    8.   x = FindWindow(...);
    9. };
    10. // далее пока находятся окна это программы их скрываем
    11. while (ProcessRunning&&x)
    12. {
    13.   ShowWindow(x, SW_HIDE);
    14.   x = FindWindow(...);
    15. };
    иначе просто процесс не успевает создать окно. на быстрой системе это конечно может вылезти, на микросекундочку, но на слабой вполне сойдет, особенно если программа написана на ЯВУ.
     
  10. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Решения типа Sleep\FindWindow ужасают.

    CreateProcess – параметр STARTUPINFO.wShowWindow значит, не работает? Окей, можно попробовать создать новый десктоп (CreateDesktop) и установить параметр STARTUPINFO.lpDesktop. В зависимости от того, как один получает информацию, может понадобится сделать SetThreadDesktop для получающего информацию потока. В совсем крайнем случае можно попробовать хукнуть функцию ShowWindow (NtUserShowWindow?).
     
  11. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Sol_Ksacap
    а нельзя сделать сначала по проще. для начала desktop, далее приведенные циклы и потом только хук, но на яву может быть принудительно задан десктоп, да и для ожидания можно использовать не слип, а какую-нибудь функция типа WaitFor для проверки параметра ProcessRunning и циклы эти призваны лишь дождаться появления окна, а не завершения процесса.
     
  12. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    e4key
    Как я понял ты хочешь что бы в панели задач не висела твоя прога...
    Код (Text):
    1. DWORD style;
    2.  
    3. style = GetWindowLong( hWnd, GWL_EXSTYLE );
    4. style |= WS_EX_TOOLWINDOW;
    5. SetWindowLong( hWnd, GWL_EXSTYLE, style);
    так вроде...вырубить "иконку" в панеле задач. А вот что бы окно стало прозрачным я вызывал после CreateWindow в твоем случае после FindWindow:
    Код (Text):
    1.     SetWindowPos(
    2.                 hLockWnd,
    3.                 HWND_TOPMOST,
    4.                 0, 0, 0, 0,
    5.                 SWP_NOMOVE | SWP_NOSIZE | SWP_HIDEWINDOW );
    правда тебе не нужен HWND_TOPMOST,посмотри что там мсдн говорит и поймеш что тебе надо:)
     
  13. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    max7C4
    ты когда скроешь родительское окно все дочерные тоже "исчезнут".
     
  14. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    max7C4
    У нас, лайк, различаются оценочные функции. И это, видимо, нормальное явление.
    Подобный вариант, будучи реализованным без всяких беговых условий, смотрелся бы много лучше хука, определённо. Однако в данный момент мы не видим ни одной апи, позволяющей вот так вот дождаться создания окна (видим только WaitForInputIdle, но там опять-таки получается как минимум гоночное условие, к сожалению).
     
  15. 3dfunn

    3dfunn New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2009
    Сообщения:
    5
    а нельзя ли создать окно и применить к нему стиль WS_HIDDEN?)
    тогда оно будет отображатся только в диспетчере задач)когда мне надо было так делать(сделать скрытую программу,без видимого окна) то я так и делал
     
  16. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    3dfunn
    WS_HIDDEN для чужой программы делается через ShowWindow
    sometime
    ни кто не мешает поменять у них (дочерних окон) родителя
    Sol_Ksacap
    ну а немного проанализировать код. к примеру прога закрывает свои копии или может запускаться кучу раз.
     
  17. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    max7C4

    я вобщем говорил про
    то мои слова относились к
    а причем тут
    -не понимаю:) Но знаю точно что можно десктоп поменять для любого родителя;) и он тоже станет не видимым вместе с дочерными окнами.
     
  18. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва