Как спрятать окно запускаемого через ShellExecute() приложения

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by blackbox, 15 Mar 2014.

  1. blackbox

    blackbox Elder - Старейшина

    Joined:
    31 Dec 2011
    Messages:
    362
    Likes Received:
    62
    Reputations:
    11
    Собственно, сабж. Интересует виста, семерка и выше.
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    SW_HIDE не работает?
     
    _________________________
  3. blackbox

    blackbox Elder - Старейшина

    Joined:
    31 Dec 2011
    Messages:
    362
    Likes Received:
    62
    Reputations:
    11
    Нет, не работает. Я не уверен, он вроде только на консольных приложениях пашет. В любом случае - нужно что-то серьезнее. Может как-то можно словить окно приложения и насильно его спрятать? Правда я гадаю, потому что нубас и не знаю, разумно ли это и как это реализовать. Какие вообще способы существуют?
     
  4. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Для начала попробовать через CreateProcess и поиграть с STARTUPINFO. Если не работает, то можно после создания процесса найти все окна, которые ему принадлежат и принудительно скрыть их, но в этом случае скорее всего на долю секунды окно появится. Можно создать процесс и в его памяти перехватить CreateWindow, чтобы всегда был сброшен флаг WS_VISIBLE
     
    _________________________
  5. blackbox

    blackbox Elder - Старейшина

    Joined:
    31 Dec 2011
    Messages:
    362
    Likes Received:
    62
    Reputations:
    11
    Я нашел хендл окна нужного, а как его скрыть? ShowWindow(handle, SW_HIDE) - не работает. Олсо, у меня семерка, может с этим связано? UAC - включен.
     
    #5 blackbox, 15 Mar 2014
    Last edited: 15 Mar 2014
  6. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Тогда возьми для начала какой-нибудь uuSpy и попробуй им скрыть это окно. Или больше деталей, может ты там окно антивируса скрыть пытаешься...
     
    _________________________
  7. blackbox

    blackbox Elder - Старейшина

    Joined:
    31 Dec 2011
    Messages:
    362
    Likes Received:
    62
    Reputations:
    11
    У меня есть программа, с которой работает пользователь. Эта программа своей работе использует ехе. Она его распаковывает и запускает, он делает свое дело и сохраняет результат. Так вот, мне нужно чтобы этот экзешник не светил своим окном на весь экран, когда работает.

    UPD
    Временно решил так - в манифесте прописал <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
    и перед запуском UAC спрашивает, запускать ли софтину. При утвердительном ответе юак больше не появляется, поэтому можно создавать отдельный десктоп и запускать приложение в нем. Да и вообще что угодно делать. Такие дела.
     
    #7 blackbox, 15 Mar 2014
    Last edited: 16 Mar 2014
  8. sSeeker

    sSeeker New Member

    Joined:
    20 Mar 2014
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    в mingw при компиляции если добавить -mwindows то консольное приложение станет вин32 приложением и окошко консоли не появится.
    В студии похоже аналог это сразу создавать проект вин32.
    если у вас вин32 приложение метод с SW_HIDE должен работать, попробуйте вместо ShellEcecute использовать старый добрый WinExec(cmd,SW_HIDE)