Mac OS下如何查找当前正在dock/桌面打开的window,并发送键盘动作事件
来源:互联网 发布:linux mint美化 编辑:程序博客网 时间:2024/06/03 22:41
//kbCode = keyboard code
//F5=96
//F7=98
//F6=97
//F9=101
-(void)pressKeyboard:(CGKeyCode)kbCode toApp:(NSArray *)appNameArr close:(BOOL *)isClose
{
CFArrayRef windowList =CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly |kCGWindowListExcludeDesktopElements,kCGNullWindowID);
BOOL hasFound=NO;
for(NSMutableDictionary *entry in (__bridgeNSArray *)windowList)
{
NSString *ownerName = [[entry objectForKey:(id)kCGWindowOwnerName]uppercaseString];
NSInteger ownerPID = [[entry objectForKey:(id)kCGWindowOwnerPID]integerValue];
NSString *name = [entryobjectForKey:(id)kCGWindowName];
for (NSString *appKw in appNameArr) {
if ([ownerName rangeOfString:appKw].length>0) {//检查是否要找的window or app
ProcessSerialNumber myPSN = {kNoProcess,kNoProcess};
GetProcessForPID(ownerPID, &myPSN);
SetFrontProcessWithOptions(&myPSN,kSetFrontProcessFrontWindowOnly);
[NSThread sleepForTimeInterval:0.2];
CGEventRef enterKeyUP =CGEventCreateKeyboardEvent(NULL, (CGKeyCode)kbCode,true);
//CGEventSetFlags(event,kCGEventFlagMaskAlternate |kCGEventFlagMaskControl);
CGEventPostToPSN(&myPSN, enterKeyUP);//先确保按键没有按下
CFRelease(enterKeyUP);
CGEventRef enterKeyDOWN =CGEventCreateKeyboardEvent(NULL, (CGKeyCode)kbCode,false);
//CGEventSetFlags(event,kCGEventFlagMaskAlternate |kCGEventFlagMaskControl);
CGEventPostToPSN(&myPSN, enterKeyDOWN);//按键按下
CFRelease(enterKeyDOWN);
NSLog(@"press key %@",kbCode==96?@"F5":(kbCode==97?@"F6":(kbCode==98?@"F7":(kbCode==101?@"F9":@"Err"))));
*isClose = YES;
hasFound=YES;
break;
}
}
if (hasFound) {
break;
}
}
CFRelease(windowList);
if (!hasFound) {
NSLog(@"no window match %@",appNameArr);
}
}
- Mac OS下如何查找当前正在dock/桌面打开的window,并发送键盘动作事件
- Mac OS X:Dock 的附加功能
- Mac OS X平台下的桌面软件开发感悟
- Mac OS X平台下的桌面软件开发感悟
- 技巧-MAC下隐藏Dock栏正在运行中的软件图标
- mac os x下打开应用程序的OC代码
- 如何改变mac os中Dock icons
- mac os 多屏显示Dock
- Window下打开并读取文件的方法
- Window下打开并读取文件的方法
- 打开window桌面文件夹路径的方法
- MAC键盘在MAC OS和WINDOWS下的全屏复制
- Centos7安装cairo-dock,像苹果mac一样的桌面插件
- mac os回到桌面
- Qt for Mac点击dock事件处理
- 强迫症犯了!修改Mac OS X的便笺在Dock上的图标!
- sass的安装(mac OSX、window OS)
- 为什么说Mac OS X的Dock没有Windows任务栏好用
- 【源码分析】CountDownTimer倒计时为何如此优雅
- redis学习教程之一基本命令
- Unity3DGame学习笔记(7):DOTween
- Lintcode42 Maximum Subarray II solution 题解
- Linux服务器上新增开放端口号
- Mac OS下如何查找当前正在dock/桌面打开的window,并发送键盘动作事件
- 运维-JVM监控之内存泄漏
- ContentNegotiatingViewResolver解析器
- 基于 Netty 的自定义帧高可靠性读取方案
- 主成分分析(PCA)和局部线性嵌入(LEE)原理详解
- 第146课:Spark面试经典系列之Yarn Cluster生产环境下JVM的OOM和Stack Overflow问题
- select2.4.0 动态搜索
- 解决scanInfo.proto:1:1: Expected top-level statement (e.g. "message").问题
- C语言中结构体struct类型使用