異なるアプリケーション間の通信 <TOP>
異なるアプリケーション間の通信をテストします。
送信部
SetProp ウィンドウに関するプロパティを設定
RemoveProp 指定のウィンドウプロパティリストから項目を削除
GlobalAddAtom グローバルアトムテーブルに項目を追加
GlobalDeleteAtom グローバルアトムテーブルから指定のアトムの項目を削除
受信部
GetProp ウィンドウに関連するプロパティを取得する
FindWindowEx クラス名 or キャプションを与えてウィンドウのハンドルを取得
GlobalGetAtomName グローバルアトムテーブルから文字列を取得
送信部エディットボックスに入力したテキストは、受信部で周期的にチェックされ受信側エディットボックスに表示されます。
受信部フォームには、タイマーコントロールが貼り付けられています。
'================================================================ '= GlobalAddAtom(テキスト送信) '= (GlobalAddAtom.bas) '================================================================ #include "Windows.bi" ' ウィンドウに関するプロパティを設定 Declare Function Api_SetProp& Lib "user32" Alias "SetPropA" (ByVal hWnd&, ByVal lpString$, ByVal hData&) ' 指定のウィンドウプロパティリストから項目を削除 Declare Function Api_RemoveProp& Lib "user32" Alias "RemovePropA" (ByVal hWnd&, ByVal lpString$) ' グローバルアトムテーブルに項目を追加 Declare Function Api_GlobalAddAtom% Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString$) ' グローバルアトムテーブルから指定のアトムの項目を削除 Declare Function Api_GlobalDeleteAtom% Lib "kernel32" Alias "GlobalDeleteAtom" (ByVal nAtom%) Var Shared intAtom As Integer Var Shared Edit1 As Object Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Edit1_Change edecl () Sub Edit1_Change() Var strText As String Var lngRet As Long Var intRet As Integer If intAtom <> 0 Then intRet = Api_GlobalDeleteAtom(intAtom) intAtom = 0 End If strText = Left$(GetDlgItemText("Edit1"), 255) intAtom = Api_GlobalAddAtom(strText) If intAtom <> 0 Then lngRet = Api_SetProp(GetHwnd, "ExportProp", intAtom) End If End Sub '================================================================ '= '================================================================ Declare Sub Mainform_QueryClose edecl (Cancel%, Mode%) Sub Mainform_QueryClose(Cancel%, Mode%) Var lngRet As Long Var intRet As Integer If Cancel% = 0 Then If intAtom <> 0 Then intRet = Api_GlobalDeleteAtom(intAtom) End If lngRet = Api_RemoveProp(GetHwnd, "ExportProp") End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End
'================================================================ '= GlobalGetAtomName(テキスト受信) '= (GlobalGetAtomName.bas) '================================================================ #include "Windows.bi" ' ウィンドウに関連するプロパティを取得 Declare Function Api_GetProp& Lib "user32" Alias "GetPropA" (ByVal hWnd&, ByVal lpString$) ' クラス名 、または キャプションを与えてウィンドウのハンドルを取得 Declare Function Api_FindWindowEx& Lib "user32" Alias "FindWindowExA" (ByVal hWndParent&, ByVal hWndChildAfter&, ByVal lpszClass$, ByVal lpszWindow$) ' グローバルアトムテーブルから文字列を取得 Declare Function Api_GlobalGetAtomName% Lib "kernel32" Alias "GlobalGetAtomNameA" (ByVal nAtom%, ByVal lpBuffer$, ByVal nSize&) Var Shared Edit1 As Object Var Shared Timer1 As Object Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Timer1.Attach GetDlgItem("Timer1") '================================================================ '= '================================================================ Declare Sub Mainform_Start edecl () Sub Mainform_Start() Timer1.SetInterval 30 Timer1.Enable -1 End Sub '================================================================ '= '================================================================ Declare Sub Timer1_Timer edecl () Sub Timer1_Timer() Var intRet As Integer Var intAtom As Integer Var hWnd As Long Var strText As String * 255 '文字列の長さは255バイト以下 hWnd = Api_FindWindowEx(0, 0, ByVal 0, "GlobalAddAtom(送信)") If hWnd Then intAtom = Api_GetProp(hWnd, "ExportProp") If intAtom Then intRet = Api_GlobalGetAtomName(intAtom, strText, 255) Edit1.SetWindowText strText End If End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End