vb.NET で記述された 2 つの Windows フォーム アプリケーション、App1 と App2 があるとします。App1 と 2 は、完全に分離された 2 つのソリューションです。
App2 がこのパネルのコンテンツを制御できるように、App1 でパネル (または別のコンテナー) を共有することは可能ですか? コンテンツを制御するとは、App2 でイベントをトリガーするテキストボックスとボタンを追加することを意味します。
vb.NET で記述された 2 つの Windows フォーム アプリケーション、App1 と App2 があるとします。App1 と 2 は、完全に分離された 2 つのソリューションです。
App2 がこのパネルのコンテンツを制御できるように、App1 でパネル (または別のコンテナー) を共有することは可能ですか? コンテンツを制御するとは、App2 でイベントをトリガーするテキストボックスとボタンを追加することを意味します。
私たちは以前に私の会社でその義務を果たし、いくつかの WinAPI を使用してウィンドウ間の通信を行いました。
次の user32.dll 関数を DLLImport する必要があります。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, _
ByVal lParam As IntPtr) As Integer
App1 の SendMessage 関数を使用して、メッセージを App2 に送信します。
App2 アプリケーションで WndProc Sub をオーバーライドするウィンドウ メッセージを聞くことができます。
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_COPYDATA Then
'Read the message and perform some task,
'Create textboxes, modify controls, whatever
Else
MyBase.WndProc(m)
End If
End Sub
アプリケーション 1 を介してウィンドウ メッセージを送信する例は次のとおりです。
Dim hWnd As IntPtr
Dim mCopyData As COPYDATASTRUCT
hWnd = FindWindow(Nothing, App2WindowName)
Dim message As New System.Text.StringBuilder
If (hWnd <> 0) Then
message.Append(Mensaje)
Dim pCopyData As IntPtr = Marshal.AllocHGlobal(message.Length() + 40)
mCopyData.lpData = Marshal.StringToHGlobalAnsi(message.ToString)
mCopyData.cbData = message.Length
mCopyData.dwData = _messageID
Marshal.StructureToPtr(mCopyData, pCopyData, False)
SendMessage(hWnd, WM_COPYDATA, sender.Handle, pCopyData)
Marshal.FreeHGlobal(mCopyData.lpData)
Marshal.FreeHGlobal(pCopyData)
End If
winapi を使用するには、コードで COPYDATASTRUCT を宣言する必要があります。
<StructLayout(LayoutKind.Sequential)> _
Private Structure COPYDATASTRUCT
Public dwData As IntPtr
Public cbData As Integer
Public lpData As IntPtr
End Structure
および WM_COPYDATE メッセージ整数:
Const WM_COPYDATA As Integer = 74