Сделать активным окно программы

«A good example is a debugger when it hits a breakpoint.»

Добавлено
не работает, причем честно об этом говорит (

Цитата:

Application.BringToFront;

Сначала нужно вызвать

SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);

Зтем можно вызывать SetForegroundWindow.

Но это несовсем корректная техника. Для того и изменили поведение функции SetForegroundWindow, чтобы некоторые не доставали своими выскакивающими табличками.

сначала сворачиваем нашу прогу
Application.Minimize;

если «сворачивали в трей», то
if not IsWindowVisible(Application.Handle) then
ShowWindow(Application.Handle, SW_SHOW);

ну и восстанавливаем.
Application.Restore;
а уже при ресторе окно вылазит вперёд

кстати, если кто-то предложит лучший метод (без Minimize), буду очень благодарен

Как закрепить окно поверх всех окон в Windows | DeskPins

Цитата:

SystemParametersInfo не принёс нужного результата
что с ним, что без него.

Что значит что с ним что без него?
Функция SystemParametersInfo вообще отработала корректно или ты не проверял на предмет ошибки?

Так вот если не проверял то проверь. Это делается с помощью GetLastError если функция SystemParametersInfo вернёт тебе ноль.

Если же функция отработала успешно, то вызови её же но с параметром SPI_GETFOREGROUNDLOCKTIMEOUT и убедись что она возвратит ноль.

После корректного вызова этой функции и установки свойства SETFOREGROUNDLOCKTIMEOUT в ноль система будет сразу делать окно активным с помощью SetForegroundWindow. Система не будет вызывать функцию FlashWindowEx.

Цитата:

SystemParametersInfo не принёс нужного результата
что с ним, что без него.

не надо ля-ля. Все работает.

я не знаю, какие у вас винды, а уменя WinXp.
под Win2000 всё точно так же.

Да, такая ситуация тоже возможна и она является штатной. Если текущий foreground-процесс вызвал функцию LockSetForegroundWindow.

Цитата:

GetLastError возвращает 5

Проверь параметры.

Цитата:

Злой ты.
Нужно же стоб приложение сворачивалось и разворачивалось!

Согласен что нужно. Но это просто один из вариантов как всё-таки сделать своё окно поверх всех, даже тогда когда никто этого нехочет и всеми средствами препятствует этому. Появится активное системное модальное окно, а после его закрытия уже делай основым то из своих окно которое необходимо.

Работа с окнами в Windows 10

Цитата:

Проверь параметры.

На некорректные параметры такую ошибку система не выдаст. С параметрами у него судя по всему всё в порядке. А вот поотключать все лишние запущенные приложения попробовать стоит. Фалит из-за одного из них.

Цитата:

если «сворачивали в трей», то
if not IsWindowVisible(Application.Handle) then
ShowWindow(Application.Handle, SW_SHOW);
Читайте также:
Imax b6 зарядка li ion 18650 какой программой
Страницы: 1 2

Источник: forum.ru-board.com

Оператор AppActivate

Синтаксис оператора AppActivate состоит из следующих именованных аргументов:

Part Описание
заголовок Обязательно. Строковое выражение, указывающее заголовок в строке заголовка окна приложения, которое необходимо сделать активным. Для активации приложения на месте заголовка может использоваться идентификатор задачи, возвращаемый функцией Shell.
wait Необязательный параметр. Логическое значение, указывающее наличие фокуса в вызывающем приложении перед активацией другого. При значении False (по умолчанию) указанное приложение сразу становится активным, даже если вызывающее приложение не имеет фокуса. Если задано значение True, вызывающее приложение ожидает, пока оно не перейдет в фокус, а затем активирует указанное приложение.

Замечания

Оператор AppActivate перемещает фокус на именованное приложение или окно, но не влияет на его размер. Если пользователь выполняет некоторые действия, чтобы изменить фокус или закрыть окно, фокус перемещается с окна активированного приложения. Для запуска приложения и выбора стиля окна используйте функцию Shell.

В определении того, какое приложение сделать активным, title сравнивается со строкой заголовка каждого запущенного приложения. Если точного соответствия нет, активируется любое приложение, строка заголовка которого начинается с title. Если сразу несколько приложений имеют имя title, одно из них активизируется произвольным образом.

Пример

В этом примере показаны различные варианты использования оператора AppActivate для активации окна приложения. Операторы оболочки предполагают, что приложения находятся по указанным путям. В macOS диск по умолчанию обозначается «HD», а части аргумента «путь» отделяются друг от друга двоеточиями вместо обратной косой черты.

Dim MyAppID, ReturnValue AppActivate «Microsoft Word» ‘ Activate Microsoft ‘ Word. ‘ AppActivate can also use the return value of the Shell function. MyAppID = Shell(«C:WORDWINWORD.EXE», 1) ‘ Run Microsoft Word. AppActivate MyAppID ‘ Activate Microsoft ‘ Word. ‘ You can also use the return value of the Shell function. ReturnValue = Shell(«c:EXCELEXCEL.EXE»,1) ‘ Run Microsoft Excel. AppActivate ReturnValue ‘ Activate Microsoft ‘ Excel.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник: learn.microsoft.com

Объект WScript.Shell метод AppActivate — Как активировать окно Windows

Объект WScript.Shell метод AppActivate — Как активировать окно Windows

Объектная модель Windows Script Host

Автор Coding На чтение 6 мин Просмотров 591 Опубликовано 18.12.2014

Здравствуйте, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим, как активировать окно Windows заданного приложения программным методом. Статья будет интересна как рядовым пользователям, так и начинающим программистам.

Читайте также:
Как обновить программу товар деньги товар

И так, давайте рассмотрим метод AppActivate объекта WScript_Shell, который позволяет сделать активное окно Window заданной программы. Давайте мысленно подумаем, где метод AppActivate может пригодиться: у нас работает три разных приложения, каждое из них находится в состоянии ожидания ввода данных. Задача – написать сценарий, который обработает нужную информацию, и в зависимости от ее типа, передаст ее той или иной программе.

Как активировать окно Windows программным путем

Что бы имитировать ввод данных с клавиатуры можно использовать функцию SendKeys, вот только есть одна беда, данные будут отправляться в слепую, по принципу, кто активен – тот и получил. Вот тут-то нам и пригодится функция AppActivate, которая позволяет активировать Windows окно, давайте посмотрим на ее синтаксис:

AppActivate (String | ProcessID) – Видим, что метод может принимать только один параметр, который, в свою очередь, может быть или строкой (String), или целым числом (ProcessID). В первом случае, мы передаем методу AppActivate имя диалогового окна того приложения, которое хотим сделать активным, во втором случае – идентификатор процесса заданной программы.

Вроде всё понятно, но есть один подводный камень. Если мы одновременно запустим несколько экземпляров одной программы , например, программу Блокнот, то мы увидим, что заголовки окон идентичны, в этом случае, метод AppActivate сделает активное окно того экземпляр, который первый в его внутреннем списке, грубо говоря, мы не сможем активировать окно ОС Windows для нужной нам копии . Но, зато, для активации Windows окна можно использовать идентификатор процесса – его можно узнать, запустив диспетчер задач и перейдя на вкладку процессы, имя процесса для программы _Блокнот_ – notepad.exe.

В последнем случае тоже есть подводный камень – нам придется запустить приложение и дополнительно рассмотреть его идентификатор. Но, так мучиться не нужно, есть прекрасная функция Exec, которая позволяет запустить исполняемый файл и получить его идентификатора.

активное окно приложения Windows

Хорошо, давайте посмотрим на следующий пример на языке vbscript:

‘*********************************************************************************** ‘ Wscript_Shell_метод_AppActivate ‘ Как активировать окно Windows приложения ‘ AppActivate1.vbs ‘*********************************************************************************** Option Explicit dim WshShell dim note_1, note_2, note_3 ‘ Создаем ссылку на объект WScript_Shell set WshShell = WScript.CreateObject(«WScript.Shell») ‘———————————————————————— ‘ запускаем три копии _блокнота_ ‘———————————————————————— ‘ первый экземпляр set note_1 = WshShell.Exec(«notepad.exe») ‘ ждем 500 миллисекунд WScript.Sleep 500 ‘ отправляем строку WshShell.SendKeys («первая копия») ‘———————————————————————— ‘ второй экземпляр set note_2 = WshShell.Exec(«notepad.exe») ‘ ждем 500 миллисекунд WScript.Sleep 500 ‘ отправляем строку WshShell.SendKeys («вторая копия») ‘———————————————————————— ‘ третий экземпляр set note_3 = WshShell.Exec(«notepad.exe») ‘ ждем 500 миллисекунд WScript.Sleep 500 With WshShell ‘ отправляем строку .SendKeys («третья копия») ‘———————————————————————— ‘ запускаем калькулятор .Exec(«calc.exe») ‘ пробуем активировать окно Windows по его имени ‘ потерпим неудачу. .AppActivate («Безымянный — Блокнот») MsgBox «Какой экземпляр активирован?» ‘ активное окно второй копии _блокнота_ .AppActivate (note_2.ProcessID) End With MsgBox «Какой экземпляр активирован?»

Читайте также:
Программа для управления авто с телефона

‘***********************************************************************************’ Wscript_Shell_метод_AppActivate’ Как активировать окно Windows приложения’ AppActivate1.vbs’***********************************************************************************Option Explicitdim WshShelldim note_1, note_2, note_3′ Создаем ссылку на объект WScript_Shellset WshShell = WScript.CreateObject(«WScript.Shell»)’————————————————————————’ запускаем три копии _блокнота_’————————————————————————’ первый экземплярset note_1 = WshShell.Exec(«notepad.exe»)’ ждем 500 миллисекундWScript.Sleep 500′ отправляем строкуWshShell.SendKeys («первая копия»)’————————————————————————’ второй экземплярset note_2 = WshShell.Exec(«notepad.exe»)’ ждем 500 миллисекундWScript.Sleep 500′ отправляем строкуWshShell.SendKeys («вторая копия»)’————————————————————————’ третий экземплярset note_3 = WshShell.Exec(«notepad.exe»)’ ждем 500 миллисекундWScript.Sleep 500With WshShell ‘ отправляем строку .SendKeys («третья копия») ‘———————————————————————— ‘ запускаем калькулятор .Exec(«calc.exe») ‘ пробуем активировать окно Windows по его имени ‘ потерпим неудачу. .AppActivate («Безымянный — Блокнот») MsgBox «Какой экземпляр активирован?» ‘ активное окно второй копии _блокнота_ .AppActivate (note_2.ProcessID)End WithMsgBox «Какой экземпляр активирован?»

В данном примере, мы трижды запускаем программу Блокнот, причем, сразу после запуска, симулируем ввод текста, причем, для каждого экземпляра разный, это позволит нам видеть, действительно ли мы смогли активировать нужное окно Windows. Мы дважды используем метод _AppActivate_, сперва пробуем активировать окно программы по имени ( тут нет никакой логики, так как все три окна имеют одинаковое имя ), а потом пробуем активировать окно программы Windows для второй копии по его идентификатору.

Как активировать окно ОС Windows

А вот аналогичный пример, но уже на языке jscript:

//*********************************************************************************** // Wscript_Shell_метод_AppActivate // Как активировать окно Windows приложения // AppActivate1.js //*********************************************************************************** var WshShell1; var note_1, note_2, note_3; // Создаем ссылку на объект WScript.Shell WshShell1 = WScript.CreateObject(«WScript.Shell»); //———————————————————————— // запускаем три_экземпляра блокнота //———————————————————————— // первый экземпляр note_1 = WshShell1.

Exec(«notepad.exe»); // ждем 500 миллисекунд WScript.Sleep (500); // отправляем строку WshShell1.

SendKeys («экземпляр_первый»); //———————————————————————— // второй_экземпляр note_2 = WshShell1.Exec(«notepad.exe»); // ждем 500 миллисекунд WScript.

Sleep (500); // отправляем строку WshShell1.SendKeys («экземпляр_второй»); //———————————————————————— // третий_экземпляр note_3 = WshShell1.

Exec(«notepad.exe»); // ждем 500 миллисекунд WScript.Sleep (500); with(WshShell1) // отправляем строку SendKeys («экземпляр_третий»); //———————————————————————— // запускаем калькулятор Exec(«calc.exe»); // пробуем активировать окно ОС Windows по его имени // потерпим неудачу.

AppActivate («Безымянный — Блокнот»); WScript.Echo(«Какой_экземпляр активирован?»); // активное окно второго_экземпляра _блокнота_ AppActivate (note_2.ProcessID) > WScript.Echo(«Какой_экземпляр активирован?»);

И так, в этой статье мы рассмотрели объект Wscript_Shell сервера Windows Script Host, а именно: метод _AppActivate_, который позволяет активировать окно Windows приложения.

Источник: scriptcoding.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru