我一直在使用Swift-Keylogger作为命令行程序。
我最近想开始使用它,因为我最近开始使用mac开发。
由于它是一个命令行程序,作者使用RunLoop.current.run()
按顺序连续运行键盘记录程序。
现在的问题是我无法使用RunLoop.current.run()
,因为它会阻止用户界面。
我查看了GCD
,它只运行了一段代码。但我想继续运行它。我看到了一些关于连续运行的其他文章,但我发现在每个'n'指定时间后使用Timer
连续运行代码。
那么,如何在不阻止UI的情况下替换具有相同行为的RunLoop.current.run()
?
答案 0 :(得分:1)
更新日期:05/07/2018
要从用户界面启动和停止键盘记录器,请从GitHub
检查此问题更新日期:18/01/2018
有些人和我一样接近我。经过一番讨论和试错法,他找到了解决方案。
1)只需注释掉键盘记录代码中的RunLoop.main.run()
行。
2)现在停用应用沙箱。如果要启用应用沙箱,请添加此权利com.apple.security.device.usb = YES
。
原文:18/03/2017
在我编写键盘记录器时,我也在开始时搜索了很多内容。过了一天我放弃了。
我在swift中使用Process
来从我的UI运行键盘记录器。
我的方式是:
在键盘记录程序源中进行必要的修改,例如文件/文件夹的路径。
编译键盘记录程序源。
将键盘记录器拖到Xcode中的项目中,然后选中copy if needed
。
可执行文件位于.app
内的资源文件夹中。
使用Process
类和launch()
运行可执行文件以启动可执行文件/您的键盘记录程序。
您应该终止创建的进程,否则键盘记录器将在后台运行。要停止键盘记录器,请在terminate()
变量上使用Process
。
<强>代码:强>
let pathToKeylogger = Bundle.main.resourcePath! + "/Keylogger" // path to keylogger executable
keylogger = Process() // You need to declare this variable at class-level because you need to have the variable later to terminate it.
keylogger.launchPath = pathToKeylogger
keylogger.launch()
要终止:
keylogger.terminate()
编辑:2017年3月18日
尝试正常退出您的应用,即点击退出菜单栏或在停靠栏中,而不是在Xcode中按停止按钮。我想你在Xcode中停止了。