異なるアプリケーション間の通信          <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