- Win32API質問箱 Build11 [転載禁止]©2ch.net
442 :デフォルトの名無しさん[sage]:2015/02/18(水) 01:51:49.28 ID:aOiIdSCQ - ありがとうございます。マイナー言語で書いてるのでC++に移植してきます。VSを起動するの超久々ですが
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
444 :デフォルトの名無しさん[sage]:2015/02/18(水) 02:07:38.06 ID:aOiIdSCQ - >>443
HSP3.32です。sdimは文字列バッファの確保、varptrはそのバッファのアドレス、statは直近の戻り値です #uselib "user32.dll" #cfunc GetKeyboardLayout "GetKeyboardLayout" int #uselib "imm32.dll" #func ImmGetRegisterWordStyle "ImmGetRegisterWordStyleA" int, int, int #define STYLE_DESCRIPTION_SIZE $00000020 hkl = GetKeyboardLayout() mes "GetKeyboardLayoutの結果: " + hkl ; http://gaiji.jjworkshop.com/cgi-bin/topic/topic.cgi?4を参考 sdim dummybuf, 256 * (4 + STYLE_DESCRIPTION_SIZE) ImmGetRegisterWordStyle hkl, 0, varptr(dummybuf) style_max = stat mes "取得した品詞の数: " + style_max
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
445 :デフォルトの名無しさん[sage]:2015/02/18(水) 02:35:51.13 ID:aOiIdSCQ - VS2012でエラーが起きまくったもののVC++2010で何とか作成できたので貼ります
#pragma comment(lib, "imm32.lib") #include <windows.h> #include <imm.h> #include <iostream> using namespace std; int main(int argc, char** argv) { STYLEBUFA stylebuf; HKL hkl = ::GetKeyboardLayout(0); int style_max = ::ImmGetRegisterWordStyleA(hkl, 0, &stylebuf); cout << "hkl:" << hkl << endl; cout << "style_max:" << style_max << endl; getchar(); return 1; }
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
451 :デフォルトの名無しさん[sage]:2015/02/18(水) 17:49:01.30 ID:aOiIdSCQ - >>446-450
わざわざ検証していただいてありがとうございます ひとまず再現性があり自分の責任ではないようで安心しました >>446さんのご指摘を受けてフォームアプリケーション用に書き変えてやってみましたが特に結果は変わりませんでした 一応試したコードも貼っておきます http://codepad.org/t67U4cDb
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
453 :デフォルトの名無しさん[sage]:2015/02/18(水) 18:47:37.18 ID:aOiIdSCQ - >>452
事細かに試していただいて感謝します ATOKとMS-IMEが成功可否に影響するというような情報も見つけた気がしますが、 今回の例ではたぶん根本的に原因が共通しているのでこちらでやっても同じ結果になると思います こちらの環境を再掲しておくと、MicrosoftIME 10.1 on Windows7 HomePremium 32bitです 元々、辞書ツールから単語登録するのが面倒だから、 専用のTSVファイルをパッと開いて書き換えたらパッと単語登録されるようなツールが作りたかったんですが、 同じように列挙も登録もできず、周辺のAPIが全滅という有様でした 仮に単語登録が成功したとしても、ImmRegisterWordにはメモリリークもあるらしいですよ
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
456 :デフォルトの名無しさん[sage]:2015/02/18(水) 20:50:09.74 ID:aOiIdSCQ - >>455
それは知りませんでした。有益な情報をありがとうございます なるほど、Vista以降ぐらいでラッパー関数になっているんですね 一見、TFSには単語登録や取得のメソッドが無いように見えます imm32のAPIで単語を弄れない理由もここにあるのかも 反面、MS-IMEの辞書ツールで単語登録できているのは、専用のCOMを利用しているからだと推察しました 予想が当たれば少なくともMS-IMEについては解決できそうです。他のエンジンも多分専用のAPIがあるはず 参考にしたサイト http://www.kanazawa-net.ne.jp/~pmansato/net/net_tech_ime.htm https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/4c8aebfa-caa7-47a8-988a-f3c252ec37c0/vistaime?forum=vcgeneralja
|