SendMessageeで、WM_USER内でのデータ送信

解決


  2004-10-28 23:10:35  No: 86291

よろしくお願いします。

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を用いてデータを送り、
データの中に処理を示すコードを持たせるしかないかと思っています。


ABC  2004-10-28 23:47:25  No: 86292

参考になるかもしれませんので貼り付けておきます。

ttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t35.htm


ねろ  2004-10-29 03:24:41  No: 86293

SendMessageのMSDNの説明を読むと、
wParamは「メッセージの追加情報を指定します。意味は Msg パラメータの値により異なります。」
となっていますよね。
つまり第2パラメーターが「WM_COPYDATA」の時だけ「COPYDATASTRUCT」のポインタが
送られて来るのでは。
第2パラメーターがユーザー定義のときは、セットされた数値が送られてくるのでは。
(実際何が送られて来るかは書いてないし、知りませんがやってみればすぐわかるよね。)
もしユーザー定義型の時も「COPYDATASTRUCT」のポインタが送られてくるなら、
「WM_COPYDATA」なんてのはいらなくなるのでは。


  2004-10-29 03:45:16  No: 86294

なるほど、ありがとうございます。
COPYDATASTRUCTでなくとも30文字くらいのSTRINGが
送ることができればよかったのですが、
数値では無理みたいですね。

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


J  2004-11-02 00:11:38  No: 86295

難しそうですね。
ありがとうございました。


ねろ  2004-11-02 00:39:05  No: 86296

>難しそうですね。
どの部分がうまくいきませんか?


  2004-11-02 01:31:16  No: 86297

ありがとうございます。今回はやり方がわからなかったので、
WM_COPYDATAをもちい、渡すデータの中に識別子を
含ませる形で対応しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加