[Mac M2 Pro 12CPU, Sonoma 14.3.1, clang++ 15.0.0]
かつてのATOKの様に、かなキー2回押下で再変換までできず、以下のように機能を3分割して実装しました。
英字からひらがな変換:かなキー2回押下、AppleScript
ひらがなを範囲選択:英数キー2回押下、 C++自製関数
再変換:F13キー1回押下、AppleScript
最終的にC++だけで実装できるよう、リファクタリングしていきます。
#include <ApplicationServices/ApplicationServices.h>
void pressShiftLeftArrow(int count) {
// Shiftキーを押す
CGEventRef shiftDown = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)56, true);
CGEventPost(kCGHIDEventTap, shiftDown);
CFRelease(shiftDown);
// 文字数分だけ左矢印キーを押す
for (int i = 0; i < count; ++i) {
CGEventRef leftArrowDown = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)123, true);
CGEventRef leftArrowUp = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)123, false);
CGEventSetFlags(leftArrowDown, kCGEventFlagMaskShift);
CGEventPost(kCGHIDEventTap, leftArrowDown);
CGEventPost(kCGHIDEventTap, leftArrowUp);
CFRelease(leftArrowDown);
CFRelease(leftArrowUp);
// イベント間にわずかな遅延を挿入
usleep(10000); // 10ミリ秒待機
}
// Shiftキーを離す
CGEventRef shiftUp = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)56, false);
CGEventPost(kCGHIDEventTap, shiftUp);
CFRelease(shiftUp);
}