• 締切済み

SendMessageによるチェックボックスの状態取得

はじめまして、VB.NET2005でチェックボックスの状態の取得、設定をうまく設定できません。OSはxpです。 Public Class Form1 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"  (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Integer Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, _ ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, _ ByVal wMsg As Integer, ByVal wParam As Integer, ByVal iParam As String) As Integer Private Declare Function SendMessageint Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, _ ByVal wMsg As Integer, ByVal wParam As Integer, ByVal iParam As Integer) As Integer Const BM_GETCHECK = &HF0 Const BM_GETSTATE = &HF2 Const BM_SETCHECK = &HF1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim hWindows As Integer Dim ipEDIT As Integer Dim i As Integer hWindows = FindWindow(vbNullString, "Form1") '198458 ipEDIT = FindWindowEx(hWindows, 0, vbNullString, "CheckBox1") MessageBox.Show(ipEDIT) i = SendMessageint(ipEDIT, BM_GETCHECK, 0, 0) 'SendMessageint(ipEDIT, BM_SETCHECK, 1, 0) MessageBox.Show(i) End Sub End Class のようなコードなのですが、 ハンドルは取得できているのですが、 SendMessageの戻り値は0になります。 勿論、コメントのチェックをセットも出来ません。 ご教授のほど宜しくお願いします。

みんなの回答

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

セットの場合は SendMessageint(ipEDIT, BM_SETCHECK, HEX(1), 0) とする必要はありましたが、後は普通に動きます。 (vb6上ですが) Const BM_GETCHECK = &HF0 Const BM_GETSTATE = &HF2 Const BM_SETCHECK = &HF1 これらの定数がちゃんと設定できているのかご確認ください。

345-
質問者

お礼

VB6で試した所、 型をIntegerからLongに変更する事で、 チェックの取得もセットも出来ました。 有り難うございます。 どうしてVB.NET2005では出来ないのでしょうか? 未だに解決していません。 もし解ればご教授宜しくお願いします。

345-
質問者

補足

回答していただき有り難うございます。 >SendMessageint(ipEDIT, BM_SETCHECK, HEX(1), 0) でセットしてみましたがダメでした。 定数の方も特に問題ありませんでした。 定数は他にも WM_SETTEXT などを宣言してテキストBOXの入力等は 出来ているので大丈夫みたいです。 明日会社にあるVB6で試してみたいと思います。