Привет всем, я нашел этот код here в C#, который позволяет использовать SendMessage API для отправки сообщений взад и вперед от запущенных приложений .net. Во время тестирования все хорошо сочетается с кодом C#, но мне нужно преобразовать его в VB.net.Связь между приложениями vb.net
Так я использовал онлайн C# -> VB.net конвертер и получил это:
Импорт System.Runtime.InteropServices
Public Class Form1
Inherits System.Windows.Forms.Form
Private Const RF_TESTMESSAGE As Integer = &HA123
<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Public Shared Function SendMessage(ByVal hwnd As IntPtr, <MarshalAs(UnmanagedType.U4)> ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
End Function
Public Sub New()
InitializeComponent()
Me.Text = String.Format("This process ID: {0}", Process.GetCurrentProcess().Id)
End Sub
<STAThread()> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim proc As Process = Process.GetCurrentProcess()
Dim processes As Process() = Process.GetProcessesByName(proc.ProcessName)
If processes.Length > 1 Then
For Each p As Process In processes
If p.Id <> proc.Id Then
SendMessage(p.MainWindowHandle, RF_TESTMESSAGE, IntPtr.Zero, IntPtr.Zero)
End If
Next
Else
MessageBox.Show("No other running applications found.")
End If
End Sub
Protected Overrides Sub WndProc(ByRef message As Message)
If message.Msg = RF_TESTMESSAGE Then
ListBox1.Items.Add("Received message RF_TESTMESSAGE")
End If
MyBase.WndProc(message)
End Sub
End Class
Однако, используя код выше для моих приложений не кажется, произведите любое действие sendmessage, когда оно дойдет до . Если процессы. Длина> 1 Затем. Он всегда говорит мне Других запущенных приложений не найдено., несмотря на то, что у меня есть оба приложения, запущенные, как я сделал на примере C#.
У меня должно быть что-то, что не переносилось при конвертации. Любая помощь будет полезна, чтобы исправить это!
'оба приложения работают' - два экземпляра одной и той же программы или разные программы? Кстати, почему бы вам не использовать WCF? –
Хороший Лорд, научиться писать код на C#, у вас будет меньше времени, чем получение этого конверта для запуска. Какова моя рекомендация, понимание C# является довольно сложным требованием для программистов VB.NET в наши дни. –
Ссылка на сообщение в блоге здесь не работает. Возможно, пришло время подумать об использовании первоклассного метода межпроцессного взаимодействия, такого как WCF, или даже Remoting. См. Также http://stackoverflow.com/questions/2082450/communication-between-c-sharp-applications-the-easy-way –