169 похожих чатов

Добрый день! Подскажите, пожалуйста, по такому вопросу. Запускаю программу с

помощью кода:
Run('"' revitPath '" "' projectPath '"')
Как мне запущенную программу сразу же взять в фокус?
Дело в том, что скрипт запускаю через Планировщик заданий, а мне почему-то не получается взять фокус при таком способе запуска. Вот с помощью этого кода пытался взять в фокус, но он не работает:
if WinWait("ahk_id " WinExist("ahk_exe Revit.exe"), , 360000) ; проверяем, существует ли окно в течение часа, или 3600 секунд
{
active_id := WinGetID("ahk_exe Revit.exe")
WinActivate "ahk_id " active_id
; производим манипуляции со всплывающими программами
}
ExitApp
Проблема еще в том, что ahk_class главного окна отличается от процесса к процессу, что затрудняет более точную фокусировку на нужное окно... Как правильно это делать?

4 ответов

24 просмотра

Попробуй Добрый день! Для того чтобы корректно взять в фокус запущенное приложение, можно использовать AutoHotkey (AHK). Вот пример скрипта AHK, который запускает программу и берет её окно в фокус. В вашем случае мы будем использовать revitPath и projectPath. #NoEnv SendMode Input SetWorkingDir %A_ScriptDir% ; Путь к программе и проекту revitPath := "ПУТЬ_К_Revit.exe" projectPath := "ПУТЬ_К_Проекту.rvt" ; Запуск программы Run, %revitPath% "%projectPath%" ; Ожидание запуска окна программы в течение часа (3600 секунд) if WinWait("ahk_exe " . revitPath, , 3600) { ; Получение ID окна active_id := WinExist("ahk_exe " . revitPath) ; Активация окна WinActivate, ahk_id %active_id% ; Опционально: можно установить фокус на конкретное окно, если известно его название ; WinActivate, ahk_class НазваниеКлассаОкна } else { MsgBox, Программа не запустилась в течение отведенного времени. } ExitApp Объяснение кода: 1. Устанавливаем рабочую директорию скрипта. 2. Задаем пути к программе и проекту. 3. Запускаем программу с помощью Run. 4. Ожидаем появления окна программы в течение 3600 секунд (1 час) с помощью WinWait. 5. Получаем ID окна с помощью WinExist. 6. Активируем окно с помощью WinActivate. 7. Если окно не появилось в течение отведенного времени, выводим сообщение об ошибке. Этот скрипт должен работать независимо от изменения ahk_class главного окна, так как мы используем ahk_exe для идентификации процесса. Это должно помочь вам захватить окно и установить фокус на него.

Артур- Автор вопроса
Артур- Автор вопроса

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта