OSXで音量を変更できるアプリがあります。欠けているのは、サウンドの上下キーを押したときに提供される視覚的なフィードバックです。プログラムでその動作を呼び出す方法を知っている人はいますか? ありがとう
質問する
1050 次
2 に答える
6
これは、このトリックを実行する George Warner と Casey Fleser による小さなコードです。これが本当にやりたいことなのか、よく考えてください。
// Save as sound_up.m
// Compile: gcc -o sound_up sound_up.m -framework IOKit -framework Cocoa
#import <Cocoa/Cocoa.h>
#import <IOKit/hidsystem/IOHIDLib.h>
#import <IOKit/hidsystem/ev_keymap.h>
static io_connect_t get_event_driver(void)
{
static mach_port_t sEventDrvrRef = 0;
mach_port_t masterPort, service, iter;
kern_return_t kr;
if (!sEventDrvrRef)
{
// Get master device port
kr = IOMasterPort( bootstrap_port, &masterPort );
check( KERN_SUCCESS == kr);
kr = IOServiceGetMatchingServices( masterPort, IOServiceMatching( kIOHIDSystemClass ), &iter );
check( KERN_SUCCESS == kr);
service = IOIteratorNext( iter );
check( service );
kr = IOServiceOpen( service, mach_task_self(),
kIOHIDParamConnectType, &sEventDrvrRef );
check( KERN_SUCCESS == kr );
IOObjectRelease( service );
IOObjectRelease( iter );
}
return sEventDrvrRef;
}
static void HIDPostAuxKey( const UInt8 auxKeyCode )
{
NXEventData event;
kern_return_t kr;
IOGPoint loc = { 0, 0 };
// Key press event
UInt32 evtInfo = auxKeyCode << 16 | NX_KEYDOWN << 8;
bzero(&event, sizeof(NXEventData));
event.compound.subType = NX_SUBTYPE_AUX_CONTROL_BUTTONS;
event.compound.misc.L[0] = evtInfo;
kr = IOHIDPostEvent( get_event_driver(), NX_SYSDEFINED, loc, &event, kNXEventDataVersion, 0, FALSE );
check( KERN_SUCCESS == kr );
// Key release event
evtInfo = auxKeyCode << 16 | NX_KEYUP << 8;
bzero(&event, sizeof(NXEventData));
event.compound.subType = NX_SUBTYPE_AUX_CONTROL_BUTTONS;
event.compound.misc.L[0] = evtInfo;
kr = IOHIDPostEvent( get_event_driver(), NX_SYSDEFINED, loc, &event, kNXEventDataVersion, 0, FALSE );
check( KERN_SUCCESS == kr );
}
int main(int argc, char *argv[]) {
HIDPostAuxKey(NX_KEYTYPE_SOUND_UP);
}
その他の興味深いキーコードにはNX_KEYTYPE_SOUND_DOWN
、 、NX_KEYTYPE_MUTE
、NX_KEYTYPE_PLAY
.
于 2012-05-09T16:55:28.527 に答える
0
これは、音量の上下キーを物理的に押すことをシミュレートし、OSに詳細を処理させることで実装します。おそらく、ユーザーが視覚的なフィードバックを無効にしている、おそらくそれが変更されているなどです。これは、視覚的なフィードバックを引き出す最も安全な方法です。
これを見てください:MacOSXでのキー押下イベントのシミュレーション
于 2012-04-23T00:46:51.893 に答える