Страница: 1 |
Страница: 1 |
Вопрос: Запрет повторного запуска приложения
Добавлено: 09.10.07 17:03
Автор вопроса: Иван | Web-сайт:
Уважаемые гуру!
Нашел на форуме несколько примеров, как запретить повторный запуск приложения. Везде создается массив из названий окон, используются API-функции, и т.д.
Подскажите, пожалуйста, чем хуже нижеприведенный код? Результат тот же, а писанины вдесятеро меньше.
Заранее благодарен.
Запуск из модуля:
Sub Main()
On Error GoTo ErrHandler
AppActivate("Мое приложение")
Exit Sub
Nxt1:
On Error GoTo 0
'Здесь команды, необходимые для подготовки запуска приложения
Form1.Show
Exit Sub
ErrHandler:
Resume Nxt1
End Sub
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
altrego
ICQ: 244-611-814
Вопросов: 3
Ответов: 28
Web-сайт:
Профиль | | #1
Добавлено: 09.10.07 17:51
А как на счет:
If App.PrevInstance Then End
End Sub
Номер ответа: 2
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #2
Добавлено: 10.10.07 00:28
Иван, ты написал AppActivate("Мое приложение". Какое окно активирует данная процедура, если окон с таким названием больше одного? Конечно-же первое попавшееся, а надо - окно твоей программы.
Для запрета запуска копии программы (из любого места, в отличие от If App.PrevInstance Then End) используй следующий код:
Const ERROR_ALREADY_EXISTS = 183&
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As Any, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Private Declare Function ReleaseMutex Lib "kernel32" (ByVal hMutex As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Form_Load()
Dim hMutex As Long
'Try to create a new Mutex
hMutex = CreateMutex(ByVal 0&, 1, App.Title)
'Did the mutex already exist?
If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then
'Clean up
ReleaseMutex hMutex
CloseHandle hMutex
'More than one instance detected
MsgBox "More than one instance"
End
Else
'form load code
End If
End Sub
Номер ответа: 3
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #3
Добавлено: 10.10.07 01:13
P.S.: Для активации окна используй API-функцию FindWindow
Номер ответа: 4
Автор ответа:
Иван
Вопросов: 34
Ответов: 53
Web-сайт:
Профиль | | #4
Добавлено: 10.10.07 22:04
Спасибо большое за помощь!
К слову:
Я эту проблему решал топорно: в названии окна моего приложения заменял русские буквы латинскими с таким же начертанием (р, с, е, и т.п.) — чтоб приложение было "уникальным". Кстати, эта проблема не решалась и в тех примерах, которые я до этого находил на форуме.
Еще раз огромное спасибо!