У меня есть сценарий ниже: приложение WinForms, которое позволяет запускать только один экземпляр этого приложения (Mutex используется здесь для проверки).Приложение на старте с каким-то параматером работает, но скрыто.Когда кто-нибудь снова щелкнет приложение, Mutex обнаружит, что приложение уже запущено, и "раскроет" основную форму с помощью вызова собственного метода (см. Метод BringWindowToFront ниже).код для поиска и отображения окна формы:
public static class NativeMethods
{
public enum ShowWindowOptions
{
FORCEMINIMIZE = 11,
HIDE = 0,
MAXIMIZE = 3,
MINIMIZE = 6,
RESTORE = 9,
SHOW = 5,
SHOWDEFAULT = 10,
SHOWMAXIMIZED = 3,
SHOWMINIMIZED = 2,
SHOWMINNOACTIVE = 7,
SHOWNA = 8,
SHOWNOACTIVATE = 4,
SHOWNORMAL = 1
}
[DllImport("user32.dll")]
public static extern int ShowWindow(int hwnd, int cmdShow);
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(String lpClassName, String lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
public static void BringWindowToFront(string windowTitle)
{
// Get a handle to the application.
IntPtr handle = FindWindow(null, windowTitle);
// Verify that app is a running process.
if (handle == IntPtr.Zero)
{
return;
}
// With this line you have changed window status from example, minimized to normal
ShowWindow((int)handle, (int)ShowWindowOptions.SHOWDEFAULT);
// Make app the foreground application
SetForegroundWindow(handle);
}
}
Все хорошо, НО мне пока нужна одна функциональность.Я хотел бы показать еще одну дополнительную форму, когда основная форма отобразится в первый раз.Обычно я делаю это с помощью события _Shown .Но когда я использую методы PInvoke для отображения окна, это событие не запускается.
Поэтому в основном я хотел бы показать дополнительную форму, когда отображается основная форма (с использованием метода ShowWindow PInvoke)это возможно?Есть еще идеи, как этого добиться?
Заранее спасибо.