[C++] 371 ローマ字を英数モードで打った時のリカバリー その3 再変換までキー5回押下で実装 

[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);
}