Как отловить первый запуск программы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Как отловить первый запуск программы

Сообщение Ramzes » 23.08.2003 (Сб) 0:36

Помогите. Надо отловить первый запуск программы на компе, что бы записть инфу в реестер, не будет же она это делать прикаждом запуске. Спасибо.

WEB_13
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 06.08.2003 (Ср) 8:02
Откуда: Reutov, Russia

Сообщение WEB_13 » 23.08.2003 (Сб) 1:32

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

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 23.08.2003 (Сб) 10:00

Ну это в общем понятно, только как это сделать??? Я могу записать в реестер, а считать трудно, и вообще, я подумал, что можно файлик в винде создать, и спрятать его от юзверя. Возможен ли такой вариант - это было бы на много проще.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 23.08.2003 (Сб) 12:42

Можно сделать так:

Код: Выделить всё
Private Sub Form_Load()
Static was As Integer 'При первом запуске was = 0

If was = 0 Then
MsgBox "Первый запуск и всё такое"
was = 1
Else
End If
End Sub


Или так:

Код: Выделить всё
Private Sub Form_Load()
Dim s As String

Open "C:\Windows\System32\File.dat" For Append As #1 'Если файла нет, то он создастся
Line Input #1, s
If s = "This file had been already opened!" Then 'Если в файле есть такая строка, то закрыть файл
GoTo Closing
Else
Write #1, "This file had been already opened!"
MsgBox "Первый запуск и всё такое"
End If
Closing: Close #1
End Sub


:idea:
Нет меня больше

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.08.2003 (Сб) 14:09

Люди, вы чего? :?
Любая прога, чей первый запуск должен отличаться от остальных, при каждом запуске проверяет, не является ли этот запуск первым! Для этого, как правило, в реестр пишется флаг. И я не понимаю смысл фразы "могу записать, а считать трудно". Если неохота работать с апишками реестра, то юзай getsetting и savesetting.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

WEB_13
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 06.08.2003 (Ср) 8:02
Откуда: Reutov, Russia

Сообщение WEB_13 » 24.08.2003 (Вс) 1:14

Действительно операторов savesetting и getsetting вполне достаточно.
Но если нужно больше зачем API, есть отличная библиотека в составе VB для работы с реестром Registry Access Functions!
Format Hard Disk Completed

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 27.08.2003 (Ср) 16:48

A.A.Z. писал(а):Можно сделать так:

Код: Выделить всё
Private Sub Form_Load()
Static was As Integer 'При первом запуске was = 0

If was = 0 Then
MsgBox "Первый запуск и всё такое"
was = 1
Else
End If
End Sub



кхм, то есть ты думаешь что статическая переменная при перезапуске прграммы сохраняет значение? где интересно?
она сохраняет значение только при одной работе приложения..

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 27.08.2003 (Ср) 21:10

_NeoN_ писал(а):
A.A.Z. писал(а):Можно сделать так:

Код: Выделить всё
Private Sub Form_Load()
Static was As Integer 'При первом запуске was = 0

If was = 0 Then
MsgBox "Первый запуск и всё такое"
was = 1
Else
End If
End Sub



кхм, то есть ты думаешь что статическая переменная при перезапуске прграммы сохраняет значение? где интересно?
она сохраняет значение только при одной работе приложения..


Да, я согласен, переоценил возможности Static... :oops:
Нет меня больше

Aleksej
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 191
Зарегистрирован: 03.06.2003 (Вт) 9:58

Сообщение Aleksej » 28.08.2003 (Чт) 11:42

Код: Выделить всё
if App.hInstance=True Then
' Первый запуск
endif

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 28.08.2003 (Чт) 15:19

Aleksej писал(а):
Код: Выделить всё
if App.hInstance=True Then
' Первый запуск
endif


Не работает. :(
Код: Выделить всё
Private Sub Form_Load()
If App.hInstance = True Then MsgBox "Первый запуск" Else MsgBox "Не первый запуск"
End Sub


(Выдало "Не первый запуск".) :(
Нет меня больше

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

Сообщение MEMBER » 28.08.2003 (Чт) 19:10

2 Aleksej & A.A.Z
Ребята, вы что курили?
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.08.2003 (Пт) 7:01

Похоже на то!
Поясним, пожалуй :)
Есть проперть previnstance, туды пихается тру, если данная копия программы в данный момент времени в данной системе не является единственной. Используется это для предотвращения запуска двух экземпляров проги из одного экзешника одновременно.
Попробуй, к примеру, повторно запустить api-guide.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

amda
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 134
Зарегистрирован: 11.09.2002 (Ср) 15:14
Откуда: Russia, Волгоградская обл., г. Волжский

Сообщение amda » 29.08.2003 (Пт) 10:12

долго не мог понять задачу :oops:
если нужно запретить запуск второго экземпляра программы, то можно сделать так:
Код: Выделить всё
Private Sub Form_Load()
Me.Caption = "новое окно"
On Error GoTo launched
VBA.Interaction.AppActivate "Form1"

End
Exit Sub
launched:
If Err.Number = 5 Then
    Me.Caption = "Form1" 'продолжение работы
End If
End Sub


а пользоываться реесмтром или дополнительными файлами не лучший способ.Если твая прога или, упаси бог, виндовс зависнет, то запись о запущенной проге останется и она, вообще больше не будетзапускаться 8)

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 31.08.2003 (Вс) 16:14

Мне нужно засечт 30 дней работы программы, и я это сделал, но не записывал в реестер ничего, я просто создал файл, поместил туда дату и время, и при каждом запуске программы я проверяю, дату и время, и если истек срок 30 дне выполняю поставленые действия, тоесть при помоще другой формы котораядолжна запуститься в указаное время, удаляю проект с компютера, а при переустановке Windows мой второй проект удаляеется т.к. находиться в папке Windoows. Способ конечно не очень, но пока тут никто ни чем мне не помог, надеюсь, помогут... :cry:


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 12

    TopList