按下快捷键时快捷方式文件并不总是启动

按下快捷键时快捷方式文件并不总是启动

在我的公司,我们有带触摸屏的 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);
- 将工作站上的一个按钮分配给键绑定。

从理论上看这似乎是一个好主意,但在实践中快捷键绑定无法正常工作。

经过故障排除后,我意识到其中一个程序导致了问题。
让我们将程序称为AB。当B或桌面在前面时,组合键可以正常工作并启动批处理文件。A全屏工作。因此,当A在前面按下组合键时,它不起作用。
所以我为另一个按钮分配了一个alt + tab组合键,但问题就出在这里。

如果我之前在前面按下了ctrl + alt + S组合键,那么即使我切换到或回到桌面后它也不会起作用。AB

更有趣的是,如果我在另一个快捷方式文件上创建另一个快捷键,比如说在停止工作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

答案1

一个强力解决方案是安排每分钟重复执行批处理文件。目标是如果程序正在运行,则用户不会注意到此检查。

不幸的是,在这些运行 Windows Embedded Standard 6 的慢速计算机上,tasklist 及其变体实在太慢了,所以我们必须找到另一种机制来检查程序是否正在运行。幸运的是,检查文件是否存在似乎仍然非常快。

我建议的机制是使用以下语法启动程序:

prog 2 >> \path\to\lockfile

“2 >> file”参数表示 prog 的错误文件被重定向到 lockfile。此文件在 Linux 上也称为 stderr,通常大多数程序都不会写入此文件。在程序运行时,该文件被锁定并且无法删除,因为它正在使用中。如果程序停止,该文件可能存在或不存在,但可以删除。

下面是一个脚本示例,用于检查某个文件是否存在并且可以删除。我添加了 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**
)

要关闭程序而不使其自动启动,就像维护一样,请禁用批处理文件的调度。

或者,如果太麻烦,请添加另一个名为“maintenance”的文件,并在批处理文件中检查其是否存在,如果存在则不执行任何操作。维护结束后删除该文件。

为了测试,可以通过此批处理脚本锁定文件。按任意键停止:

pause 2 >> \path\to\lockfile

参考 :

答案2

你解决这个问题的方法很独特,听起来很接近,但它却离你而去。沿着你迄今为止一直走的路思考,这里有一个提议。

如果安全的话,你必须彻底确定后,您可能希望选择使用 Alt+F4 键绑定应用程序。如果您可以先按 Alt+Tab 组合键,然后再按 Alt+F4 组合键,那就更好了。理论上,您最多按三次此键绑定,就可以关闭两个应用程序并返回桌面。

这样您就可以知道这两个应用程序的确切状态 - 未运行。使用绑定的修订版本,您可以启动应用程序(不再需要检查它们是否正在运行)。

示例(两个应用程序都在运行):

  • 应用程序A具有窗口焦点
  • [按绑定]B获得焦点并关闭,将焦点返回到A
  • [按下绑定]desktop获得焦点,但没有任何关闭
  • [按绑定]A获得焦点并关闭

示例2(B已关闭):

  • desktop具有窗口焦点
  • [按绑定] A(例如)获得焦点并关闭,将焦点返回到desktop

或者,您可以用一个键来执行 Alt+Tab 操作,用另一个键来执行 Alt+F4 操作。用户必须先按下 键1,然后再按下 键2,每个按钮总共按 3 次。

是否安全使用 Alt+F4 取决于您。有人可能认为这永远不安全,但绝对不是如果您的应用程序主动处理数据、根据计划处理数据、具有活动的数据库连接等,那么这样做是安全的。如果应用程序恰好只在用户干预请求时执行其功能,并且 Alt+F4ing 每个应用程序不会留下任何未忘记的临时数据或锁定,则可能不会有任何后果。

一如既往,解决您的问题的方法不止一种。此特定解决方案符合您的初始思维过程和总体主题。

相关内容