我正在为各种模拟器制作前端并触发各种功能,例如保存/加载状态,保存屏幕截图,但具有统一的界面.FS-UAE恼人地使用"Print Screen"作为其截屏键,我想避免用户必须从默认的热键设置更改模拟器.
我已经设法用SendInput模拟我想要的任何按键,除了"打印屏幕"键.
我没有运气使用虚拟键码,我认为这不适用于全屏应用程序.因此,部分代码被注释掉了.(编辑:更好的解释 - DirectInput软件忽略虚拟密钥代码)
使用扫描码,我可以得到任何按键 - 几乎.打印屏幕似乎是奇怪的.
这是我用于扫描码的参考; https://msdn.microsoft.com/en-us/library/aa299374(v=vs.60).aspx
以下是重现问题的最低可行代码.如果你运行它,按一个键然后快速切换到记事本并等待2秒,它应按字母"q"进入记事本,然后退出.
将扫描代码从0x10(q)更改为0x37(打印屏幕),请务必在两个位置执行 - KEY DOWN和KEY UP.
现在再次运行它,按一个键然后等待.要查看"打印屏幕"是否有效,请打开MS Paint或其他任何内容,然后按CTRL + V,查看是否获得了桌面的屏幕截图.它不起作用!但是如果您手动按Print Screen,并按CTRL + V进入MS Paint,它将起作用.
为什么Print Screen键不起作用?
#include "stdafx.h"
//For create process & keyboard codes
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
int main()
{
INPUT ip = {};
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.wVk = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.dwFlags = 0;
printf("Press a key, then taskswitch.\n");
system("pause");
Sleep(2000);
//KEY DOWN
ip.ki.wScan = 0x10; //0x37 PrintScreen, 0x10 Q
ip.ki.dwFlags …Run Code Online (Sandbox Code Playgroud) 据我所知,我正在做我被告知的一切。
命令行中的命令“shutdown -P now”正是我想要的——立即关闭计算机。但使用该命令作为 cron 作业永远不会发生。
我只是希望它在周一到周五晚上 8:30 关闭,然后在晚上 9:30 和晚上 10:30 再次关闭。这就是我所做的;
我输入“crontab -e”,并将其添加到文件底部:
30 20,21,22 * * 1-5 shutdown -P now
Run Code Online (Sandbox Code Playgroud)
我按 CTRL+O 来“保存”它,然后按 CTRL+X 退出。我在提示符下收到“crontab:安装新的 crontab”消息。
但到了晚上8点30分,还没有关机。晚上 9:30 或晚上 10:30 也不会。
编辑:处理此处提供的列表; CronJob 未运行
我停在“测试 cron 正在工作”处。我输入命令
* * * * * /bin/echo "cron works" >> /tmp/file
Run Code Online (Sandbox Code Playgroud)
我得到了错误
Apps: command not found
Run Code Online (Sandbox Code Playgroud)
在 Google 中搜索此错误不会出现任何相关内容。
另外,我终于能够看到(感谢链接)在哪里获取消息日志输出 - 我在 Linux Mint 中(应该提到这一点),所以我需要 Ubuntu 方式来查找日志输出。关闭命令似乎已运行,唯一的“错误”消息是“未安装 MTA”,这(根据我刚刚读到的)仅用于通过电子邮件发送输出。否则似乎没有任何明显的错误消息......有人能理解这一点吗?
domarius@Domarius-LinuxMint ~ $ grep CRON /var/log/syslog
Aug 3 08:17:01 Domarius-LinuxMint CRON[3259]: (root) CMD …Run Code Online (Sandbox Code Playgroud)