Cette question a été marquée en tant que doublon. Et les gens qui ont décidé que dire dans cette question là est la réponse à cette question. Eh bien, cette question n'a pas encore de réponse acceptée. Une mai être ma réponse peut aider. Cette solution fonctionne avec WPF mais son essence est indépendante de WPF en effet
J'ai fait des recherches sur le sujet car cela semble intéressant. Je pense que vous pourriez le faire en utilisant Win32. J'ai fait un échantillon très très simple. Deux applications WPF, nommées WpfSender et WpfListener. WpfSender enverra un message au processus WpfListener. WpfSender ne dispose que d'un bouton qui envoie le message une fois qu'il est cliqué.
WpfListener est seulement une fenêtre vide qui montrera une boîte de message lors de la réception du message de WpfSender.
Voici le code derrière pour WpfSender
using System;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows;
namespace WpfSender
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
var process = Process.GetProcessesByName("WpfListener").FirstOrDefault();
if (process == null)
{
MessageBox.Show("Listener not running");
}
else
{
SendMessage(process.MainWindowHandle, RF_TESTMESSAGE, IntPtr.Zero, IntPtr.Zero);
}
}
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SendMessage(IntPtr hwnd, uint Msg, IntPtr wParam, IntPtr lParam);
private const int RF_TESTMESSAGE = 0xA123;
}
}
Vous utilisez api Win32 pour envoyer des messages à travers les applications Windows
Voici le code pour WpfListener
using System;
using System.Windows;
using System.Windows.Interop;
namespace WpfListener
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
source.AddHook(WndProc);
}
private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == RF_TESTMESSAGE)
{
MessageBox.Show("I receive a msg here a I can call the method");
handled = true;
}
return IntPtr.Zero;
}
private const int RF_TESTMESSAGE = 0xA123;
}
}
Je n'écris pas ici le XAML puisqu'il est très simple. Encore une fois, il s'agit d'un exemple très simple qui vous montre comment réaliser un envoi de message d'application croisée. La limite est votre imagination. Vous pouvez déclarer plusieurs constantes int représentant chacune une action, puis dans une instruction switch, vous pouvez appeler une action sélectionnée.
Je dois dire que je suis deux articles que je trouve dans mes recherches:
For knowing how to handle WndProc in Wpf
For knowing how to send messages using win32 api
Hope this helps!
Je contrôle MyWrapper, MyApp et MyHook. Avez-vous de bonnes informations sur les pipes nommées? –
Un peu de recherche me mène ici: http://www.omegacoder.com/?p=101, il semble un peu impliqué, pour ce que vous obtenez. J'irais probablement juste avec l'approche de douille. –