Показать полную графическую версию : Программа всегда поверх всех окон и в "фокусе"
pernatiy05
12-02-2019, 08:03
Уважаемые пользователи, приветствую, есть задача с виду простая.. но бьюсь уже 2 дня.
Вводные:
Есть программа, которая должна запускаться и постоянно висеть по верх всего, быть в фокусе. имя программы в памяти постоянное D:\tools\App\Notepad++\notepad++.exe, запускается всегда из одного места.
Как запустить и сделать по верх всего всегда, т.к. при любом действии на компьютере пользователя или фоновой программы - notepadd++.exe должен быть всегда поверх и активным...
Есть предположение в VBS через loop в 1 секунду, но что дальше и как я не могу понять....
На форуме есть темы как сделать поверх всего... но именно поверх всего без фиксации...
Огромный + с меня в карму, если будет решение... на любом языке, но в приоритете AutoIT или VBS
pernatiy05, это такой недо-вымогатель что ли?
pernatiy05
12-02-2019, 09:31
это такой недо-вымогатель что ли? »
это программа notepad++, в нее будут отправлятся отсканированные штрихкоды... и для того что бы она была постоянно "в фокусе" в нее летели эти самые штрихкоды, и нужно что бы она была всегда активна.
отправлятся будут с обычных беспроводных сканеров штрих кода, которые есть на кассал любого магазина. Но сам сканер никак не сигнализирует, попал штрих код в программу или нет... т.е. для него обратной связи нет
это программа notepad++ »Меню-Вид-Поверх всех окон не прокатывает?
https://c.radikal.ru/c28/1902/7e/eda2282ba88e.jpg (https://radikal.ru)
и нужно что бы она была всегда активна. »
Тогда всё другое станет неактивным и вы даже кликнуть мышкой не сможете на что-то другое.
Посмотрите InqSoft Window Scanner (https://soft.sibnet.ru/soft/21901-inqsoft-window-scanner-1-7/)
pernatiy05, если создание текстового файла - это реальная задача. То вместо этих лютых костылей лучше переключить сканеры в режим COM-порта. А из COM'а уже писать в текстовый файл независимо от активности окон.
чтение из COM на PowerShell (https://stackoverflow.com/questions/31297365/how-to-continuously-read-serial-com-port-in-powershell-and-occasionally-write-to)
одно активное приложение, которое нельзя закрыть/свернуть - называется kiosk mode - может так нагуглите что интересное
То вместо этих лютых костылей »
переключить сканеры в режим COM-порта. А из COM'а уже писать в текстовый файл независимо от активности окон. »А это не костыль лезть через задницу.
Ну-ну.
yurfed, это как раз нормальный и прямой путь - если устройство нужно эксклюзивно приложению - прописывают его явно в приложении. Так происходит и со специализированными принтерами, и со звуковыми устройствами в том же скайпе, и с джойстиками в играх. И для сканеров ш/к - однозначный биндинг на специализированном РМ - это нормальный подход к автоматизации.
Busla, Человеку только и нужно, сделать активным окно и не писать коды, которые может и не знает. Просто нажать в три клика и скрипт в EXE формате готов.
В предложенном всё это есть.
Хочется больше знать - учись или сам осваивай, но как всегда лень, некогда или просто не охота :).
Да и COM порты, если не ошибаюсь, давно уже отсутствуют как чипы или встроенные.
Только виртуализация. Где-то так.
Да и COM порты, если не ошибаюсь, давно уже отсутствуют »
типичный сканер ш/к эмулирует либо клавиатуру, либо COM-порт. Режим эмуляции переключается сканированием управляющего ш/к из инструкции. В современных реалиях физического подключения по usb/bluetouth - чисто программная операция.
Только виртуализация. Где-то так. »Ну читай эмуляция, как душе угодно.
Только не понятно чем тебе предложенный вариант не нравится. Легко, просто, быстро. 10 секунд.
pernatiy05, насколько мне известно, в нынешних ОС Windows не существует способа запретить перехват фокуса ввода другому приложению: Focus stealing - Wikipedia (https://en.wikipedia.org/wiki/Focus_stealing). И никакие «Поверх всех окон» никак на фокус ввода не повлияют.
pernatiy05
15-02-2019, 07:47
Спасибо всем выше ответившим, но к сожелению по тем или иным причинам варианты предложенные не подходят:
Написал пока что на VBS, по идеи должен работать и перекидывать фокус на данный процесс... но что то не так.
Получается программа активна, но в ней писать не могу... как будто она не в фокусе...
Кто ,что думает... где нужно что дописать или исправить ,понимаю что в верном направлении и ду.. но дальше знаний VBS нехватает
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "D:\TSD\Notepad++Portable.exe"
Set WshShell = Nothing
Set SH = CreateObject("WScript.Shell")
Do
Set locator = CreateObject("WbemScripting.SWbemLocator")
Set service = locator.ConnectServer()
Set props = service.ExecQuery("select * from Win32_Process where name = 'notepad++.exe'")
For Each objProcess in props
SH.AppActivate objProcess.ProcessId
Next
WScript.Sleep 500
Loop
Serguei Kouzmine
15-02-2019, 16:07
написали же - это *нельзя*
https://blogs.msdn.microsoft.com/oldnewthing/20090220-00/?p=19083
Foreground activation permission is like love: You can’t steal it, it has to be given to you
Написал пока что на VBS, по идеи должен работать и перекидывать фокус на данный процесс... но что то не так.
Получается программа активна, но в ней писать не могу... как будто она не в фокусе... »
pernatiy05, метод .AppActivate() делает ровно следующее:
Activates an application window
и ничего более.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.