tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルMessageBox を表示するとハンドルが取得できない
記事No4612
投稿日: 2006/12/02(Sat) 12:16
投稿者花ちゃん
下記コードでMessageBox を表示すると Dim himc As IntPtr = ImmGetContext(Me.Handle)
でハンドルが取得できなくなります。
VB.NET2003 では取得できますが、VB2005(EE) では、0 が返って来て失敗します。
MessageBox を表示しなければ、うまく取得できます。
Framework 2.0.50727 WinXP(SP2)
私の環境(コード)が悪いのか、何かご存知の方よろしくお願いします。

Public Class Form1
<System.Runtime.InteropServices.DllImport("Imm32.dll", _
   CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function ImmGetContext( _
   ByVal hWnd As IntPtr) As IntPtr
End Function
<System.Runtime.InteropServices.DllImport("Imm32.dll", _
   CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function ImmReleaseContext( _
   ByVal hWnd As IntPtr, ByVal himc As IntPtr) As Integer
End Function

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   MessageBox.Show(Me, "メッセージボックスを表示します")
   Dim himc As IntPtr = ImmGetContext(Me.Handle)
   Debug.WriteLine(himc)
   ImmReleaseContext(Me.Handle, himc)
End Sub
End Class

# CreateObject("WScript.Shell").Popup _
            ("郵便番号の入力が正しくありません", 1, "自動的に閉じる")
  を使用した場合は、うまく取得できます。

[ツリー表示へ]
タイトルRe: MessageBox を表示するとハンドルが取得できない
記事No4613
投稿日: 2006/12/02(Sat) 15:01
投稿者Hongliang
.NET 2.0 になって、ContainerControl 以下のクラスのウィンドウでは IME が使用不可能になりました。おそらくその影響でしょう。
IME を実際に起動可能なコントロール(TextBox など)のハンドルを渡してやれば問題ないはずです。

[ツリー表示へ]
タイトルRe^2: MessageBox を表示するとハンドルが取得できない
記事No4614
投稿日: 2006/12/02(Sat) 15:20
投稿者花ちゃん
> .NET 2.0 になって、ContainerControl 以下のクラスのウィンドウでは IME が
>使用不可能になりました。

ありがとうございます、それは知りませんでした。
> IME を実際に起動可能なコントロール(TextBox など)のハンドルを渡してやれば
>問題ないはずです。

変更したらうまく行きました。MessageBox.Show を表示しなければうまく取得できたので
そちらばかりを調べておりました。

ありがとうございました。

[ツリー表示へ]