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

解決


 2004-10-28 14:10:35  No: 86291  IP: [192.*.*.*]

よろしくお願いします。

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 14:47:25  No: 86292  IP: [192.*.*.*]

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

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

編集 削除
ねろ  2004-10-28 18:24:41  No: 86293  IP: [192.*.*.*]

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

編集 削除
 2004-10-28 18:45:16  No: 86294  IP: [192.*.*.*]

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

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

編集 削除
J  2004-11-01 15:11:38  No: 86295  IP: [192.*.*.*]

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

編集 削除
ねろ  2004-11-01 15:39:05  No: 86296  IP: [192.*.*.*]

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

編集 削除
 2004-11-01 16:31:16  No: 86297  IP: [192.*.*.*]

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

編集 削除