Masacccch
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # コード丸揚げ専用 ;半角全角キーを英語オンリーにする #Requires AutoHotkey v2.0 ;;; IME.ahk NYSL <http://www.kmonos.net/nysl/> ;;; AutoHotokeyを流行らせるアップローダ <http://lukewarm.s101.xrea.com/up/> の 089.zip [Shift&Space + IME.ahk] (2008/09/21 20:18) ;;; Index of /_pub/eamat/MyScript の IME20091203.zip (IME.ahk) ;;; http://www6.atwiki.jp/eamat/pub/MyScript/ ;;; IME20121110.zip (本家,A32/U32/U64 同梱) ;; http://www6.atwiki.jp/_pub/eamat/MyScript/Lib/IME20121110.zip ;; AutoHotkey_L (unicode binaries) に準拠した ;; レジストリから使用中のimeの情報を取得できるようにした ;; 推測変換(atok)や予想入力(msime)中は変換候補窓が出ていないものとして取り扱うようにした /***************************************************************************** IME制御用 関数群 (IME.ahk) グローバル変数 : なし 各関数の依存性 : なし(必要関数だけ切出してコピペでも使えます) AutoHotkey: v 2.0 Language: Japanease Platform: NT系 Author: v 1.1 eamat. http://www6.atwiki.jp/eamat/ v 2.0 Ken'ichiro Ayaki ***************************************************************************** 履歴 2008.07.11 v1.0.47以降の 関数ライブラリスクリプト対応用にファイル名を変更 2008.12.10 コメント修正 2009.07.03 IME_GetConverting() 追加 Last Found Windowが有効にならない問題修正、他。 2009.12.03 ・IME 状態チェック GUIThreadInfo 利用版 入れ込み (IEや秀丸8βでもIME状態が取れるように) http://blechmusik.xrea.jp/resources/keyboard_layout/DvorakJ/inc/IME.ahk ・Google日本語入力β 向け調整 入力モード 及び 変換モードは取れないっぽい IME_GET/SET() と IME_GetConverting()は有効 2012.11.10 x64 & Unicode対応 実行環境を AHK_L U64に (本家およびA32,U32版との互換性は維持したつもり) ・LongPtr対策:ポインタサイズをA_PtrSizeで見るようにした ;================================== ; GUIThreadInfo ;================================= ; 構造体 GUITreadInfo ;typedef struct tagGUITHREADINFO {(x86) (x64) ; DWORD cbSize; 0 0 ; DWORD flags; 4 4 ※ ; HWND hwndActive; 8 8 ; HWND hwndFocus; 12 16 ※ ; HWND hwndCapture; 16 24 ; HWND hwndMenuOwner; 20 32 ; HWND hwndMoveSize; 24 40 ; HWND hwndCaret; 28 48 ; RECT rcCaret; 32 56 ;} GUITHREADINFO, *PGUITHREADINFO; ・WinTitleパラメータが実質無意味化していたのを修正 対象がアクティブウィンドウの時のみ GetGUIThreadInfoを使い そうでないときはControlハンドルを使用 一応バックグラウンドのIME情報も取れるように戻した (取得ハンドルをWindowからControlに変えたことでブラウザ以外の大半の アプリではバックグラウンドでも正しく値が取れるようになった。 ※ブラウザ系でもアクティブ窓のみでの使用なら問題ないと思う、たぶん) 2023.07.09 実行環境を Autohotkey v2.0 とする。 ファイル名を IMEv2.ahk に変更。 */ ;----------------------------------------------------------- ; IMEの状態の取得 ; WinTitle="A" 対象Window ; 戻り値 1:ON / 0:OFF ;----------------------------------------------------------- IME_GET(WinTitle:="A") { hwnd := WinExist(WinTitle) if (WinActive(WinTitle)) { ptrSize := !A_PtrSize ? 4 : A_PtrSize cbSize := 4+4+(PtrSize*6)+16 stGTI := Buffer(cbSize,0) NumPut("DWORD", cbSize, stGTI.Ptr,0) ; DWORD cbSize; hwnd := DllCall("GetGUIThreadInfo", "Uint",0, "Uint", stGTI.Ptr) ? NumGet(stGTI.Ptr,8+PtrSize,"Uint") : hwnd } return DllCall("SendMessage" , "UInt", DllCall("imm32\ImmGetDefaultIMEWnd", "Uint",hwnd) , "UInt", 0x0283 ;Message : WM_IME_CONTROL , "Int", 0x0005 ;wParam : IMC_GETOPENSTATUS , "Int", 0) ;lParam : 0 } ;----------------------------------------------------------- ; IMEの状態をセット ; SetSts 1:ON / 0:OFF ; WinTitle="A" 対象Window ; 戻り値 0:成功 / 0以外:失敗 ;----------------------------------------------------------- IME_SET(SetSts, WinTitle:="A") { hwnd := WinExist(WinTitle) if (WinActive(WinTitle)) { ptrSize := !A_PtrSize ? 4 : A_PtrSize cbSize := 4+4+(PtrSize*6)+16 stGTI := Buffer(cbSize,0) NumPut("Uint", cbSize, stGTI.Ptr,0) ; DWORD cbSize; hwnd := DllCall("GetGUIThreadInfo", "Uint",0, "Uint",stGTI.Ptr) ? NumGet(stGTI.Ptr,8+PtrSize,"Uint") : hwnd } return DllCall("SendMessage" , "UInt", DllCall("imm32\ImmGetDefaultIMEWnd", "Uint",hwnd) , "UInt", 0x0283 ;Message : WM_IME_CONTROL , "Int", 0x006 ;wParam : IMC_SETOPENSTATUS , "Int", SetSts) ;lParam : 0 or 1 } ;=========================================================================== ; IME 入力モード 取得 / セット ; ; 0000xxxx かな入力 ; 0001xxxx ローマ字入力 ; xxxx0xxx 半角 ; xxxx1xxx 全角 ; xxxxx000 英数 ; xxxxx001 ひらがな ; xxxxx011 カナ/カナ ; ; 0 (0x00 0000 0000) かな 半英数 ; 3 (0x03 0000 0011) 半カナ ; 8 (0x08 0000 1000) 全英数 ; 9 (0x09 0000 1001) ひらがな ; 11 (0x0B 0000 1011) 全カタカナ ; 16 (0x10 0001 0000) ローマ字半英数 ; 19 (0x13 0001 0011) 半カナ ; 24 (0x18 0001 1000) 全英数 ; 25 (0x19 0001 1001) ひらがな ; 27 (0x1B 0001 1011) 全カタカナ ; 1025 中国語? ;=========================================================================== ; IME 入力モード (どの IMEでも共通っぽい) ; DEC HEX BIN ; 0 (0x00 0000 0000) かな 半英数 ; 3 (0x03 0000 0011) 半カナ ; 8 (0x08 0000 1000) 全英数 ; 9 (0x09 0000 1001) ひらがな ; 11 (0x0B 0000 1011) 全カタカナ ; 16 (0x10 0001 0000) ローマ字半英数 ; 19 (0x13 0001 0011) 半カナ ; 24 (0x18 0001 1000) 全英数 ; 25 (0x19 0001 1001) ひらがな ; 27 (0x1B 0001 1011) 全カタカナ ; ※ 地域と言語のオプション - [詳細] - 詳細設定 ; - 詳細なテキストサービスのサポートをプログラムのすべてに拡張する ; が ONになってると値が取れない模様 ; (Google日本語入力βはここをONにしないと駄目なので値が取れないっぽい) ;------------------------------------------------------- ; IME 入力モード取得 ; WinTitle="A" 対象Window ; 戻り値 入力モード ;-------------------------------------------------------- IME_GetConvMode(WinTitle:="A") { hwnd := WinExist(WinTitle) if (WinActive(WinTitle)) { ptrSize := !A_PtrSize ? 4 : A_PtrSize cbSize := 4+4+(PtrSize*6)+16 ; DWORD*2+HWND*6+RECT stGTI := Buffer(cbSize,0) NumPut("UInt", cbSize, stGTI.Ptr,0) ; DWORD cbSize; hwnd := DllCall("GetGUIThreadInfo", "Uint",0, "Uint",stGTI.Ptr) ? NumGet(stGTI.Ptr,8+PtrSize,"Uint") : hwnd } return DllCall("SendMessage" , "Uint", DllCall("imm32\ImmGetDefaultIMEWnd", "Uint",hwnd) , "Uint", 0x0283 ;Message : WM_IME_CONTROL , "Int", 0x001 ;wParam : IMC_GETCONVERSIONMODE , "Int", 0) ;lParam : 0 } ;------------------------------------------------------- ; IME 入力モードセット ; ConvMode 入力モード ; WinTitle="A" 対象Window ; 戻り値 0:成功 / 0以外:失敗 ;-------------------------------------------------------- IME_SetConvMode(ConvMode,WinTitle:="A") { hwnd := WinExist(WinTitle) if (WinActive(WinTitle)) { ptrSize := !A_PtrSize ? 4 : A_PtrSize cbSize := 4+4+(PtrSize*6)+16 stGTI := Buffer(cbSize,0) NumPut("Uint", cbSize, stGTI.Ptr,0) ; DWORD cbSize; hwnd := DllCall("GetGUIThreadInfo", "Uint",0, "Ptr",stGTI.Ptr) ? NumGet(stGTI.Ptr,8+PtrSize,"Uint") : hwnd } return DllCall("SendMessage" , "UInt", DllCall("imm32\ImmGetDefaultIMEWnd", "Uint",hwnd) , "UInt", 0x0283 ;Message : WM_IME_CONTROL , "Int", 0x002 ;wParam : IMC_SETCONVERSIONMODE , "Int", ConvMode) ;lParam : CONVERSIONMODE } ;=========================================================================== ; IME 変換モード (ATOKはver.16で調査、バージョンで多少違うかも) ; MS-IME 0:無変換 / 1:人名/地名 / 8:一般 /16:話し言葉 ; ATOK系 0:固定 / 1:複合語 / 4:自動 / 8:連文節 ; WXG / 1:複合語 / 2:無変換 / 4:自動 / 8:連文節 ; SKK系 / 1:ノーマル (他のモードは存在しない?) ; Googleβ / 8:ノーマル ;------------------------------------------------------------------ ; IME 変換モード取得 ; WinTitle="A" 対象Window ; 戻り値 MS-IME 0:無変換 1:人名/地名 8:一般 16:話し言葉 ; ATOK系 0:固定 1:複合語 4:自動 8:連文節 ; WXG4 1:複合語 2:無変換 4:自動 8:連文節 ;------------------------------------------------------------------ IME_GetSentenceMode(WinTitle:="A") { hwnd := WinExist(WinTitle) if (WinActive(WinTitle)) { ptrSize := !A_PtrSize ? 4 : A_PtrSize cbSize := 4+4+(PtrSize*6)+16 stGTI := Buffer(cbSize,0) NumPut("Uint", cbSize, stGTI.Ptr,0) ; DWORD cbSize; hwnd := DllCall("GetGUIThreadInfo", "Uint",0, "Uint", stGTI.Ptr) ? NumGet(stGTI.Ptr,8+PtrSize,"UInt") : hwnd } return DllCall("SendMessage" , "UInt", DllCall("imm32\ImmGetDefaultIMEWnd", "Uint",hwnd) , "UInt", 0x0283 ;Message : WM_IME_CONTROL , "Int", 0x003 ;wParam : IMC_GETSENTENCEMODE , "Int", 0) ;lParam : 0 } ;---------------------------------------------------------------- ; IME 変換モードセット ; SentenceMode ; MS-IME 0:無変換 1:人名/地名 8:一般 16:話し言葉 ; ATOK系 0:固定 1:複合語 4:自動 8:連文節 ; WXG 1:複合語 2:無変換 4:自動 8:連文節 ; WinTitle="A" 対象Window ; 戻り値 0:成功 / 0以外:失敗 ;----------------------------------------------------------------- IME_SetSentenceMode(SentenceMode,WinTitle:="A") { hwnd := WinExist(WinTitle) if (WinActive(WinTitle)) { ptrSize := !A_PtrSize ? 4 : A_PtrSize ;VarSetStrCapacity(stGTI, cbSize:=4+4+(PtrSize*6)+16) cbSize:=4+4+(PtrSize*6)+16 stGTI := Buffer(cbSize,0) NumPut("Uint", cbSize, stGTI.Ptr) ; DWORD cbSize; hwnd := DllCall("GetGUIThreadInfo", "Uint",0, "Uint", stGTI.Ptr) ? NumGet(stGTI.Ptr,8+PtrSize,"UInt") : hwnd } return DllCall("SendMessage" , "UInt", DllCall("imm32\ImmGetDefaultIMEWnd", "Uint",hwnd) , "UInt", 0x0283 ;Message : WM_IME_CONTROL , "Int", 0x004 ;wParam : IMC_SETSENTENCEMODE , "Int", SentenceMode) ;lParam : SentenceMode } ;;; software / AutoHotkey スレッド part8 ;;; http://p2.chbox.jp/read.php?url=http%3A//pc12.2ch.net/test/read.cgi/software/1243005818/787 ;;; IMEの変換状態を見る ;;; http://sites.google.com/site/agkh6mze/scripts#TOC-IME- ;;; software / AutoHotkey スレッド part9 ;;; http://p2.chbox.jp/read.php?url=http%3A//pc12.2ch.net/test/read.cgi/software/1253888736/400 ;--------------------------------------------------------------------------- ; IMEの種類を選ぶかもしれない関数 ;========================================================================== ; IME 文字入力の状態を返す ; (パクリ元 : http://sites.google.com/site/agkh6mze/scripts#TOC-IME- ) ; 標準対応IME : ATOK系 / MS-IME2002 2007 / WXG / SKKIME ; その他のIMEは 入力窓/変換窓を追加指定することで対応可能 ; ; WinTitle="A" 対象Window ; ConvCls="" 入力窓のクラス名 (正規表現表記) ; CandCls="" 候補窓のクラス名 (正規表現表記) ; 戻り値 1 : 文字入力中 or 変換中 ; 2 : 変換候補窓が出ている ; 0 : その他の状態 ; ; ※ MS-Office系で 入力窓のクラス名 を正しく取得するにはIMEのシームレス表示を ; OFFにする必要がある ; オプション-編集と日本語入力-編集中の文字列を文書に挿入モードで入力する ; のチェックを外す ;========================================================================== IME_GetConverting(WinTitle:="A",ConvCls:="",CandCls:="") { ;IME毎の 入力窓/候補窓Class一覧 ("|" 区切りで適当に足してけばOK) ConvCls .= (ConvCls ? "|" : "") ;--- 入力窓 --- . "ATOK\d+CompStr" ; ATOK系 . "|imejpstcnv\d+" ; MS-IME系 . "|WXGIMEConv" ; WXG . "|SKKIME\d+\.*\d+UCompStr" ; SKKIME Unicode . "|MSCTFIME Composition" ; SKKIME for Windows Vista, Google日本語入力 CandCls .= (CandCls ? "|" : "") ;--- 候補窓 --- . "ATOK\d+Cand" ; ATOK系 . "|imejpstCandList\d+|imejpstcand\d+" ; MS-IME 2002(8.1)XP付属 . "|mscandui\d+\.candidate" ; MS Office IME-200 . "|WXGIMECand" ; WXG . "|SKKIME\d+\.*\d+UCand" ; SKKIME Unicode CandGCls := "GoogleJapaneseInputCandidateWindow" ;Google日本語入力 hwnd := WinExist(WinTitle) if (WinActive(WinTitle)) { ptrSize := !A_PtrSize ? 4 : A_PtrSize cbSize := 4+4+(PtrSize*6)+16 stGTI := Buffer(cbSize,0) NumPut("Uint", cbSize, stGTI.Ptr,0) ; DWORD cbSize; hwnd := DllCall("GetGUIThreadInfo", "Uint",0, "Ptr",stGTI.Ptr) ? NumGet(stGTI.Ptr,8+PtrSize,"UInt") : hwnd } ret := 0 pid := 0 if (hwnd) { pid := WinGetPID("ahk_id " . hwnd) ;WinGet, pid, PID,% "ahk_id " hwnd } tmm := A_TitleMatchMode SetTitleMatchMode "RegEx" ret := WinExist("ahk_class " . CandCls . " ahk_pid " pid) ? 2 : WinExist("ahk_class " . CandGCls ) ? 2 : WinExist("ahk_class " . ConvCls . " ahk_pid " pid) ? 1 : 0 ;; 推測変換(atok)や予想入力(msime)中は候補窓が出ていないものとして取り扱う if (2 == ret) { if (WinExist("ahk_class " . CandCls . " ahk_pid " pid)) { ;; atok だと仮定して再度ウィンドウを検出する WinGetPos(&X, &Y, &Width, &Height, "ahk_class " . CandCls . " ahk_pid " pid) } else if (WinExist("ahk_class " . CandGCls )) { ;; Google IME だと仮定して再度ウィンドウを検出する WinGetPos(&X, &Y, &Width, &Height,"ahk_class " . CandGCls) } X1 := X Y1 := Y X2 := X + Width Y2 := Y + Height CoordMode "Pixel", "Screen" ;; ATOK については 推測変換中か否かを確実に検出できる ;; MS-IME は変換候補窓の表示中のみを検出できる ;; Google IME も変換候補窓の表示中のみを検出できる ;; そこで変換候補窓が表示されていないと仮定して処理を進めてみる ret := 1 not_auto_cand_list := [0xFFE1C4 ; ATOK , 0xF6E8CB ; MS-IME , 0xFFEAD1] ; Google IME for index, ColorID in not_auto_cand_list { elevel := PixelSearch(&OutputVarX, &OutputVarY, X1, Y1, X2, Y2, ColorID) ;; the color was not found if (0 == elevel) { ret := 2 break } } CoordMode "Pixel", "Window" } SetTitleMatchMode tmm return ret } ;----------------------------------------------------------- ; 使用中のキーボード配列の取得 ;----------------------------------------------------------- Get_Keyboard_Layout(WinTitle:="A") { hwnd := WinExist(WinTitle) if (WinActive(WinTitle)) { ptrSize := !A_PtrSize ? 4 : A_PtrSize cbSize := 4+4+(PtrSize*6)+16 stGTI := Buffer(cbSize,0) NumPut("Uint", cbSize, stGTI.Ptr) ; DWORD cbSize; hwnd := DllCall("GetGUIThreadInfo", "UInt",0, "Ptr",stGTI) ? NumGet(stGTI,8+PtrSize,"UInt") : hwnd } ThreadID := DllCall("GetWindowThreadProcessId", "UInt", hwnd, "UInt", 0 ) InputLocaleID := DllCall("GetKeyboardLayout", "UInt", ThreadID) return InputLocaleID } Get_languege_id(hKL) { return Format("0x{:X}", mod(hKL, 0x10000)) } Get_primary_language_identifier(local_identifier){ return Format("0x{:X}", mod(local_identifier, 0x100)) } Get_sublanguage_identifier(local_identifier){ return Format("0x{:X}", Floor(local_identifier / 0x100)) } Get_languege_name() { locale_id := Get_languege_id(Get_Keyboard_Layout()) ;; ロケール ID (LCID) の一覧 ;; http://msdn.microsoft.com/ja-jp/library/ie/cc392381.aspx ;; Language Identifier Constants and Strings ;; http://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx ;; [AHK 1.1.02.00 U32] Error: Expression too long ;; http://www.autohotkey.com/forum/topic75335.html return (locale_id = "0x436") ? "af" ;; : (locale_id = "0x041C") ? "sq" ;; : (locale_id = "0x3801") ? "ar-ae" ;; : (locale_id = "0x3C01") ? "ar-bh" ;; : (locale_id = "0x1401") ? "ar-dz" ;; : (locale_id = "0x0C01") ? "ar-eg" ;; : (locale_id = "0x0801") ? "ar-iq" ;; : (locale_id = "0x2C01") ? "ar-jo" ;; : (locale_id = "0x3401") ? "ar-kw" ;; : (locale_id = "0x3001") ? "ar-lb" ;; : (locale_id = "0x1001") ? "ar-ly" ;; : (locale_id = "0x1801") ? "ar-ma" ;; : (locale_id = "0x2001") ? "ar-om" ;; : (locale_id = "0x4001") ? "ar-qa" ;; : (locale_id = "0x0401") ? "ar-sa" ;; : (locale_id = "0x2801") ? "ar-sy" ;; : (locale_id = "0x1C01") ? "ar-tn" ;; : (locale_id = "0x2401") ? "ar-ye" ;; : (locale_id = "0x042D") ? "eu" ;; : (locale_id = "0x0423") ? "be" ;; : (locale_id = "0x0402") ? "bg" ;; : (locale_id = "0x0403") ? "ca" : (locale_id = "0x804") ? "zh-cn" : (locale_id = "0xC04") ? "zh-hk" : (locale_id = "0x1004") ? "zh-sg" : (locale_id = "0x404") ? "zh-tw" ;; : (locale_id = "0x041A") ? "hr" ;; : (locale_id = "0x0405") ? "cs" ;; : (locale_id = "0x0406") ? "da" ;; : (locale_id = "0x0413") ? "nl" ;; : (locale_id = "0x0813") ? "nl-be" ;; : (locale_id = "0x0C09") ? "en-au" ;; : (locale_id = "0x2809") ? "en-bz" ;; : (locale_id = "0x1009") ? "en-ca" ;; : (locale_id = "0x1809") ? "en-ie" ;; : (locale_id = "0x2009") ? "en-jm" ;; : (locale_id = "0x1409") ? "en-nz" ;; : (locale_id = "0x1C09") ? "en-za" ;; : (locale_id = "0x2C09") ? "en-tt" ;; : (locale_id = "0x0809") ? "en-gb" ;; : (locale_id = "0x0409") ? "en-us" ;; : (locale_id = "0x0425") ? "et" ;; : (locale_id = "0x0429") ? "fa" ;; : (locale_id = "0x040B") ? "fi" ;; : (locale_id = "0x0438") ? "fo" ;; : (locale_id = "0x040C") ? "fr" ;; : (locale_id = "0x080C") ? "fr-be" ;; : (locale_id = "0x0C0C") ? "fr-ca" ;; : (locale_id = "0x140C") ? "fr-lu" ;; : (locale_id = "0x100C") ? "fr-ch" ;; : (locale_id = "0x043C") ? "gd" ;; : (locale_id = "0x0407") ? "de" ;; : (locale_id = "0x0C07") ? "de-at" ;; : (locale_id = "0x1407") ? "de-li" ;; : (locale_id = "0x1007") ? "de-lu" ;; : (locale_id = "0x0807") ? "de-ch" ;; : (locale_id = "0x0408") ? "el" ;; : (locale_id = "0x040D") ? "he" ;; : (locale_id = "0x0439") ? "hi" ;; : (locale_id = "0x040E") ? "hu" ;; : (locale_id = "0x040F") ? "is" ;; : (locale_id = "0x0421") ? "in" ;; : (locale_id = "0x0410") ? "it" ;; : (locale_id = "0x0810") ? "it-ch" : (locale_id = "0x411") ? "ja" ;; : (locale_id = "0x0412") ? "ko" ;; : (locale_id = "0x0426") ? "lv" ;; : (locale_id = "0x0427") ? "lt" ;; : (locale_id = "0x042F") ? "mk" ;; : (locale_id = "0x043E") ? "ms" ;; : (locale_id = "0x043A") ? "mt" ;; : (locale_id = "0x0414") ? "no" ;; : (locale_id = "0x0415") ? "pl" ;; : (locale_id = "0x0816") ? "pt" ;; : (locale_id = "0x0416") ? "pt-br" ;; : (locale_id = "0x0417") ? "rm" ;; : (locale_id = "0x0418") ? "ro" ;; : (locale_id = "0x0818") ? "ro-mo" ;; : (locale_id = "0x0419") ? "ru" ;; : (locale_id = "0x0819") ? "ru-mo" ;; : (locale_id = "0x0C1A") ? "sr" ;; : (locale_id = "0x0432") ? "tn" ;; : (locale_id = "0x0424") ? "sl" ;; : (locale_id = "0x041B") ? "sk" ;; : (locale_id = "0x042E") ? "sb" ;; : (locale_id = "0x040A") ? "es" ;; : (locale_id = "0x2C0A") ? "es-ar" ;; : (locale_id = "0x400A") ? "es-bo" ;; : (locale_id = "0x340A") ? "es-cl" ;; : (locale_id = "0x240A") ? "es-co" ;; : (locale_id = "0x140A") ? "es-cr" ;; : (locale_id = "0x1C0A") ? "es-do" ;; : (locale_id = "0x300A") ? "es-ec" ;; : (locale_id = "0x100A") ? "es-gt" ;; : (locale_id = "0x480A") ? "es-hn" ;; : (locale_id = "0x080A") ? "es-mx" ;; : (locale_id = "0x4C0A") ? "es-ni" ;; : (locale_id = "0x180A") ? "es-pa" ;; : (locale_id = "0x280A") ? "es-pe" ;; : (locale_id = "0x500A") ? "es-pr" ;; : (locale_id = "0x3C0A") ? "es-py" ;; : (locale_id = "0x440A") ? "es-sv" ;; : (locale_id = "0x380A") ? "es-uy" ;; : (locale_id = "0x200A") ? "es-ve" ;; : (locale_id = "0x0430") ? "sx" ;; : (locale_id = "0x041D") ? "sv" ;; : (locale_id = "0x081D") ? "sv-fi" ;; : (locale_id = "0x041E") ? "th" ;; : (locale_id = "0x041F") ? "tr" ;; : (locale_id = "0x0431") ? "ts" ;; : (locale_id = "0x0422") ? "uk" ;; : (locale_id = "0x0420") ? "ur" ;; : (locale_id = "0x042A") ? "vi" ;; : (locale_id = "0x0434") ? "xh" ;; : (locale_id = "0x043D") ? "ji" ;; : (locale_id = "0x0435") ? "zu" : (locale_id = "-0xF3FC") ? "zh-yue" ; http://cpime.hk/ 広東語ピンインIME : "unknown" } Get_ime_file(){ ;; ImmGetIMEFileName 関数 ;; http://msdn.microsoft.com/ja-jp/library/cc448001.aspx SubKey := Get_reg_Keyboard_Layouts() ime_file_name := RegRead("HKEY_LOCAL_MACHINE" . SubKey, "Ime File") return ime_file_name } Get_Layout_Text(){ SubKey := Get_reg_Keyboard_Layouts() layout_text := RegRead("HKEY_LOCAL_MACHINE" . SubKey, "Layout Text") return layout_text } Get_reg_Keyboard_Layouts(){ hKL := RegExReplace(Get_Keyboard_Layout(), "0x", "") return "System\CurrentControlSet\control\keyboard layouts\" . hKL ;" } ; IME 状態のセット sc029::IME_SET(0) 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 AQDEKx8jkefaARUGAQAgAAAAAAA=

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully