gpt4 book ai didi

macos - 以编程方式在 Mac OS X 上切换键盘查看器

转载 作者:行者123 更新时间:2023-12-03 17:24:41 27 4
gpt4 key购买 nike

我创建了一个 cocoa 应用程序,它有一个带有文本字段的窗口,用于获取用户输入,还有一个小键盘图标按钮,用于调出键盘查看器。当用户单击“确定”或“取消”按钮完成时,我想隐藏键盘查看器。我所做的如下:

//action for keyboard-icon button
-(IBAction)input:(id)sender
{
[self toggleKeyboard:YES];
}

//action for Cancel button
-(IBAction)cancel:(id)sender
{
[self toggleKeyboard:NO];
[NSApp abortModal];
[[self window] orderOut: self];
}

//action for OK button
-(IBAction)ok:(id)sender
{
[self toggleKeyboard:NO];
[NSApp stopModal];
[[self window] orderOut: self];
}


-(void)toggleKeyboard:(BOOL)show
{
NSDictionary *property = [NSDictionary dictionaryWithObject:(NSString*)kTISTypeKeyboardViewer
forKey:(NSString*)kTISPropertyInputSourceType];
NSArray *sources = (NSArray*)TISCreateInputSourceList((CFDictionaryRef)property, false);

TISInputSourceRef keyboardViewer = (TISInputSourceRef)[sources objectAtIndex:0];
if (show == YES)
{
TISSelectInputSource(keyboardViewer);
}
else
{
TISDeselectInputSource(keyboardViewer);
}

CFRelease((CFTypeRef)sources);

}

我可以成功启动键盘查看器,但它无法始终被 TISDeselectInputSource 隐藏。

最佳答案

可以通过编程方式隐藏键盘查看器。不久前,我为我的媒体中心制作了一个 AppleScript,可以切换它。我不会包含显示它的部分,部分是因为您已经弄清楚了,但主要是因为我这样做的方式是调用一些我不记得从哪里得到它的可执行文件。

无论如何,这是 AppleScript:

tell application "System Events"
if exists (process "Keyboard Viewer") then
click (process "Keyboard Viewer"'s window 1's buttons whose subrole is "AXCloseButton")
end if
end tell

这使用了辅助功能,因此您需要打开“启用辅助设备的访问权限”才能使其正常工作。

请注意,使用 Accessibility API 在 Objective-C/C++ 应用程序中也可以完成同样的事情,您可以使用它来避免在应用程序中调用 AppleScript。

关于macos - 以编程方式在 Mac OS X 上切换键盘查看器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10224791/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com