掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ひらがな -> 漢字 に変換するには? (ID:145893)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ありがとうございました。こんなに沢山関連サイトがあったんですね、検索させてしまって申し訳ありません・・・ 上記のサイト、大変参考になりました。ありがとうございます。 お詫びに、自分なりの回答を記しますね。 動作確認: VB.NET 2008 Express Edition --------- Option Explicit On Imports System.Runtime.InteropServices Module Hiragana2Kanji Private Enum GCL_ENUM GCL_CONVERSION = &H1 GCL_REVERSECONVERSION = &H2 GCL_REVERSE_LENGTH = &H3 End Enum <DllImport("Imm32.dll")> _ Public Function ImmGetContext(ByVal hWnd As IntPtr) As IntPtr End Function <DllImport("Imm32.dll")> _ Public Function ImmGetConversionList(ByVal hKL As IntPtr, ByVal hIMC As IntPtr, ByVal lpSrc As String, ByVal lpDst As IntPtr, ByVal dwBufLen As Integer, ByVal uFlag As Integer) As Integer End Function <DllImport("Imm32.dll")> _ Public Function ImmReleaseContext(ByVal hWnd As IntPtr, ByVal hIMC As IntPtr) As Integer End Function <StructLayout(LayoutKind.Sequential)> _ Private Class CANDIDATELIST Public dwSize As Integer Public dwStyle As Integer Public dwCount As Integer Public dwSelection As Integer Public dwPageStart As Integer Public dwPageSize As Integer Public dwOffset As Integer End Class Public Function GetStr2KanjiList(ByVal text As String, ByVal hIMC As IntPtr) As String() If text = "" Then Return "" Dim hKL As IntPtr = System.Windows.Forms.InputLanguage.CurrentInputLanguage.Handle Dim list As New CANDIDATELIST Dim dwSize As Integer = ImmGetConversionList(hKL, hIMC, text, IntPtr.Zero, 0, GCL_ENUM.GCL_CONVERSION) Dim BufList As IntPtr = Marshal.AllocHGlobal(dwSize) ImmGetConversionList(hKL, hIMC, text, BufList, dwSize, GCL_ENUM.GCL_CONVERSION) Marshal.PtrToStructure(BufList, list) Dim buf As Byte() = New Byte(dwSize - 1) {} Marshal.Copy(BufList, buf, 0, dwSize) Marshal.FreeHGlobal(BufList) Dim os As Integer = list.dwOffset Dim str As String = System.Text.Encoding.[Default].GetString(buf, os, buf.Length - os - 3) Dim par As Char() = vbNullChar.ToCharArray() Dim strList As String() = str.Split(par) Return strList End Function End Module Public Class Form1 Dim hIMC As IntPtr Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click debug.writeline(GetStr2Kanji(TextBox1.Text, hIMC)) End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load hIMC = ImmGetContext(Me.Handle) ImmReleaseContext(Handle, hIMC) End Sub End Class ---------- ImmReleaseContextとImmGetContextをGetStr2KanjiList内で宣言してしまうと、二度目以降の試行のときにエラーがでてしまいます。 知識不足故、それを回避するためにこういう形にしてみました。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.