Declare Function ShowWindowAsync Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
ShowWindowAsync устанавливает состояние показа окна, созданного различными потоками. Функция схожа с ShowWindow, за исключением того, что данная функция ставится в очередь сообщений заданного окна для асинхронной обработки. Прикладная программа может использовать эту функцию, чтобы избежать состояния зависания при ожидании зависшей прикладной программы, чтобы закончить обрабатывать событие показа окна
Функция возвращает 0, если окно было раньше скрыто. Если окно было видимым, то возвращается ненулевое значение
' Пример для VB .NET 2003 ' Запрет на запуск второй копии программы Public Enum ShowWindowConstants SW_HIDE = 0 SW_SHOWNORMAL = 1 SW_NORMAL = 1 SW_SHOWMINIMIZED = 2 SW_SHOWMAXIMIZED = 3 SW_MAXIMIZE = 3 SW_SHOWNOACTIVATE = 4 SW_SHOW = 5 SW_MINIMIZE = 6 SW_SHOWMINNOACTIVE = 7 SW_SHOWNA = 8 SW_RESTORE = 9 SW_SHOWDEFAULT = 10 SW_FORCEMINIMIZE = 11 SW_MAX = 11 End Enum ' Расположите код в процедуре Main Public Shared Sub Main() Dim RunningProcesses As Process() = Process.GetProcessesByName("WindowsApplication3") If (RunningProcesses.Length = 1) Then Application.Run(New Form1) Else ShowWindowAsync(RunningProcesses(0).MainWindowHandle, ShowWindowConstants.SW_SHOWMINIMIZED) ShowWindowAsync(RunningProcesses(0).MainWindowHandle, ShowWindowConstants.SW_RESTORE) End If End Sub