HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0209
0125プロセス間通信について。8解決


0125

リンク

2014/2/9(Sun) 01:50:00|NO.59775

プロセス間通信について調べています。
一定時間(10秒等)プロセス間で通信がなければエラーを起こしたいと思っております。
どのようなソースを組んだらよろしいんでしょうか。サンプルを作って頂けるとありがたいです。
よろしくお願いします。


/*送信側のプロセス*/ #uselib "user32.dll" #func RegisterWindowMessage "RegisterWindowMessageA" str #define WM_USER 0x0400 #define MYWM_RECEIVE (WM_USER+0x0101) title "送信側" *Send repeat : wait 100 RegisterWindowMessage "Message" msgcode = stat sendmsg 0xFFFF, msgcode, 0, hwnd loop /*受信側のプロセス*/ #uselib "user32.dll" #func RegisterWindowMessage "RegisterWindowMessageA" str #define WM_USER 0x0400 #define MYWM_RECEIVE (WM_USER+0x0101) title "受信" RegisterWindowMessage "Message" msgcode = stat oncmd gosub *OnReceiveBroadcast, msgcode stop *OnReceiveBroadcast mes "通信OK" return



この記事に返信する


0125

リンク

2014/2/9(Sun) 02:06:00|NO.59776

自己解決しましたが、もっと短くて簡潔なソースがほしいいいです。。



/*送信*/ #uselib "user32.dll" #func RegisterWindowMessage "RegisterWindowMessageA" str #define WM_USER 0x0400 #define MYWM_RECEIVE (WM_USER+0x0101) title "送信側" *Send repeat : wait 100 RegisterWindowMessage "Message" msgcode = stat sendmsg 0xFFFF, msgcode, 0, hwnd loop /*受信側*/ #uselib "user32.dll" #func RegisterWindowMessage "RegisterWindowMessageA" str #define WM_USER 0x0400 #define MYWM_RECEIVE (WM_USER+0x0101) #uselib "winmm.dll" #cfunc timeGetTime "timeGetTime" title "受信" RegisterWindowMessage "Message" msgcode = stat oncmd gosub *OnReceiveBroadcast, msgcode gosub*tuusinzikan stop *OnReceiveBroadcast tuusinflug+1 mes tuusinflug return *tuusinzikan 開始時間 = timeGetTime() repeat oncmd gosub *OnReceiveBroadcast, msgcode 現在時間 = timeGetTime() 経過時間 = (現在時間-開始時間)/1000 if 経過時間>10:break title ""+ 経過時間 +"秒" wait 12 loop if tuusinflug=0 : end tuusinflug=0 goto*tuusinzikan oncmd gosub *OnReceiveBroadcast, msgcode return



check

リンク

2014/2/9(Sun) 02:07:17|NO.59777

ウィンドウメッセージを使ってプロセス間でやりとりする場合、
送信側が受信側のウィンドウハンドルを知っている必要があるぞ。
このソースだと自分自身にウィンドウメッセージを送っている。



0125

リンク

2014/2/9(Sun) 03:10:51|NO.59778

あれ。。
できてませんか?

受信側のプロセスと
送信側のプロセスを用意してやったらちゃんとできてる気がしたんですけどね。。



MillkeyStars

リンク

2014/2/9(Sun) 11:08:31|NO.59784

プロセス間通信の説明なら、普通に検索すれば出てくるはずだけど
URL - http://chokuto.ifdef.jp/advanced/copydata.html



denko

リンク

2014/2/9(Sun) 20:03:23|NO.59795

>このソースだと自分自身にウィンドウメッセージを送っている。
HWND_BROADCAST(0xffff)は全トップレベルウインドウに送信するハンドルなのでちゃんと相手に届きます。

>もっと短くて簡潔なソースがほしいいいです。。
こんなのでどうでしょう


/*受信側*/ #uselib "user32.dll" #func RegisterWindowMessage "RegisterWindowMessageA" str #func SetTimer "SetTimer" sptr,sptr,sptr,sptr #define WM_USER 0x0400 #define MYWM_RECEIVE (WM_USER+0x0101) #define WM_TIMER 0x0113 title "受信" RegisterWindowMessage "Message" msgcode = stat SetTimer hwnd,100,1000,0 oncmd gosub *OnReceiveBroadcast, msgcode oncmd gosub *OnTimer,WM_TIMER stop *OnReceiveBroadcast tuusinflug++ mes tuusinflug SetTimer hwnd,100,1000,0 timer=0 title ""+timer return *OnTimer timer+=1 title ""+timer if timer==10:end return



check

リンク

2014/2/9(Sun) 21:03:55|NO.59796

>HWND_BROADCAST(0xffff)は全トップレベルウインドウに送信するハンドルなのでちゃんと相手に届きます。
そこまで確認していなかった……
ただアプリケーションによっては特定のウィンドウメッセージで反応するものがあるから、
あまりいい方法とは言えないかな。

送りたいウィンドウのハンドルのみにメッセージを送信するのがいいかと。



0125

リンク

2014/2/9(Sun) 22:00:24|NO.59798

おおっ、簡潔なソースありがとうー!
解決しました!



denko

リンク

2014/2/9(Sun) 23:06:59|NO.59799

>ただアプリケーションによっては特定のウィンドウメッセージで反応するものがあるから、
そうならないためにRegisterWindowMessagenoが使用されてます。



ONION software Copyright 1997-2021(c) All rights reserved.