Двойной запуск программы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Valerik
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 18.10.2002 (Пт) 14:02
Откуда: Russia

Двойной запуск программы

Сообщение Valerik » 12.04.2004 (Пн) 20:56

Привет всем !
В общем нуна сделать какой нить запрет на то, чтобы программу нельзя было запустить повторно на компе, когда она врублена.

Заранее благодарен :!:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 12.04.2004 (Пн) 22:46

Провяряй так

Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "Можно запускать только одну копию программы!"
End
End If
'...Код, который далее
End Sub

Это работает, если запускают одно и тоже exe-приложение. Если файл скопировать, то можно запустить вторую копию.

Если по-хорошему, то надо сделать Вашему окну характерный, индивидуальный заголовок и искать его при запуске. Если нашли, то закрывать новую копию. Подробнее - см. поиск по форуму (FindWindow) или API-Guide (то же) :)

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 13.04.2004 (Вт) 0:09

Код: Выделить всё
'Code by Adam Verwijs
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

ЗЫ В примере, для создания мьютекса используется заголовок формы. Для примера сойдёт, для работы - нет. Используй GuidGen - http://www.yandex.ru/yandsearch?text=GuidGen
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 22

    TopList