A.A.Z.
20-04-2008, 19:05
Всем привет.
Я одно время долго ломал голову, как можно объединить удобство автоматической (unattended) установки Windows с функциональностью возможности выбора пользователем нужных ему компонентов. В итоге появилась одна мысль.
Я написал программу, которая запускается по DetachedProgram на 39 минуте и следит за окнами. По замыслу, как только на экране появляется диалоговое окно, на кнопку "&Далее >" вешается "таймаут" - программа ждёт заданное кол-во секунд (допустим, 5), отображая это в Caption'е кнопки ("&Далее (5) >", "&Далее (4) >"...), и затем, в случае бездействия пользователя, по истечению 5 секунд сама нажимает на неё (если пользователь начнёт "активничать" - двигать мышку или нажимать на кнопки, то она прекращает свою деятельность по отношению к текущему окну). Таким образом планировалось достичь, как я уже написал, возможности автоустановки Windows путём предварительного задавания соответствующих настроек (серийник, языковые стандарты, сеть и т.д.) и параметра UnattendMode=ProvideDefault, который бы позволил пользователю, в случае чего, что-либо поменять. Например, собственно, имя пользователя, пароль админа и т.п.
Чего я, спрашивается, сюда пишу :) Так вот. Я решил отлавливать появляющиеся диалоговые окна по таймеру через GetForegroundWindow, а затем, если у этого окна класс #32770, искать на нём нужную дефолтную кнопку. Но окно самого первого диалога (в режиме ProvideDefault это как раз-таки диалог выбора имени пользователя и компании), как оказалось, появляется задолго до того, как мы видим его на экране после "установки устройств" - моя программа его обнаруживает и "вытаскивает" на поверхность в самом начале этапа установки устройств. Соответствено - первый вопрос, что бы вы могли посоветовать использовать вместо этого? Была идея отлавливать WindowFromPoint с центра экрана где-нибудь раз 10 в секунду, но пока не знаю, приведёт ли это к чему-нибудь, или нет. Второй вопрос, который возник, это собственно необходимость избегания этого самого "вытаскивания" окон наверх - а может, так оно и к лучшему - чем раньше пользователь введёт данные, тем лучше? Просто я точно не знаю, куда эти диалоги отправляют введённую информацию - не слишком ли рано они будут это делать на 39 минуте.
Наверное, пока всё... Буду рад любым ответам (и вопросам) :)
Я одно время долго ломал голову, как можно объединить удобство автоматической (unattended) установки Windows с функциональностью возможности выбора пользователем нужных ему компонентов. В итоге появилась одна мысль.
Я написал программу, которая запускается по DetachedProgram на 39 минуте и следит за окнами. По замыслу, как только на экране появляется диалоговое окно, на кнопку "&Далее >" вешается "таймаут" - программа ждёт заданное кол-во секунд (допустим, 5), отображая это в Caption'е кнопки ("&Далее (5) >", "&Далее (4) >"...), и затем, в случае бездействия пользователя, по истечению 5 секунд сама нажимает на неё (если пользователь начнёт "активничать" - двигать мышку или нажимать на кнопки, то она прекращает свою деятельность по отношению к текущему окну). Таким образом планировалось достичь, как я уже написал, возможности автоустановки Windows путём предварительного задавания соответствующих настроек (серийник, языковые стандарты, сеть и т.д.) и параметра UnattendMode=ProvideDefault, который бы позволил пользователю, в случае чего, что-либо поменять. Например, собственно, имя пользователя, пароль админа и т.п.
Чего я, спрашивается, сюда пишу :) Так вот. Я решил отлавливать появляющиеся диалоговые окна по таймеру через GetForegroundWindow, а затем, если у этого окна класс #32770, искать на нём нужную дефолтную кнопку. Но окно самого первого диалога (в режиме ProvideDefault это как раз-таки диалог выбора имени пользователя и компании), как оказалось, появляется задолго до того, как мы видим его на экране после "установки устройств" - моя программа его обнаруживает и "вытаскивает" на поверхность в самом начале этапа установки устройств. Соответствено - первый вопрос, что бы вы могли посоветовать использовать вместо этого? Была идея отлавливать WindowFromPoint с центра экрана где-нибудь раз 10 в секунду, но пока не знаю, приведёт ли это к чему-нибудь, или нет. Второй вопрос, который возник, это собственно необходимость избегания этого самого "вытаскивания" окон наверх - а может, так оно и к лучшему - чем раньше пользователь введёт данные, тем лучше? Просто я точно не знаю, куда эти диалоги отправляют введённую информацию - не слишком ли рано они будут это делать на 39 минуте.
Наверное, пока всё... Буду рад любым ответам (и вопросам) :)