HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
LINK
BACK
 

2016/12/26

Xcodeで Mac OSX用の使えそうな処理を Tipsとしてまとめ Xcodeで Mac OSX用の使えそうな処理を Tipsとしてまとめ

(Mac OS X用アプリを Swift言語で作る方法)

Tags: [Apple], [MacBook]




● Xcode 7.3.1 Swift 2.2.1で OS X用の使えそうな処理

Welcome to Swift.org

 ここでは、Xcode 7.3.1 Swift 2.2.1を使用して OS X用の使えそうな処理を Tipsとしてまとめます。

 それにしても Swift言語を作ってる奴ってキ○ガイだな。(Lattnerお前の事だ)
 定数とか命令の記述方法とか毎回毎回変えるので。

Swift (プログラミング言語)


●起動しているアプリケーション一覧を取得する
●実行中アプリの内 Dockに表示しているアプリを取得する

//  Copyright (c) 2016 FREE WING,Y.Sakamoto. All rights reserved.

// 起動しているアプリケーション一覧を取得する
            // 起動しているアプリケーション一覧を取得する
            let runningAppList = NSWorkspace.sharedWorkspace().runningApplications

            // 起動しているアプリ一覧を取得する
            Swift.print("*[Active]")
            for app in runningAppList {
                if app.active {
                    // アクティブなアプリを表示する
                    Swift.print(" [Active] " + app.localizedName!)
                } else {
                    // アクティブじゃないアプリを表示する
                    Swift.print("          " + app.localizedName!)
                }
            }

// 実行中アプリの内 Dockに表示しているアプリを取得する
            // Dockに表示しているアプリを取得する
            Swift.print("*[Dock]")
            for app in runningAppList {
                if app.activationPolicy == NSApplicationActivationPolicy.Regular {
                    // Dockに表示しているアプリを表示する
                    Swift.print(" [Dock]   " + app.localizedName!)
                }
            }


● Swiftで AppleScriptを実行する方法

Can you execute an Applescript script from a Swift Application
import Foundation

let task = NSTask()
task.launchPath = "/usr/bin/osascript"
task.arguments = ["~/Desktop/testscript.scpt"]

task.launch()
let myAppleScript = "..."
var error: NSDictionary?
if let scriptObject = NSAppleScript(source: myAppleScript) {
    if let output: NSAppleEventDescriptor = scriptObject.executeAndReturnError(
                                                                       &error) {
        print(output.stringValue)
    } else if (error != nil) {
        print("error: \(error)")
    }
}
Using AppleScript Scripts in Cocoa Applications - Technical Note TN2084


NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource:
            @"\
            set app_path to path to me\n\
            tell application \"System Events\"\n\
            if \"AddLoginItem\" is not in (name of every login item) then\n\
            make login item at end with properties {hidden:false, path:app_path}\n\
            end if\n\
            end tell"];

returnDescriptor = [scriptObject executeAndReturnError: &errorDict];


● Swiftでキー入力をエミュレートする方法

Simulate keypress using Swift

let src = CGEventSourceCreate(CGEventSourceStateID(kCGEventSourceStateHIDSystemState)).takeRetainedValue()

 //  kVK_Command = 0x37
let cmdd = CGEventCreateKeyboardEvent(src, 0x37, true).takeRetainedValue()
let cmdu = CGEventCreateKeyboardEvent(src, 0x37, false).takeRetainedValue()
 //  kVK_Space   = 0x31
let spcd = CGEventCreateKeyboardEvent(src, 0x31, true).takeRetainedValue()
let spcu = CGEventCreateKeyboardEvent(src, 0x31, false).takeRetainedValue()

CGEventSetFlags(spcd, CGEventFlags(kCGEventFlagMaskCommand));
CGEventSetFlags(spcd, CGEventFlags(kCGEventFlagMaskCommand));

let loc = CGEventTapLocation(kCGHIDEventTap)

 // Command + Space
CGEventPost(loc, cmdd) // kVK_Command ON
CGEventPost(loc, spcd) // kVK_Space   ON
CGEventPost(loc, spcu) // kVK_Space   OFF
CGEventPost(loc, cmdu) // kVK_Command OFF

Function CGEventCreateKeyboardEvent
 Returns a new Quartz keyboard event.
 // SHIFT and 'z' key
CGEventRef event1, event2, event3, event4;
event1 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)0x38, true); // kVK_Shift
event2 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)0x06, true); // kVK_ANSI_Z
event3 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)0x06, false);
event4 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)0x38, false);
 CGEventCreateKeyboardEventで指定するキーコード一覧の定義。
 MacOSX_SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h


/*
 *  Summary:
 *    Virtual keycodes
 *
 *  Discussion:
 *    These constants are the virtual keycodes defined originally in
 *    Inside Mac Volume V, pg. V-191. They identify physical keys on a
 *    keyboard. Those constants with "ANSI" in the name are labeled
 *    according to the key position on an ANSI-standard US keyboard.
 *    For example, kVK_ANSI_A indicates the virtual keycode for the key
 *    with the letter 'A' in the US keyboard layout. Other keyboard
 *    layouts may have the 'A' key label on a different physical key;
 *    in this case, pressing 'A' will generate a different virtual
 *    keycode.
 */
enum {
  kVK_ANSI_A                    = 0x00,
  kVK_ANSI_S                    = 0x01,
  kVK_ANSI_D                    = 0x02,
  kVK_ANSI_F                    = 0x03,
  kVK_ANSI_H                    = 0x04,
  kVK_ANSI_G                    = 0x05,
  kVK_ANSI_Z                    = 0x06,
  kVK_ANSI_X                    = 0x07,
  kVK_ANSI_C                    = 0x08,
  kVK_ANSI_V                    = 0x09,
  kVK_ANSI_B                    = 0x0B,
  kVK_ANSI_Q                    = 0x0C,
  kVK_ANSI_W                    = 0x0D,
  kVK_ANSI_E                    = 0x0E,
  kVK_ANSI_R                    = 0x0F,
  kVK_ANSI_Y                    = 0x10,
  kVK_ANSI_T                    = 0x11,
  kVK_ANSI_1                    = 0x12,
  kVK_ANSI_2                    = 0x13,
  kVK_ANSI_3                    = 0x14,
  kVK_ANSI_4                    = 0x15,
  kVK_ANSI_6                    = 0x16,
  kVK_ANSI_5                    = 0x17,
  kVK_ANSI_Equal                = 0x18,
  kVK_ANSI_9                    = 0x19,
  kVK_ANSI_7                    = 0x1A,
  kVK_ANSI_Minus                = 0x1B,
  kVK_ANSI_8                    = 0x1C,
  kVK_ANSI_0                    = 0x1D,
  kVK_ANSI_RightBracket         = 0x1E,
  kVK_ANSI_O                    = 0x1F,
  kVK_ANSI_U                    = 0x20,
  kVK_ANSI_LeftBracket          = 0x21,
  kVK_ANSI_I                    = 0x22,
  kVK_ANSI_P                    = 0x23,
  kVK_ANSI_L                    = 0x25,
  kVK_ANSI_J                    = 0x26,
  kVK_ANSI_Quote                = 0x27,
  kVK_ANSI_K                    = 0x28,
  kVK_ANSI_Semicolon            = 0x29,
  kVK_ANSI_Backslash            = 0x2A,
  kVK_ANSI_Comma                = 0x2B,
  kVK_ANSI_Slash                = 0x2C,
  kVK_ANSI_N                    = 0x2D,
  kVK_ANSI_M                    = 0x2E,
  kVK_ANSI_Period               = 0x2F,
  kVK_ANSI_Grave                = 0x32,
  kVK_ANSI_KeypadDecimal        = 0x41,
  kVK_ANSI_KeypadMultiply       = 0x43,
  kVK_ANSI_KeypadPlus           = 0x45,
  kVK_ANSI_KeypadClear          = 0x47,
  kVK_ANSI_KeypadDivide         = 0x4B,
  kVK_ANSI_KeypadEnter          = 0x4C,
  kVK_ANSI_KeypadMinus          = 0x4E,
  kVK_ANSI_KeypadEquals         = 0x51,
  kVK_ANSI_Keypad0              = 0x52,
  kVK_ANSI_Keypad1              = 0x53,
  kVK_ANSI_Keypad2              = 0x54,
  kVK_ANSI_Keypad3              = 0x55,
  kVK_ANSI_Keypad4              = 0x56,
  kVK_ANSI_Keypad5              = 0x57,
  kVK_ANSI_Keypad6              = 0x58,
  kVK_ANSI_Keypad7              = 0x59,
  kVK_ANSI_Keypad8              = 0x5B,
  kVK_ANSI_Keypad9              = 0x5C
};

/* keycodes for keys that are independent of keyboard layout*/
enum {
  kVK_Return                    = 0x24,
  kVK_Tab                       = 0x30,
  kVK_Space                     = 0x31,
  kVK_Delete                    = 0x33,
  kVK_Escape                    = 0x35,
  kVK_Command                   = 0x37,
  kVK_Shift                     = 0x38,
  kVK_CapsLock                  = 0x39,
  kVK_Option                    = 0x3A,
  kVK_Control                   = 0x3B,
  kVK_RightShift                = 0x3C,
  kVK_RightOption               = 0x3D,
  kVK_RightControl              = 0x3E,
  kVK_Function                  = 0x3F,
  kVK_F17                       = 0x40,
  kVK_VolumeUp                  = 0x48,
  kVK_VolumeDown                = 0x49,
  kVK_Mute                      = 0x4A,
  kVK_F18                       = 0x4F,
  kVK_F19                       = 0x50,
  kVK_F20                       = 0x5A,
  kVK_F5                        = 0x60,
  kVK_F6                        = 0x61,
  kVK_F7                        = 0x62,
  kVK_F3                        = 0x63,
  kVK_F8                        = 0x64,
  kVK_F9                        = 0x65,
  kVK_F11                       = 0x67,
  kVK_F13                       = 0x69,
  kVK_F16                       = 0x6A,
  kVK_F14                       = 0x6B,
  kVK_F10                       = 0x6D,
  kVK_F12                       = 0x6F,
  kVK_F15                       = 0x71,
  kVK_Help                      = 0x72,
  kVK_Home                      = 0x73,
  kVK_PageUp                    = 0x74,
  kVK_ForwardDelete             = 0x75,
  kVK_F4                        = 0x76,
  kVK_End                       = 0x77,
  kVK_F2                        = 0x78,
  kVK_PageDown                  = 0x79,
  kVK_F1                        = 0x7A,
  kVK_LeftArrow                 = 0x7B,
  kVK_RightArrow                = 0x7C,
  kVK_DownArrow                 = 0x7D,
  kVK_UpArrow                   = 0x7E
};

/* ISO keyboards only*/
enum {
  kVK_ISO_Section               = 0x0A
};

/* JIS keyboards only*/
enum {
  kVK_JIS_Yen                   = 0x5D,
  kVK_JIS_Underscore            = 0x5E,
  kVK_JIS_KeypadComma           = 0x5F,
  kVK_JIS_Eisu                  = 0x66,
  kVK_JIS_Kana                  = 0x68
};


● macOSで Caps Lockをプログラムでオンにする方法

 Swiftでの記述が面倒なコードは Objective-Cで書きます。

 Simulate Toggle CAPS LOCK programatically in OS X

Simulate/Toggle CAPS LOCK programatically in OS X

koekeishiya/khd #55 allow use of capslock as key-literal
#include <IOKit/IOKitLib.h>
#include <IOKit/hidsystem/IOHIDLib.h>
#include <IOKit/hidsystem/IOHIDParameter.h>


void SetCapslockState(bool Enabled)
{
    CFMutableDictionaryRef ServiceDictionary = IOServiceMatching(kIOHIDSystemClass);
    if (!ServiceDictionary)
    {
        return;
    }

    io_service_t Service = IOServiceGetMatchingService(kIOMasterPortDefault, ServiceDictionary);
    if (!Service)
    {
        CFRelease(ServiceDictionary);
        return;
    }

    io_connect_t Connection;
    kern_return_t Result = IOServiceOpen(Service, mach_task_self(), kIOHIDParamConnectType, &Connection);
    IOObjectRelease(Service);

    if (Result == KERN_SUCCESS)
    {
        IOHIDSetModifierLockState(Connection, kIOHIDCapsLockState, Enabled);
        IOServiceClose(Connection);
    }
}


int main(int Count, char **Args)
{
    SetCapslockState(false);
    SetCapslockState(true);

    return EXIT_SUCCESS;
}




Tags: [Apple], [MacBook]

●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)

Xcodeで Mac OSX用のクリップボード共有&履歴アプリを作る
Xcodeで Mac OSX用のクリップボード共有&履歴アプリを作る

  Mac OS X用アプリを Swift言語で作る方法、MacOSXでクリップボード監視で変化が有ったら取得

Xcode SWIFTで Mac OSX用のスクリーンマスコットアプリを作る
Xcode SWIFTで Mac OSX用のスクリーンマスコットアプリを作る

  Mac OS X用アプリを Swift言語で作る方法、デスクトップ画面に画像をオーバーレイで描画する方法

Xcode SWIFTで Mac OSX用のスクリーンキャプチャアプリ&画像保存を作る
Xcode SWIFTで Mac OSX用のスクリーンキャプチャアプリ&画像保存を作る

  Mac OS X用アプリを Swift言語で作る方法、デスクトップの画像をキャプチャする方法

Xcode SWIFTで Mac OSX用のスクリーン拡大鏡アプリを作る
Xcode SWIFTで Mac OSX用のスクリーン拡大鏡アプリを作る

  Mac OS X用アプリを Swift言語で作る方法、マウスカーソルの位置をリアルタイムで取得する方法

Xcode SWIFTで Mac OSX用の Finderからドラッグ&ドロップを受け付けるアプリを作る
Xcode SWIFTで Mac OSX用の Finderからドラッグ&ドロップを受け付けるアプリを作る

  Mac OS X用アプリを Swift言語で作る方法、ドラッグ&ドロップを受け付ける方法

Apple MacBook Airを買ってみた。開発者必須アプリの紹介
Apple MacBook Airを買ってみた。開発者必須アプリの紹介

  Xcodeで iPhoneの開発の為に、Mac OS X用アプリを Swift言語で作る方法

Windowsパソコンで Macる。Skylake Platform in OSX86 Hackintoshの夢、BIOS設定内容
Windowsパソコンで Macる。Skylake Platform in OSX86 Hackintoshの夢、BIOS設定内容

  Windows PCで iPhone開発、Mac OS Xで Hackintoshの方法、DVMT Pre-Allocated 128MB

VirtualBoxに Mac OS X macOS Sierraをインストールの夢
VirtualBoxに Mac OS X macOS Sierraをインストールの夢

  Windowsの VirtualBoxに Mac環境を作り OS Xをインストールして動かす夢を見る

Raspberry Pi3で iPhoneの開発言語でお馴染みの Swiftを動かし、GPIOを操作して Lチカする方法
Raspberry Pi3で iPhoneの開発言語でお馴染みの Swiftを動かし、GPIOを操作して Lチカする方法

  Raspbian Jessieで Swift言語のセットアップ方法、GPIOの LEDを Lチカや I2Cを制御する方法




[HOME] | [BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c) 2016 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator

http://www.neko.ne.jp/~freewing/xcode/xcode_swift_6_osx_tips/