2012-01-29 87 views
1

我通过模拟快捷方式“cmd-shift-ctrl-4”激活了屏幕截图。如何检测屏幕截图被取消?

CGEventRef keyEventDown = CGEventCreateKeyboardEvent(NULL,keyCode,true); 
CGEventSetFlags(keyEventDown,flags); 
CGEventRef keyEventUp = CGEventCreateKeyboardEvent(NULL, keyCode, false); 
CGEventSetFlags(keyEventUp,flags); 

CGEventPost(kCGSessionEventTap, keyEventDown); 
CGEventPost(kCGSessionEventTap, keyEventUp); 

并设置NSTimer来检查粘贴板的changeCount。如果“changeCount”已更改,则意味着已完成捕获。

但问题是,如果我按ESC取消屏幕截图,定时器不知道,它会继续检查粘贴板。那么,如何检测屏幕截图被取消?

+1

请注意,通过单击鼠标按钮(而不是拖动矩形)也可以取消截屏。实现自己的屏幕捕获机制可能会更加健壮,特别是用于启动屏幕捕获的键盘快捷键也可以由用户在系统首选项中更改。 – omz 2012-01-29 16:40:35

回答

2

而不是通过按硬编码的按键序列(其中,如他的评论中指出的,可能是错误的)启动屏幕截图,请使用NSTask运行screencapture。如果进程退出但未创建其输出文件,则用户取消。

+0

太棒了!那有效!!〜非常感谢。 – 2012-01-30 01:04:03

+0

这比不可靠的假按键感谢好多了。 – malhal 2012-10-09 00:58:20