Здрасьте всем! Уважаемые знатоки, есть тема и есть вопрос! Тема: Нужно скрыть установку сторонней программы, тобеж работу инсталятора! Вопрос: Как это сделать?
передвинуть окошко инсталлятора в невидимую часть экрана ( больше чем разрешение ), и там поклацать по кнопкам, ченить типа такого )
попробуй связку FindWindow(class, caption) и после того как получишь хэндл попробуй - ShowWindow(HWND, SW_HIDE) После этого будет светиться только процесс в диспетчере задач. Причем сохраняется возможность управлять программой через SendMessage, посылая кнопкам инсталятора команды(Нажатие мыши или клавиш). За более подробной информацией на www.google.com В сети полно исходников по теме скрытия окон.
to _empty Не подскажеш как на кнопки влиять через SendMessage().. Например, как закрыть приложение я знаю. SendMessage(hwnd, WM_CLOSE,0,0).. Какие параметры передавать чтобы нажать на кнопку в программе? заранее спс..
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
аналог делфи WinExec(PCHAr('D:\инсталятор.EXE'),sw_Hide);// запуск процесса в скрытом режиме SendMessage(дескриптор кнопки,BM_Click,0,0); // дескриптор кнопки ("Далее") ищется через дескриптор окна = FindWindow( 0, ННазвание окнаб... FindWindow(Дескриптор окна , класс кнопки, .... и будет тебе счастье
не знаю, может быть , недавно подобные шняги на C# делал , там импортировал функцию WinApi - FindWindow и все норм было
FindWindow не ищёт дочернии окна. А так она аналогина FindWindowEx. Точнее наоборот ^___^ Так что приминение той или иной функции зависит от задач. Как впрочем и всегда ^___^
FindWindow все окна находит по их дескрипторам . с сендмессейдж может быть проблема, если программа имеет диалоговое окно, там свои нюансы. самый надежный способ переключить окно в фокус и нажать виртуально кнопку. но для этого окно должно быть видимо
виртуальная кнопка , ты имеешь ввиду типа 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); но ни один не сработал там
Вот код, который нажимает кнопку пуск, а потом прячет ее с экрана на 2 секунды PHP: #include <windows.h> void main(void) { HWND hTaskBar, hButton; HDC hDCScreen = GetDC(NULL); DWORD ScreenHeight=GetDeviceCaps(hDCScreen,VERTRES); ReleaseDC(NULL, hDCScreen); hTaskBar= FindWindow("Shell_TrayWnd",NULL); hButton= GetWindow(hTaskBar, GW_CHILD); // Hажать кнопку "Пуск" предпоследний параметр это кнопка которая нажата, а последний коориднаты курсора мыши. SendMessage(hButton, WM_LBUTTONDOWN,MK_LBUTTON,LOWORD(5)+ HIWORD(ScreenHeight-20)); // Дальше только ради прикола... // Спрячем кнопку "Пуск" ShowWindow(hButton, SW_HIDE); //спрячем на 2 сек Sleep(2000); // Покажем кнопку "Пуск" ShowWindow(hButton, SW_NORMAL); }
а как запустить прогу чтоб ее не было видно, пробовал shellapi winexec createprocess с параметром sw_hide но чет не скрывает?
А что именно не скрывает? WinExec("path+name", SW_HIDE) должен скрывать, если конешн прога сама себя не делает видимой, т.е. назначает себя SW_SHOW, тогда попробуй либо размер окна в 1,1 установить, и перетащить куда нибудь за пределы рабочего стола.
мне нужно чтобы он запускал ее уже скрытой, тк у нее идет сначала окно заставки! Потом то я окно скрываю вот так без проблем: 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); не понятно почему не работает чек бокс?
попробуй и отмечание чекбокса сделать через SendMessage(Wd, BM_CLICK, 0, 0); или SendMessage(Handle, BM_SETSTATE,1,0); SendMessage(Handle, WM_KILLFOCUS,0,0); оно запускает твою прогу скрытой , но любое выскакивающее окошко из этой формы будет видно, в данном случае твоя заставка , тебе остается только запускать таймер и мониторить окно заставки а там уже потом через ShowWindow пряч его