C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

単語登録の一覧取得(ATOK)


(過去ログ 107 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■63993 / inTopicNo.1)  単語登録の一覧取得(ATOK)
  
□投稿者/ クロエ (2回)-(2012/11/01(Thu) 14:34:19)

分類:[Windows 全般] 

こんにちわ。

WinAPIのImmEnumRegisterWordを使用して、IMEに単語登録された情報を取得しようとしています。
MS-IMEだと今のところ問題なく取得できているのですが、ATOK2012の環境で取得できず、悪戦苦闘しています。
(ImmEnumRegisterWord、GetLastErrorの戻り値は共に0でした)

品詞の一覧取得や、ImmRegisterWordを使った単語登録は、ATOKでも大丈夫だったのですが。

うーむ、ATOKは諦めるしかないのか・・・

--------------------------------------------------------------------------------
#include	<iostream>
#include	<string>
#include	<windows.h>
#include	<imm.h>

#pragma comment(lib,"imm32.lib")

using namespace std;

STYLEBUF	*style;
int		count = 0;

UINT CALLBACK RegProc (
	LPCTSTR lpszReading,
	DWORD dwStyle,
	LPCTSTR lpszString,
	LPVOID lpData )
{
	cout << lpszReading << "\t" << lpszString << "\t";
	
	for ( int i=0 ; i<count ; ++i ) {
		if ( style[i].dwStyle == dwStyle ) {
			cout << style[i].szDescription << endl;
			return 1;
		}
	}
	cout << endl;
	
	return 0;
}

int	main()
{
	HKL hkl = GetKeyboardLayout(0);
	char description[256];
	
	// IME名称
	ImmGetDescription(hkl,description,255);
	cout << "!" << description << endl;
	
	// 品詞情報
	count = ImmGetRegisterWordStyle(hkl,NULL,NULL);
	style = new STYLEBUF[count+1];
	count = ImmGetRegisterWordStyle(hkl,count,style);
	cout << "!count " << count << endl;
	
	// 単語登録を列挙
	int r = ImmEnumRegisterWord(hkl,(REGISTERWORDENUMPROC)RegProc,NULL,0,NULL,NULL);
	if ( r == 0 ) {
		cout << "!ImmEnumRegisterWord " << GetLastError() << endl;
	}
	
	delete [] style;
	
	return 0;
}
--------------------------------------------------------------------------------

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -