Скрыть установку программы (чужой)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ZirroCool, 30 Jun 2008.

  1. ZirroCool

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

    Joined:
    16 Sep 2006
    Messages:
    128
    Likes Received:
    55
    Reputations:
    20
    Здрасьте всем!
    Уважаемые знатоки, есть тема и есть вопрос!
    Тема: Нужно скрыть установку сторонней программы, тобеж работу инсталятора!
    Вопрос: Как это сделать?
     
  2. LEE_ROY

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

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    передвинуть окошко инсталлятора в невидимую часть экрана ( больше чем разрешение ), и там поклацать по кнопкам, ченить типа такого )
     
  3. ZirroCool

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

    Joined:
    16 Sep 2006
    Messages:
    128
    Likes Received:
    55
    Reputations:
    20
    ага, а как быть с панелью задач на которой будет святиться приложение?
     
  4. LEE_ROY

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

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    покопай вообще в сторону окно, я уверен что и из панели задач убрать его непроблема )
     
  5. LEE_ROY

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

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    вот цытат с sources.ru

     
  6. _empty

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

    Joined:
    22 Mar 2008
    Messages:
    62
    Likes Received:
    17
    Reputations:
    5
    попробуй связку FindWindow(class, caption) и после того как получишь хэндл попробуй - ShowWindow(HWND, SW_HIDE) После этого будет светиться только процесс в диспетчере задач.
    Причем сохраняется возможность управлять программой через SendMessage, посылая кнопкам инсталятора команды(Нажатие мыши или клавиш). За более подробной информацией на www.google.com

    В сети полно исходников по теме скрытия окон.
     
    #6 _empty, 30 Jun 2008
    Last edited: 30 Jun 2008
    1 person likes this.
  7. 0x22b

    0x22b Elder - Старейшина

    Joined:
    1 Dec 2007
    Messages:
    114
    Likes Received:
    32
    Reputations:
    9
    to _empty Не подскажеш как на кнопки влиять через SendMessage().. Например, как закрыть приложение я знаю. SendMessage(hwnd, WM_CLOSE,0,0).. Какие параметры передавать чтобы нажать на кнопку в программе? заранее спс..
     
  8. izlesa

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

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    MSDN forever ^____~

    сообщения

    http://msdn.microsoft.com/en-us/library/bb775941(VS.85).aspx

    и в целом про button, если понадобится

    http://msdn.microsoft.com/en-us/library/bb775943(VS.85).aspx
     
  9. Moldman

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

    Joined:
    12 Jun 2007
    Messages:
    91
    Likes Received:
    35
    Reputations:
    -5
    На какой Os если виста то сперва отключи Uac
     
  10. 12usver12

    12usver12 Elder - Старейшина

    Joined:
    12 Dec 2007
    Messages:
    50
    Likes Received:
    9
    Reputations:
    0
    аналог делфи
    WinExec(PCHAr('D:\инсталятор.EXE'),sw_Hide);// запуск процесса в скрытом режиме
    SendMessage(дескриптор кнопки,BM_Click,0,0); //
    дескриптор кнопки ("Далее") ищется через дескриптор окна = FindWindow( 0, ННазвание окнаб...
    FindWindow(Дескриптор окна , класс кнопки, ....

    и будет тебе счастье
     
    #10 12usver12, 30 Jun 2008
    Last edited: 30 Jun 2008
  11. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    FindWindowEx только
     
  12. 12usver12

    12usver12 Elder - Старейшина

    Joined:
    12 Dec 2007
    Messages:
    50
    Likes Received:
    9
    Reputations:
    0
    не знаю, может быть , недавно подобные шняги на C# делал , там импортировал функцию WinApi - FindWindow и все норм было
     
  13. izlesa

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

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    FindWindow не ищёт дочернии окна. А так она аналогина FindWindowEx. Точнее наоборот ^___^
    Так что приминение той или иной функции зависит от задач. Как впрочем и всегда ^___^
     
  14. da_ff

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

    Joined:
    11 Jul 2006
    Messages:
    118
    Likes Received:
    22
    Reputations:
    26
    FindWindow все окна находит по их дескрипторам .
    с сендмессейдж может быть проблема, если программа имеет диалоговое окно, там свои нюансы.
    самый надежный способ переключить окно в фокус и нажать виртуально кнопку. но для этого окно должно быть видимо
     
  15. 12usver12

    12usver12 Elder - Старейшина

    Joined:
    12 Dec 2007
    Messages:
    50
    Likes Received:
    9
    Reputations:
    0
    виртуальная кнопка , ты имеешь ввиду типа SendKeys.Send("VK_RETURN"); - ентер ,
    вот мучил вопрос как наажть на кнопку IE диалогового окна сохранения файла (Запустить Сохранить Отмена) б я знаю 3 способа наажтия через SendMessage
    1) SendMessage(Handle, BM_Click,0,0);
    2) SendMessage(Handle, BM_SETSTATE,1,0); SendMessage(Handle, WM_KILLFOCUS,0,0);
    3) SendMessage(Handle, WM_LBUTTONDOWN,1,0); SendMessage(Handle, WM_LBUTTONUP,0,0);

    но ни один не сработал там
     
    #15 12usver12, 30 Jun 2008
    Last edited: 30 Jun 2008
  16. _empty

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

    Joined:
    22 Mar 2008
    Messages:
    62
    Likes Received:
    17
    Reputations:
    5
    Вот код, который нажимает кнопку пуск, а потом прячет ее с экрана на 2 секунды

    PHP:
    #include <windows.h>

    void main(void)
    {
    HWND hTaskBarhButton;
    HDC hDCScreen GetDC(NULL);
    DWORD ScreenHeight=GetDeviceCaps(hDCScreen,VERTRES);
    ReleaseDC(NULLhDCScreen);

    hTaskBarFindWindow("Shell_TrayWnd",NULL);
    hButtonGetWindow(hTaskBarGW_CHILD);
    // Hажать кнопку "Пуск" предпоследний параметр это кнопка которая нажата, а последний коориднаты курсора мыши.
    SendMessage(hButtonWM_LBUTTONDOWN,MK_LBUTTON,LOWORD(5)+
    HIWORD(ScreenHeight-20));

    // Дальше только ради прикола...
    // Спрячем кнопку "Пуск"
    ShowWindow(hButtonSW_HIDE);
    //спрячем на 2 сек
    Sleep(2000);
    // Покажем кнопку "Пуск"
    ShowWindow(hButtonSW_NORMAL);
    }
     
  17. ZirroCool

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

    Joined:
    16 Sep 2006
    Messages:
    128
    Likes Received:
    55
    Reputations:
    20
    а как запустить прогу чтоб ее не было видно, пробовал shellapi winexec createprocess с параметром sw_hide но чет не скрывает?
     
  18. _empty

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

    Joined:
    22 Mar 2008
    Messages:
    62
    Likes Received:
    17
    Reputations:
    5
    А что именно не скрывает? WinExec("path+name", SW_HIDE) должен скрывать, если конешн прога сама себя не делает видимой, т.е. назначает себя SW_SHOW, тогда попробуй либо размер окна в 1,1 установить, и перетащить куда нибудь за пределы рабочего стола.
     
    1 person likes this.
  19. ZirroCool

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

    Joined:
    16 Sep 2006
    Messages:
    128
    Likes Received:
    55
    Reputations:
    20
    мне нужно чтобы он запускал ее уже скрытой, тк у нее идет сначала окно заставки!
    Потом то я окно скрываю вот так без проблем:
    Code:
    Begin
     Wd := FindWindow(nil, 'Хендл');
     If  Wd<>Form1.Handle then
            If  IsWindowVisible(WD) then 
                If  not IsIconic(WD) then 
                  If  isWindow(WD) then 
                     case n of
                       1:
                         ShowWindow(WD, SW_Hide);
    А вот как сделать чтоб она скрыто запускалась с самого начала?

    И еще у мну в этой проге(прога написана на с++) почему то не отмечается чек бокс, делаю так:
    Code:
    Wd:=FindWindowEx(Wd, 0, 'CheckBox', nil);
    SendMessage(Wd, BM_SETcheck,1,0);
    хотя на другой проге написанной на дельфях прет(ток там я ставлю ТCheckBox)!

    Но самое интересное что кликанье по кнопке, работает в этой проге, делаю вот так:
    Code:
    Wd := FindWindowEx(Wd, 0, 'Button', nil);
    SendMessage(Wd, BM_CLICK, 0, 0);
    не понятно почему не работает чек бокс?
     
    #19 ZirroCool, 1 Jul 2008
    Last edited: 1 Jul 2008
  20. 12usver12

    12usver12 Elder - Старейшина

    Joined:
    12 Dec 2007
    Messages:
    50
    Likes Received:
    9
    Reputations:
    0
    попробуй и отмечание чекбокса сделать через
    SendMessage(Wd, BM_CLICK, 0, 0);
    или
    SendMessage(Handle, BM_SETSTATE,1,0); SendMessage(Handle, WM_KILLFOCUS,0,0);

    оно запускает твою прогу скрытой , но любое выскакивающее окошко из этой формы будет видно, в данном случае твоя заставка , тебе остается только запускать таймер и мониторить окно заставки а там уже потом через ShowWindow пряч его
     
Loading...