我需要以编程方式在Mac OS上禁用/禁用系统范围触摸手势。我指的是手势,例如空间之间的四指滑动等。OSX - 禁用全系统触摸手势
我已经看过EventTap,但看起来并不是一个选项(尽管之前有报道 - 这可能是10.8以下的版本)
我也尝试过以编程方式更改系统首选项的多种方法。例如,我尝试在使用IORegistryEntryCreateCFProperties定位它的服务上使用IOConnectSetCFProperties。
我也开始钻研触控板偏好设置面板,看看他们是如何做到这一点,我试图复制它(忽略任何创建/释放的不一致,这仅仅是测试代码):
NSInteger zero = 0;
CFNumberRef numberWith0 = CFNumberCreate(kCFAllocatorDefault, kCFNumberNSIntegerType, &zero);
CFMutableDictionaryRef propertyDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(propertyDict, @"TrackpadFourFingerHorizSwipeGesture", numberWith0);
io_connect_t connect = getEVSHandle(); // Found in the MachineSettings framework
if (!connect)
{
NSLog(@"Unable to get EVS handle");
}
kern_return_t status = IOConnectSetCFProperties(connect, propertyDict);
if (status != KERN_SUCCESS)
{
NSLog(@"Unable to get set IO properties");
}
CFRelease(propertyDict);
CFPreferencesSetValue(CFSTR("com.apple.trackpad.fourFingerHorizSwipeGesture"), _numberWith0, kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
CFPreferencesSetValue(CFSTR("TrackpadFourFingerHorizSwipeGesture"), _numberWith0, CFSTR("com.apple.driver.AppleBluetoothMultitouch.trackpad"), kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
CFPreferencesSynchronize(kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
status = BSKernelPreferenceChanged(CFSTR("com.apple.driver.AppleBluetoothMultitouch.trackpad"));
在这种情况下,它似乎工作,没有错误,并在系统偏好设置窗格中禁用该选项,但四个手指手势继续工作。我怀疑当时注销会有效果,但我没有尝试,因为在任何情况下都不够好。
值得注意的是,Pref窗格本身也调用BSKernelPreferenceChanged,但我不知道为了链接到哪个框架。也许这是问题的关键...
更新:其实我现在已经找到它并将它链接到。添加该调用没有任何区别,但返回1可能表示出现错误。我已将此呼叫添加到上面的代码中。
最后,我想这从终端:
defaults write -globalDomain com.apple.trackpad.fourFingerHorizSwipeGesture 0
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadFourFingerHorizSwipeGesture 0
不具有立竿见影的效果无论是。
我不认为这是不可能的,必须有一个办法......不需要
MAS兼容性。
时,对于“默认写”位,你是什么意思“没有立即效果“重新启动后它工作吗?许多时候,你必须'killall dock'和'killall finder'来让一些默认设置生效。 – jeremy
嗨,杰里米。事实上,但我需要立即产生效果,就像在更改偏好窗格中的触控板选项时一样。 – tarmes
如果你不想注销,你可以尝试重新启动发现者。 –