|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Активное окно |
|
|
VBS/WSH/JS - Активное окно
|
Новый участник Сообщения: 24 |
Здравствуйте.
Подскажите, пожалуйста как изменить следующую функцию, чтобы "захват" производился только с активного окна? Мне это нужно для дела(вредительством не занимаюсь). Нужно как-бы "просеять" все открытые окна-проводники и отделить от них только активное. Да, могу выделить нужное содержимое ориентируясь на путь, но проблемы начинаются тогда, когда открыто сразу ДВА! (и более) проводника с одинаковым путём. Вот здесь-то и нужно определиться с какого из них "захватывать" выделенные объекты. Вот код: Function GetSelectedFiles() 'Returns paths as array of strings Dim FileList, Window, SelectedItem 'avoid duplicates by storing paths in dictionary keys Set FileList = CreateObject("Scripting.Dictionary") With CreateObject("Shell.Application") For Each Window In .Windows ' Document type IShellFolderViewDual3 If InStr(1, typename(Window.Document),"IShellFolderView", 1) > 0 Then For Each SelectedItem In Window.Document.SelectedItems FileList(SelectedItem.Path) = Null Next End If Next End With GetSelectedFiles = FileList.Keys 'array of paths End Function Есть такая замечательная комбинация клавиш как Alt+Esc (активация предыдущего приложения). К сожалению, такого же антипода не нашёл(альтернатива - только Alt+TAB). Хорошо, допустим. Но почему игнорируются окна c флагом "поверх остальных"? Например, я запустил "Диспетчер задач" и выставил ему(его окну) этот флаг. Далее переключился, например, на Total Commander. А вот теперь начинается самое интересное. Почему по нажатию вышеуказанной комбинации клавиш я не попадаю на окно "Диспетчера задач", а на какое-то др. окно? Очень надеюсь на вашу помощь. Скрытый текст
Данное сообщение было отредактировано в связи с замечанием администратора
|
|
Отправлено: 20:22, 10-12-2020 |
(*.*) Сообщения: 36567
|
Профиль | Сайт | Отправить PM | Цитировать Цитата beginer:
|
|
------- Отправлено: 16:39, 12-12-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Vadikan, хорошо. Вас понял. Тогда может ли кто-нибудь помочь мне с первой частью?
Как в вышеприведённой функции отфильтровать все остальные окна, кроме целевого (если мне известен заголовок целевого окна) ? Добавлено: Дополнительное условие, типа: не подходит, так как все открытые окна проводника являются видимыми. И те, которые нужно отсеять и целевое окно. |
Последний раз редактировалось beginer, 15-12-2020 в 14:30. Отправлено: 14:18, 15-12-2020 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать beginer, в чём исполняется код?
|
Отправлено: 16:27, 15-12-2020 | #4 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Iska, в том-то и дело, что не через w(с)script.
Код выполняется в PureBasic'е. Там через такие дебри производится пуск, что самое простое для меня это поправить сам скрипт (по-возможности). Единственный вариант, который могу выполнить - это перед выполнением закрыть окно проводника с идентичным путём или временно скрыть его, чтобы сработало условие выше. Но это некрасиво. И хотелось более элегантного решения. Спрашивал здесь как читать заголовок каждого окна во время перебора(в уже существующем цикле) и соответственно сравнивать его с определённой строкой каждую итерацию. В этом и заключалась суть вопроса. Если из vbs можно вызывать API ОС, то это бы решило/существенно упростило задачу. "Я так думаю" (С). Не скрою, что пример скрипта взял уже готовый. Он потребовался дабы выяснить отмеченные объекты. Иных решений данного вопроса увы не встречал. Неудобство данного варианта заключается в том, что скрипт "хватает" всё что "видит". Повторюсь, что отсеять проводники с уникальными путями не составляет особого труда. НО с идентичным путём(ями) - это проблема! Добавлено: Пожалуйста не беспокойтесь о случаях, когда в настройках ОС (св-ва папки) не выставлено показывать полный путь. Сейчас говорю про вариации с одинаковыми папками на различных разделах и расположенных на одинаковых уровнях(к примеру, "C:\Test"; "D:\Test"; "E:\Test" и т.д.). Ну и соответственно про одинаковые для такого случая заголовки окон. Это проблема решаема. В PB прочитать title совсем не сложно (неужели vbs'у это не под силу?). Категорически нужен этот скрипт (без него никак не обойтись). |
|
Последний раз редактировалось beginer, 15-12-2020 в 19:35. Отправлено: 19:16, 15-12-2020 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать О, боже ж ты мой
![]() ![]() |
Отправлено: 20:12, 15-12-2020 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата beginer:
Попробуйте это: Цитата:
|
||
Отправлено: 21:22, 15-12-2020 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 21:54, 15-12-2020 | #8 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Iska, спасибо за желание помочь. Но этот код не запустить "напрямую"(с ходу/в лоб). Нужна ещё довольно весомая и мудрёная обвёртка. Так что тот кусочек кода, что выше - это только вершина айсберга. Однако сделана обвёртка достойно/добротно. По всем канонам(всё по-взрослому). Очень много работы с памятью(указателями). Немец постарался и поделился своим титаническим трудом с остальными/общественностью.
К тому же в модуле используются вызовы API-функций. Смотрю, что Вы "качаете" демо-версию, а в ней для вызова API нужно действовать немного по-другому. То есть сначала нужно открыть библиотеку и т.д. В полной же версии эти функции являются как бы "нативные" и не требуют дополнительных телодвижений для их вызова. Работать намного проще и удобней. Не знаю запрещены ли здесь ссылки на сторонние сайты, но если что поправьте (по крайней мере это точно не варез, а вполне себе open source). Вот сам модуль-обвёртка, если интересно посмотреть. Но я бы туда без поллитры не лез ![]() Шутка. Вот чувствую, что не в то русло опять зашёл разговор. Заругают админы(наверное нужно завязывать). Поэтому и просил подправить непосредственно vbscript. P.S. Когда-то начинал знакомство со скриптами, но это было недолго(довольно быстро перешёл на PB). Поэтому и задаю здесь возможно детский вопрос. + знаю, что на этом форуме обитает/прописано много профессионалов, причём русскоговорящих. |
Последний раз редактировалось beginer, 15-12-2020 в 22:18. Отправлено: 21:58, 15-12-2020 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата beginer:
Цитата beginer:
|
||
Отправлено: 22:43, 15-12-2020 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - Скрыть активное, работающее окно | nyevgen | Microsoft Windows 7 | 6 | 25-09-2019 17:13 | |
Интерфейс - Как закрепить активное окно? | GuitarFan | Microsoft Windows 7 | 0 | 26-05-2015 13:45 | |
Разное - Постоянно активное окно | Prof | Хочу все знать | 6 | 11-10-2012 12:39 | |
Интерфейс - Не восстанавливается последнее активное окно | Mark012 | Microsoft Windows 7 | 4 | 22-11-2010 15:43 | |
не могу поймать активное окно | SerZzz | AutoIt | 3 | 30-05-2009 13:02 |
|