掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
SendMessageのプロセス間通信でエラー (ID:147879)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
その後の結果報告です オショウ様 >ByRef じゃ〜ないの? 間違えました。ByRefにすることによりエラーはでなくなり希望の動作になりました。 >因みに、コード自体は酷似していますが、そこのコードを >コピーしたわけではない? その通りです。コピーし元にしましたが、他の場所でエラーが出たため色々変更し 間違えたようです。 魔界の仮面弁士様 >SendMessageW や FindWindowW を用いることをお奨めします。 今までSendMessageA や FindWindowAしか使用したことがありませんでしたが、 SendMessageW,FindWindowWを使用して希望の動作になることを確認しました。 >汎用的にするなら、lpData As IntPtr として宣言しておき、 >そこに文字列を渡す場合には、Marshal.StringToHGlobal〜 と >Marshal.FreeHGlobal を使うようにします。 Marshalの使い方がよくわからないため、もう少し勉強しようと思います。 最終的に以下のようにして正常動作しています。 お二方、本当にありがとうございました。 Public Class Form1 Private Const WM_COPYDATA As Integer = &H4A Private WH_WatchDog As IntPtr Public Structure COPYDATASTRUCT Public dwData As IntPtr Public cbData As Integer Public lpData As String End Structure Private Declare Unicode Function FindWindow Lib "user32" Alias "FindWindowW" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As IntPtr Private Declare Unicode Function SendMessage Lib "user32" Alias "SendMessageW" _ (ByVal hwnd As IntPtr, _ ByVal msg As Integer, _ ByVal wParam As Integer, _ ByRef lParam As COPYDATASTRUCT) As Integer Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim txt As String = "Dog" Dim ret As Integer WH_WatchDog = FindWindow(vbNullString, "WatchDog") '受信側のハンドル取得 If WH_WatchDog <> 0 Then Dim bytearry() As Byte = _ System.Text.Encoding.Default.GetBytes(txt) Dim len As Integer = bytearry.Length Dim cds As COPYDATASTRUCT cds.dwData = 0 cds.cbData = len + 1 cds.lpData = txt ret = SendMessage(WH_WatchDog, WM_COPYDATA, 0, cds) End If End Sub End Class
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.