Есть WPF приложение которое на вход получает аргументы командной строки при запуске, и передает их через SendMessage первому запущенному экземпляру приложения, вот код:
class Program : Application
{
[System.STAThreadAttribute()]
public static void Main() {
bool createdNew = true;
using (Mutex mtx = new Mutex(true, "AudioPlayer", out createdNew)) {
if (createdNew)
{
Program app = new Program();
app.InitializeComponent();
app.Run();
}
else {
MessageHelper msg = new MessageHelper();
int result = 0;
int hWnd = msg.getWindowId(null, "AudioPlayer");
result = msg.sendWindowsStringMessage(hWnd, 0, Environment.GetCommandLineArgs()[1]);
}
}
}
public void InitializeComponent() {
this.StartupUri = new Uri("MainWindow.xaml", System.UriKind.Relative);
}
}
класс MessageHelper:
https://gist.github.com/BoyCook/5075907
так вот, если приложение уже запущенно, то при повторном запуске аргументы спокойно передаются и складируются в List в классе MainWindow.xaml.cs т.к. id совпадают и SendMessage работает,
но в случае первого запуска с несколькими аргументами FindWindow(в нашем случае getWindowId) возвращает ноль и обрабатывается только первый аргумент.
Чего не хватает чтобы все работало как надо?
UPD:
по задумке программа должна открыть несколько выделенных файлов и сохранить пути этих файлов в первом экземпляре программы и использовать их дальше по назначению