トップページ > プログラム > 2015年02月18日 > aOiIdSCQ

書き込み順位&時間帯一覧

8 位/244 ID中時間01234567891011121314151617181920212223Total
書き込み数0120000000000000011010006



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Win32API質問箱 Build11 [転載禁止]©2ch.net

書き込みレス一覧

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


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。