Windows 2000以降
Windows 2000以降
#include "user32.as"#module#uselib "msvcrt"#cfunc strstr "strstr" int, sptr#uselib "kernel32"#func MultiByteToWideChar "MultiByteToWideChar" int, int, sptr, int, sptr, int#func WideCharToMultiByte "WideCharToMultiByte" int, int, sptr, int, sptr, int, int, int#deffunc UTF8ToUnicode var in, var outMultiByteToWideChar 65001/*CP_UTF8*/, 0, varptr(in), -1, 0, 0len = statsdim out, len * 2 + 2MultiByteToWideChar 65001/*CP_UTF8*/, 0, varptr(in), -1, varptr(out), lenreturn len#deffunc UnicodeToUTF8 var in, var out// Unicode → UTF-8WideCharToMultiByte 65001/*CP_UTF8*/, 0, varptr(in), -1, 0, 0, 0, 0len = statsdim out, len + 1WideCharToMultiByte 65001/*CP_UTF8*/, 0, varptr(in), -1, varptr(out), len, 0, 0return len#deffunc ShiftJISToUTF8 str _in_sjis, var out_utf8in_sjis = _in_sjis// SHIFT_JIS → Unicodelen = strlen(_in_sjis) * 2sdim uni, len + 2cnvstow uni, _in_sjis// Unicode → UTF-8WideCharToMultiByte 65001/*CP_UTF8*/, 0, varptr(uni), -1, 0, 0, 0, 0len = statsdim out_utf8, len + 1WideCharToMultiByte 65001/*CP_UTF8*/, 0, varptr(uni), -1, varptr(out_utf8), len, 0, 0return len#deffunc BOMDelete var in_utf8// EF BB BF(BOM) 手抜き~if (0xBFBBEF == (lpeek(in_utf8, 0) & 0xFFFFFF)){len = strlen(in_utf8)sdim copybuf, len*2 + 1copybuf = in_utf8sdim in_utf8, len*2 + 1memcpy in_utf8, copybuf, len, 0, 3return 1}return 0// instr(UTF8対応版)#defcfunc instr_utf8 var in_buf, int p, str _keykey = _keyinbuf_ptr = varptr(in_buf) + ps_pos = strstr(inbuf_ptr, key)if s_pos == 0 : return -1return (s_pos - inbuf_ptr)#globaltt = "日蒙簡易辞書 Ver 1.00(Unicode対応版)"*mainexist "jmdic.txt"if strsize == -1 : dialog "jmdic.txt が見つかりません" : end// ファイルロードnotesel bufnoteload "jmdic.txt"// BOMを検出した場合は削除BOMDelete bufgosub *DrawGUIstop*DrawGUItitle ttsdim dummyfont "メイリオ", 18, 16objmode 2, 1pos 0, 0input dummy, 500, 34 : objid_input = stat : hobj_input = objinfo(objid_input, 2)pos 500, 0 : objsize 140, 34button gosub "検索", *btn_searchpos 0, 34mesbox dummy, 640, 480 - 34, 0, 0 : objid_msg = stat : hobj_msg = objinfo(objid_msg, 2)onkey gosub *keyreturn*keyobjsel -1if wparam == 13 && stat == objid_input : gosub *btn_searchreturn*btn_searchsdim uni_keyword, 1024*2 + 2GetWindowTextW hobj_input, varptr(uni_keyword), 1024UnicodeToUTF8 uni_keyword, keywordsdim out, 1024*100 : num = 0SetWindowTextW hobj_msg, varptr(out)notesel bufrepeat notemaxnoteget tmp, cntif keyword == "" || instr_utf8(tmp, 0, keyword) != -1{out += tmp + "\n"num++}loopif num == 0{ShiftJISToUTF8 "検索ヒント:\n別の言い回しで検索すると出る場合があります。\n漢字をひらがなにしたり単漢字で検索しても出る可能性があります。", out}UTF8ToUnicode out, out2SetWindowTextW hobj_msg, varptr(out2)title tt+" "+num+"件見つけました!"return