禁止所有键盘访问、鼠标访问和键盘快捷键事件。

3
为了在我的一个项目中阻止所有键盘访问、鼠标访问和键盘快捷事件,我做了以下几点:
  1. 创建了一个全屏透明无边框窗口,位于其他窗口前面,但是不可见。
  2. 使用简单的return;处理所有键盘和鼠标事件,使其指向该窗口本身。
  3. 使用[NSApp runModalForWindow:myWindow]使窗口模态,以阻止键盘快捷方式。
  4. 仅从触摸板手势事件中释放window
但是这个人在一个小应用程序中使它看起来很简单-MACIFIER
他是怎么做到的?

相关:https://dev59.com/u1TTa4cB1Zd3GeqPsnm7 - clt60
2个回答

0

我相信你可以使用Quartz事件服务。特别是,请查看CGEventTapCreate,并注意第四个参数,它允许您指定要拦截的事件类型。可用的事件类型在CGEventType枚举中列出。

如果将您的过滤器设置为活动过滤器,则从回调中返回NULL将删除该事件。


你的意思是除了手势之外,所有事件都要被阻止吗?有详细的代码吗? - Jiulong Zhao
我已经编辑了我的回答;你可以拦截所有的按键按下、按键抬起、鼠标移动等事件。我认为手势是一种更高级别的鼠标事件,但没关系——如果你拦截了所有的鼠标移动,也就拦截了手势。 - user1071136
你迷失在哪里了?我相信文档非常容易跟随。 - user1071136
正如文档所述,您的程序必须以root身份运行,或启用辅助设备访问权限。还有一种名为CGEventTapCreateForPSN的方法,可以针对特定进程执行相同操作,而不需要root权限。 - user1071136
在这里找到了示例代码,但对我来说太难了。http://keymagic.googlecode.com/svn-history/r117/trunk/OSX/EventHandler.m - Jiulong Zhao

0

我不确定这是否可用,但您可以使用程序hotkeynet(通常用于游戏,但我已成功使用其他方法),并将每个键/鼠标操作映射为不执行任何操作。我曾经用它在大约20-30分钟内阻止了对特定程序的访问。

我不确定它是否有帮助,但它可能是您需要的解决方案?


我已经在我的全屏解决方案中完成了它,但我相信应该有更好的方法。 - Jiulong Zhao
我相信应用程序“MACIFIER”使用了一种非常简单的方法,至少比我的好。 - Jiulong Zhao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接