![]() |
:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки :: | ![]() |
![]() |
Л и с о в о д ы в с е х с т р а н, о б ъ е д и н я й т е с ь !!! |
Как вывести приложение на передний план | ||
---|---|---|
Вопрос
Как вывести на передний план и активизировать окно нужного приложения. Это может быть окно Word, или ранее запущенное приложение FoxPro, или форма для ввода логина и пароля в приложении FoxPro (иногда она не выводится на передний план) Ответ Идея решения принадлежит Вадиму Пирожкову (piva) Для вывода окна любого приложения на передний план, необходимо знать текст заголовка нужного окна. LOCAL loShell, lcCaption loShell=CreateObject("WScript.Shell") lcCaption = "Заголовок_нужного_Окна" IF loShell.AppActivate(m.lcCaption) = .T. loShell.SendKeys("% ~") ELSE MessageBox("Приложение "+m.lcCaption+" не найдено") ENDIF Метод loShell.AppActivate() выполняет поиск приложения по первым символам заголовка нужного окна и активизирует его, что сопровождается выводом окна на передний план. Если указанного окна обнаружить не удалось, то данный метод вернет .F., но никакого сообщения об ошибке не будет. Проблема в том, что метод loShell.AppActivate() выводит приложение на передний план "как есть". Например, если приложение было свернуто (минимизировано), то оно, конечно, будет активизировано. Но активизировано в том же, свернутом, состоянии. Чтобы приложение развернуть на весь экран необходимо выполнить некоторые манипуляции в самом приложении. Нажать некую последовательность клавиш. Вот именно этим и занимается метод loShell.SendKeys() - посылает в активное приложение некоторый набор кодов клавиш. В данном случае набор посылаемых клавиш основан на том факте, что большинство приложений имеет системное меню, которое вызывается комбинацией клавиш "ALT+пробел". Это системное меню раскрывается также по нажатию клавиши мыши в левом верхнем углу приложения на иконке самого приложения. Данное меню содержит пункты по управлению размером и положением окна. Причем самый первый пункт этого меню "Восстановить". Этот пункт (поскольку он первый) автоматически становится активным при открытии меню. Остается только нажать клавишу Enter для его выбора. Вот именно эта последовательность клавиш - ALT+пробел+ENTER - и зашифрована в параметре метода loShell.SendKeys("% ~") Если Вы уверены, что активизируемое Вами приложение находится в "нормальном", развернутом состоянии, то вызывать метод loShell.SendKeys() нет необходимости. Также вызывать именно эту последовательность нажатия клавиш не имеет смысла, если приложение не имеет стандартного системного меню. В FoxPro подавить активизацию системного меню можно, например, установив свойство _SCREEN.ControlBox = .F. Условное обозначение кодов клавиш, используемых в методе SendKeys(), приведено в следующей таблице Key Code BACKSPACE {BACKSPACE}, {BS}, or {BKSP} BREAK {BREAK} CAPS LOCK {CAPSLOCK} DEL or DELETE {DELETE} or {DEL} DOWN ARROW {DOWN} END {END} ENTER {ENTER}or ~ ESC {ESC} HELP {HELP} HOME {HOME} INS or INSERT {INSERT} or {INS} LEFT ARROW {LEFT} NUM LOCK {NUMLOCK} PAGE DOWN {PGDN} PAGE UP {PGUP} PRINT SCREEN {PRTSC} RIGHT ARROW {RIGHT} SCROLL LOCK {SCROLLLOCK} TAB {TAB} UP ARROW {UP} F1 {F1} F2 {F2} F3 {F3} F4 {F4} F5 {F5} F6 {F6} F7 {F7} F8 {F8} F9 {F9} F10 {F10} F11 {F11} F12 {F12} Key Code SHIFT + CTRL ^ ALT % Все прочие клавиши в методе SendKeys() выводятся как буквы соответствующих клавишь или их ASCII-коды в функции Chr(). Например, вместо символа "~" можно указать код chr(13) или {ENTER} loShell.SendKeys("% "+chr(13)) * или loShell.SendKeys("% {ENTER}") Как вывести на передний план текущее приложение FoxPro В этом случае, заголовком приложения является значение свойства _SCREEN.Caption LOCAL loShell loShell=CreateObject("WScript.Shell") loShell.AppActivate(_SCREEN.Caption) В данном случае, как раз нет смысла использовать метод SendKeys() в силу того, что нужное Вам окно заведомо находится в нужном состоянии. Как вывести на передний форму со свойством Form.ShowWindow = 2 - As Top-Level Как правило, такие формы используются для ввода логина и пароля пользователя при открытии приложения. Однако, по умолчанию, на передний план выводится окно собственно среды FoxPro (_SCREEN), если до вызова формы была предпринята попытка активизировать основное окно FoxPro или сделать в него вывод какой-либо информации. Поэтому, зачастую, форма для ввода логина и пароля открывается, но на передний план не выводится. В этом случае, в качестве заголовка окна используется заголовок формы. * Вызываю форму для ввода логина и пароля DO FORM MyTopForm.scx * Вывожу ее на передний план LOCAL loShell loShell=CreateObject("WScript.Shell") loShell.AppActivate(MyTopForm.Caption) * Организую точку останова приложения READ EVENTS В данном случае, как раз нет смысла использовать метод SendKeys() в силу того, что нужное Вам окно заведомо находится в нужном состоянии. Как вывести на передний план приложение Word или Excel в котором сформировали отчет Довольно распространенный способ формирования отчетов - это прямое заполнение документов в Word или Excel. Естественно, после формирования отчета хотелось бы вывести его на передний план. Приложение Word * Создание экземпляра приложения Word LOCAL loWord as Word.Application loWord = CreateObject("Word.Application") * Далее идет создание заполнение документа ... * Сформированный документ делается видимым loWord.Visible = .T. * Выводится экземпляр приложения Word на передний план LOCAL loShell loShell=CreateObject("WScript.Shell") IF loShell.AppActivate(loWord.Caption) = .T. loShell.SendKeys("% ~") ELSE MessageBox("Приложение "+loWord.Caption+" не найдено") ENDIF Приложение Excel * Создание экземпляра приложения Excel LOCAL loExcel as Excel.Application loExcel = CreateObject("Excel.Application") * Далее идет создание и заполнение документа ... * Сформированный документ делается видимым loExcel.Visible = .T. * Выводится экземпляр приложения Excel на передний план LOCAL loShell loShell=CreateObject("WScript.Shell") IF loShell.AppActivate(loExcel.Caption) = .T. loShell.SendKeys("% ~") ELSE MessageBox("Приложение "+loExcel.Caption+" не найдено") ENDIF Однако в отношении Word или Excel есть специфический способ активизации, основанный на том, что разворачивание этого окна на максимум из свернутого (минимизированного) состояния автоматически приводит к его активизации. Приложение Word * Выводится экземпляр приложения Word на передний план #DEFINE wdWindowStateMinimize 2 #DEFINE wdWindowStateMaximize 1 loWord.WindowState = wdWindowStateMinimize && Сворачиваем окно loWord.WindowState = wdWindowStateMaximize && Разворачиваем окно, что приводит к его активизации Приложение Excel * Выводится экземпляр приложения Excel на передний план #DEFINE xlMinimized -4140 #DEFINE xlMaximized -4137 loExcel.WindowState = xlMinimized && Сворачиваем окно loExcel.WindowState = xlMaximized && Разворачиваем окно, что приводит к его активизации В качестве констант для сворачивания и разворачивания Excel можно также использовать значения 1 и 2 из набора констант Word. Исправлено: Владимир Максимов, 17.06.07 16:35 ![]() |
||
Тема | Просмотров | Написано | Написано |
---|---|---|---|
![]() |
5342 | Владимир Максимов | 01.03.05 22:02 |
![]() ![]() |
9351 | Владимир Максимов | 22.03.05 10:41 |
![]() ![]() |
13042 | Владимир Максимов | 20.04.05 18:31 |
![]() ![]() |
15173 | Владимир Максимов | 01.05.05 12:17 |
![]() ![]() |
9239 | Владимир Максимов | 25.09.05 13:31 |
![]() ![]() |
7484 | Владимир Максимов | 22.02.06 22:00 |
![]() ![]() |
17388 | Владимир Максимов | 04.03.07 14:17 |
![]() ![]() |
10174 | Владимир Максимов | 25.02.08 18:32 |
© 2006 Fox Club  |