よろしくお願いします。
SendMessageを用いて、ウィンドウ間のデータ送信を行っています。
あらかじめ定義されている、WM_COPYDATAを使った場合は、
データの送信ができたのですが、ユーザー定義コードを使った場合は
データの送信ができませんでした。
Private Sub Command1_Click()
Dim lngHwnd As Long
lngHwnd = FindWindow(vbNullString, "テストウィンドウ")
Dim cd As COPYDATASTRUCT
Dim strData As String
strData = "山田太郎"
cd.dwData = 100
cd.cbData = LenB(StrConv(strData, vbFromUnicode)) + 1
cd.lpData = strData
Call SendMessage(lngHwnd, UWM_USERSET, Me.hwnd, cd)
End Sub
上記のUWM_USERSETの部分がWM_COPYDATAならうまくいくのですが・・
通信自体はで着ているのですが、データ(cd)が渡されていない
ような状態です。
仕様ならあきらめて、WM_COPYDATAを用いてデータを送り、
データの中に処理を示すコードを持たせるしかないかと思っています。
参考になるかもしれませんので貼り付けておきます。
ttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t35.htm
SendMessageのMSDNの説明を読むと、
wParamは「メッセージの追加情報を指定します。意味は Msg パラメータの値により異なります。」
となっていますよね。
つまり第2パラメーターが「WM_COPYDATA」の時だけ「COPYDATASTRUCT」のポインタが
送られて来るのでは。
第2パラメーターがユーザー定義のときは、セットされた数値が送られてくるのでは。
(実際何が送られて来るかは書いてないし、知りませんがやってみればすぐわかるよね。)
もしユーザー定義型の時も「COPYDATASTRUCT」のポインタが送られてくるなら、
「WM_COPYDATA」なんてのはいらなくなるのでは。
なるほど、ありがとうございます。
COPYDATASTRUCTでなくとも30文字くらいのSTRINGが
送ることができればよかったのですが、
数値では無理みたいですね。
ありがとうございました。
難しそうですね。
ありがとうございました。
>難しそうですね。
どの部分がうまくいきませんか?
ありがとうございます。今回はやり方がわからなかったので、
WM_COPYDATAをもちい、渡すデータの中に識別子を
含ませる形で対応しました。
ツイート | ![]() |