Potrzebuję programowo wyłączać/blokować gesty dotykowe dla całego systemu w systemie Mac OS. Mam na myśli takie gesty, jak przesunięcie palcem między spacji na 4 palce, itp.OSX - wyłączanie gestów dotykowych w całym systemie
Sprawdziłem EventTap, ale nie wydaje mi się to możliwe (mimo wcześniejszych raportów tutaj - być może zmieniono to pod 10,8)
Próbowałem również wiele sposobów na zmianę preferencji systemowych programowo. Na przykład próbowałem użyć IOConnectSetCFProperties w usłudze, która zlokalizowała go przy użyciu IORegistryEntryCreateCFProperties.
Ja również zagłębił się w panelu preferencji trackpad, aby zobaczyć jak oni to robią, a ja starałem się go odtworzyć (ignoruje wszelkie tworzenie/niespójności zwalniające, to jest kod tylko test):
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"));
W w tym przypadku wygląda na to, że działa, nie ma błędów, a opcja zostaje wyłączona w panelu preferencji systemu, jednak gest czterech palców nadal działa. Podejrzewam, że wylogowanie się będzie miało skutek, ale nie próbowałem, ponieważ nie jest to wystarczająco dobre.
Warto zauważyć, że samo okienko Pref również wywołuje BSKernelPreferenceChanged, ale nie wiem, które ramy mogą być w celu dołączenia do niego. Być może jest to kluczem do problemu ...
AKTUALIZACJA: Właściwie znalazłem go i powiązałem z tym. Dodanie tego wywołania nie miało znaczenia, chociaż zwraca 1, co może wskazywać na błąd. Dodałem połączenie do powyższego kodu.
końcu próbowałem to z terminala:
defaults write -globalDomain com.apple.trackpad.fourFingerHorizSwipeGesture 0
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadFourFingerHorizSwipeGesture 0
który nie ma natychmiastowy efekt albo.
Nie wierzę, że nie jest to możliwe, musi być jakiś sposób ...
kompatybilność MAS nie jest wymagane.
Dla „defaults write” bit, co masz na myśli przez „nie ma natychmiastowego efekt "Czy działa po ponownym uruchomieniu? Wiele razy trzeba "killall dock" i "killall finder", aby niektóre z ustawień domyślnych zaczęły obowiązywać. – jeremy
Cześć Jeremy. Rzeczywiście, ale potrzebuję tego, aby uzyskać natychmiastowy efekt, tak jak w przypadku zmiany opcji gładzika w panelu preferencji. – tarmes
możesz spróbować ponownie uruchomić wyszukiwarkę, jeśli nie chcesz się wylogować. –