- ベストアンサー
VB.NETのSendMessageを教えてください
SendMessageというAPIを試しているのですが、まず試しに Button2.Text = "test" と同じ結果をSendMessageでやってみたいのですが 下のようにしてみたのですが、変更になりませんでした。 どのようにすれば良いかご教授頂ければ幸いです。よろしくお願致します。 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer Private Const WM_SETTEXT As Integer = &HC Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim h As Integer h = Me.Button2.Handle.ToInt32 SendMessage(h, WM_SETTEXT, 0&, "test") End Sub VB.NET2003 FrameWork1.1 WindowsXP-PRO(SP2) です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ボタンの場合はうまく行かないようです LabelやTextBoxやComboBoxなどはこの方法で変更出来るようです ただし API呼び出しの後でコントロールのRefreshメソッドなどを呼び出して描画を更新しないといけないようです CheckBox、RadioButton、Button、ListBoxは変更出来ませんでした SendMessageのAPI宣言は Declare Ansi Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As IntPtr, ByVal wMsg As Integer, _ ByVal wParam As Integer, _ <MarshalAsAttribute(UnmanagedType.AsAny)> ByVal lParam As Object) As Integer といった具合の方がより実情に合うかと思います
その他の回答 (1)
- kikujack
- ベストアンサー率47% (17/36)
このように書いてください。 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer Const WM_SETTEXT = &HC Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click SendMessage(TextBox1.Handle, WM_SETTEXT, 0&, "test") End Sub