2

У меня в компании маленькие рабочие станции ~ 13 дюймов с сенсорным экраном.
Операционная система: Microsoft Windows Embedded Standard 6.1.7601 Service Pack 1 Build 7601
На рабочих станциях есть 5 кнопок, которые можно сопоставить для любой комбинации клавиш. (пример ctrl+alt+shift+[any key on the keyboard])

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

Так что я:
- создал пакетный файл, который при запуске проверяет, запущены ли программы, если нет - запускает их;
- создал ярлык командного файла (в %appdata%\Microsoft\Windows\Start Menu\Programs как предлагается здесь);
- добавлена комбинация клавиш (ctrl + alt + s);
- назначил одну из кнопок на рабочей станции привязке клавиш.

Теоретически это казалось хорошей идеей, но на практике привязка клавиш не работала должным образом.

После устранения неполадок я понял, что одна из программ вызывает проблему.
Давайте назовем программы A и B Когда B или рабочий стол находятся впереди, комбинация клавиш работает правильно и запускает пакетный файл. A работает в полноэкранном режиме. Поэтому, когда комбинация клавиш нажата, когда A находится впереди, она не работает.
Поэтому я назначил комбинацию клавиш alt + tab для другой кнопки, но тут возникает проблема.

Если я ранее нажимал ctrl + alt + S когда A находился впереди, впоследствии он не будет работать даже после того, как я переключился на B или на рабочий стол.

Что делает его более интересным, так это то, что если я создаю другую комбинацию клавиш для другого файла ярлыка, скажем, ctrl + alt + D и запускаю ее после того, как ctrl + alt + S перестал работать, он исправит это и ctrl + alt + S начнет работать снова в то время как B или рабочий стол имеет фокус.

Пробовал это, не сработало.
Красный этот форум. Нет решения.

Я ищу решение / обходной путь / другой метод для решения этой проблемы.

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

РЕДАКТИРОВАТЬ:

Пакетный файл

echo off
tasklist /FI "IMAGENAME eq progB.exe" 2>NUL | find /I /N "progB.exe">NUL
if "%ERRORLEVEL%"=="1" (
cd C:\<progB path>
start /MAX progB.exe

)

tasklist /FI "IMAGENAME eq progA.exe" 2>NUL | find /I /N "progA.exe">NUL
if "%ERRORLEVEL%"=="1" C:\<progA path>

exit

2 ответа2

1

Решение для перебора - планировать выполнение командного файла каждую минуту. Цель состоит в том, что, если программы работают, эта проверка не будет заметна пользователю.

К сожалению, на этих медленных компьютерах, работающих под управлением Windows Embedded Standard 6, список задач и его вариант работают слишком медленно, поэтому нам нужно найти другой механизм для проверки, работают ли программы. К счастью, кажется, что проверка на наличие файла все еще очень быстро.

Механизм, который я предлагаю, заключается в запуске программ с использованием следующего синтаксиса:

prog 2 >> \path\to\lockfile

Параметр «2 >> file» означает, что файл ошибок программы prog перенаправлен в файл блокировки. Этот файл, также называемый stderr в Linux, обычно никогда не записывается в большинство программ. Во время работы программы файл заблокирован и не может быть удален, поскольку он используется. Если программа остановлена, файл может существовать или не существовать, но его можно удалить.

Вот пример сценария, который проверяет, существует ли файл и может ли он быть удален. Я добавил команды echo, полезные при отладке такого скрипта.

@echo off
if exist \path\to\lockfile (
  echo lockfile exists
  del \path\to\lockfile
  if exist \path\to\lockfile (
    echo lockfile is locked - program is running
  ) else (
    echo lockfile was deleted - program is not running
    **launch program here**
  )
) else (
  echo lockfile doesn't exist - program is not running
  **launch program here**
)

Чтобы закрыть программу без ее автоматического запуска, как для обслуживания, отключите планирование пакетного файла.

Или, если это слишком хлопотно, добавьте еще один файл под названием "обслуживание" и проверьте его наличие в командном файле, ничего не делая, если он существует. Удалите файл после завершения обслуживания.

Для тестирования можно заблокировать файл с помощью этого пакетного скрипта. Нажмите любую клавишу, чтобы остановить:

pause 2 >> \path\to\lockfile

Рекомендации :

0

Ваш подход к этой проблеме уникален и звучит близко, но он убегает от вас. Думая по тому же пути, по которому вы шли до сих пор, вот предложение.

Если это безопасно, что вам придется тщательно определить, вы можете выбрать использование привязки клавиш для Alt+F4 приложений. Было бы еще лучше, если бы вы могли сначала сделать комбинацию Alt+Tab, а затем Alt+F4. Теоретически, вы сможете закрыть оба приложения и вернуться к рабочему столу, нажав эту клавишу привязки максимум три раза.

Это оставит вас в положении, когда вы знаете точное состояние обоих приложений - не работает. Используя отредактированную версию вашей привязки, вы можете запустить ваши приложения (больше нет необходимости проверять, работают ли они).

Пример (оба приложения работают):

  • приложение A имеет фокус окна
  • [нажмите связать] B имеет фокус и закрывается, возвращая фокус на A
  • [press bind] desktop имеет фокус, и ничего не закрывается
  • [нажмите связать] A имеет фокус и закрывает

Пример 2 (B был закрыт):

  • desktop имеет фокусировку окна
  • [нажмите связать] A (например) имеет фокус и закрывается, возвращая фокус на desktop

Кроме того, у вас может быть одна клавиша для Alt+Tab и другая клавиша для Alt+F4. Пользователи должны будут нажать клавишу 1 , а затем клавишу 2 , всего 3 нажатия для каждой кнопки.

Вам решать, безопасны ли Alt+F4ing ваших приложений. Один не может рассматривать это никогда не должно быть безопасным, но это совсем не безопасно делать , если ваши данные приложения процесса активно обрабатывать данные , основанные на графике, иметь активное подключение к базе данных, ЭСТ. Если приложения выполняют свои функции только тогда, когда пользователь вмешивается в запрос, и Alt+F4 в каждом приложении не оставляет незабываемых временных данных или блокировок, это может не иметь последствий.

Как всегда, существует более одного подхода к вашей проблеме. Это конкретное решение соответствует вашему первоначальному мыслительному процессу и общей теме.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .