Как я получаю Систему. Windows. Экземпляр формы от его дескриптора Win32?

Привет "выключен" ошибка ввода?
Пожалуйста, попробуйте:

spring.main.banner-mode=off
5
задан Ian Kemp 24 February 2009 в 13:49
поделиться

6 ответов

Приложения единственного экземпляра хорошо поддерживаются платформой.NET. Проверьте этот поток на пример, который делает точно, в чем Вы нуждаетесь.

4
ответ дан 13 December 2019 в 19:36
поделиться

Управление. FromHandle не собирается работать, потому что управление, которое Вы ищете, находится в другом процессе (и поэтому в другом appdomain).

У Вас уже есть WindowHandle, но это - использование, ограничен API Win32. Ничто от WinForms не собирается работать.

Можно отправить (WM _) сообщения, но трудно объяснить данные.

Опции

  1. используйте что-то низкий уровень с временным файлом.

  2. используйте дистанционную работу (WCF)

3
ответ дан 13 December 2019 в 19:36
поделиться

Вы действительно пытаетесь реализовать одноэлементное приложение. Существует несколько примеров в Интернете (извините, действительно не судили меня), например.

http://www.codeproject.com/KB/cs/SingletonApplication.aspx

http://www.nathanm.com/csharp-wpf-singleton-application/

2
ответ дан 13 December 2019 в 19:36
поделиться

Я пользуюсь библиотекой Microsoft.VisualBasic.dll, описанной в потоке, на который указал nobugz. Да, можно использовать его в C#. Вы просто переопределяете OnStartupNextInstance и передаете командную строку в Вашу программу любым способом работы лучше всего для Вас.

Это намного легче, чем бездельничание с потоками вручную.

0
ответ дан 13 December 2019 в 19:36
поделиться

Попробуйте следующее

var form = (Form)(Control.FromHandle(myHandle));

Править

Перечитайте свой вопрос, и понял, что Вы смотрите на дескриптор в другом процессе. Нет никакого способа преобразовать дескриптор в другом процессе к экземпляру Формы в текущем процессе. Мое решение будет только работать на дескрипторы в том же процессе.

Единственный способ схватить экземпляра Формы состоит в том, чтобы использовать Дистанционную работу. Но это потребует сотрудничества со стороны обоих процессов, которое, кажется, не то, что Вы ищете.

2
ответ дан 13 December 2019 в 19:36
поделиться

Вы не можете назвать код в другом процессе непосредственно, необходимо использовать некоторую форму межпроцессного взаимодействия

Если Вы - коммуникация только между процессами, запущенными тем же пользователем на том же компьютере, можно использовать сообщения окна (использующий WinAPI PostMessage и переопределяющий WndProc), иначе я думаю, что дистанционную работу является самым легким использовать в .NET

0
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: