Страница: 1 | 2 |
Вопрос: Автозагрузка
Добавлено: 16.03.07 20:24
Автор вопроса: 20vek
Вопрос такого рода, есть главная программа, и есть вспомогательная, которая отслеживает
изменения в LOG файле. и если изменения есть, то должна просто при запуске Windows предупредить, если нет то END.
Варианты решения.
1. В инсталляторе файла главной программы создать ярлык для автозагрузки вспомогательной и одновременно в папке самой программы на то случай если из
автозагрузки удалят, а потом захотят вернуть, можно скопировать вставить.
2. Прописать в реестре с возможность удаления и восстановления. НО есть один
нюанс при удалении программы ветка останется. (или фиг с ним юзером)
3. Создавать ярлык программно, но просто жаль вспомогательную программку она всего
25 кб. Да и не знаю как, что нарыл в инете то Delfi, то не до конца объяснено.
Третий вариант конечно предпочтительный, но…
Что скажите, господа хорошие
Ответы
Всего ответов: 27
Номер ответа: 1
Автор ответа:
Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #1
Добавлено: 16.03.07 20:42
Не понял, а чего не получается?
Номер ответа: 2
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #2
Добавлено: 16.03.07 20:47
нюанс при удалении программы ветка останется. (или фиг с ним юзером)
- Нормальный вариант, только я не понял почему после удаления отсанется ветка. Что мешает удалить ветку?
Номер ответа: 3
Автор ответа:
20vek
Вопросов: 10
Ответов: 71
Профиль | | #3
Добавлено: 16.03.07 20:50
Все получается кроме третьего пункта.
И как же все та-ки лучше?
Третий пункт есть код, но не врубаюсь.
ДЛя общеобразования не помешало бы.
Номер ответа: 4
Автор ответа:
20vek
Вопросов: 10
Ответов: 71
Профиль | | #4
Добавлено: 16.03.07 20:52
Пост2 - это будет сделанно програмно и значит в Unistal забито не будет
Номер ответа: 5
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #5
Добавлено: 16.03.07 20:54
пусть твоя прога главная при запуске записивает в реестр автозагрузку вспогатильной.
Или пускай твоя вспогательная прога каждих пару секунд проверяет есть ли запись в автозагрузке для нее если нет тогда записиваем. Юзер не сможет удалить із автозагрузки ее.Ну разумеетса если не удалит і не вирубит комп з резетки сразу.
Я когда так вірь создавал(уже не создаю прозьба сразу не накидиватса: а ти вірусописатель хренов за таких как ти ми деньгі Kasperskomu башляем(Fever ето я Doc. Помниш свою статю "Про DOCa" ))
Sorry 20vek за отклонения от теми
А в втором решений ти говоришь про какую ту ветку так если ти будеш записиватса у
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
так никто ету ветку удалять не будет целеком
Или ти хочеш закидивать свою прогу у Пуск\все програми\Автозагрузка\-ето фігня вопервих прийдеться узнавать к ней адрес(на каждом компе другая папка) вовторих создавть ярлик лучше регістер половина юзеров і не знает о его существовании.
Настрочил ?
Номер ответа: 6
Автор ответа:
20vek
Вопросов: 10
Ответов: 71
Профиль | | #6
Добавлено: 16.03.07 21:03
пост 5
1.Програма для людей и я янехочу чтобы она что то
отслеживала по таймеру. ЕЕ задача если TRue then
предупредить Else end. И память не загружать.
2.Адрес и все такое это, элементарно.
А автозагрузка это какая ни на есть демократия.
Номер ответа: 7
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #7
Добавлено: 16.03.07 21:08
Твое право.Ти создатель
Но я б такой демократии не давал.
отслеживала по таймеру. ЕЕ задача если TRue then
предупредить Else end. И память не загружать.
Да но если ети люди случайно удалят автозагрузку
і твоя прога не сможет нормально работать?
Номер ответа: 8
Автор ответа:
20vek
Вопросов: 10
Ответов: 71
Профиль | | #8
Добавлено: 16.03.07 21:11
Вспомогательная да, а главная будет и пункт в меню типа "поставить в автозагрузку?" появится.
Номер ответа: 9
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #9
Добавлено: 16.03.07 21:14
А зачем тебе за LOG смотреть
Номер ответа: 10
Автор ответа:
20vek
Вопросов: 10
Ответов: 71
Профиль | | #10
Добавлено: 16.03.07 21:16
Имениник там, хочу предупредить, где поужинать на халяву.
Номер ответа: 11
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #11
Добавлено: 16.03.07 21:18
А ти не зможеш предупридить потому щто какой то ламер удалит автозагрузку.Все в твоих руках
Номер ответа: 12
Автор ответа:
20vek
Вопросов: 10
Ответов: 71
Профиль | | #12
Добавлено: 16.03.07 21:23
Его право.
Вообщем вижу ответы такие делай что знаешь, а другое ни ни.
Номер ответа: 13
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #13
Добавлено: 16.03.07 21:25
ну а если вирь пошалит удалит автозагрузку іли прийдет брат малий і удалит і Хозяин компа не прийдет на какую нибудь встречу
Номер ответа: 14
Автор ответа:
20vek
Вопросов: 10
Ответов: 71
Профиль | | #14
Добавлено: 16.03.07 21:34
Его компьютер и его проблемы, терпеть не могу сам
навязанных услуг. Лучшая программа которая работает с папки, это мое мнение.
Анекдот;
Беларусская кулинарная книга <сто способов приготовления бульбы>
Русская 100 способов приготовления щей.
Еврейская 365 адресов где можно отобедать.
***************************
выводы сделаешь сам.
Номер ответа: 15
Автор ответа:
20vek
Вопросов: 10
Ответов: 71
Профиль | | #15
Добавлено: 16.03.07 21:42
Это не Офф-топ ближе к телу.
Вот есть код и я его не понимаю, может просто,
кто-то допишет Command1_Click()и ярлык в папке авто загрузка.
"SHAddToRecentDocs" (ByVal dwFlags As Long, ByVal dwData As String) As Long
Private Declare Function api_SHGetSpecialFolderLocation Lib "shell32.dll" Alias _
"SHGetSpecialFolderLocation" (ByVal hwndOwner As Long, _
ByVal nFolder As Long, pidl As Long) As Long
Private Declare Function api_SHGetPathFromIDList Lib "shell32.dll" Alias _
"SHGetPathFromIDList" (ByVal pidl As Long, ByVal sPath As String) As Long
Public Sub m_CreateShortcut(ScFolder As Variant, ScCaption As String, _
TargetPath As String, Optional ScParam As String, _
Optional StartFolder As String, Optional IcoNum As Integer, _
Optional IcoPath As String, Optional WindowMode As Integer)
'Константы для системных папок:
' 2 = Programs
' 7 = Startup
' 8 = RecentDocs
'16 = Desktop
'Полный путь к временному ярлыку, созданному в папке RecentDocs.
Dim Shortcut0 As String
Dim n0 As Integer 'текущая позиция считывания из файла Shortcut0.
Dim x0 As String * 1 'сюда считываются символы из файла Shortcut0.
Dim l0 As Long 'длина файла Shortcut0.
Dim Shortcut1 As String 'полный путь к создаваемому ярлыку.
Dim n1 As Integer 'позиция считывания в файле Shortcut1
Dim x1 As String * 1 'сюда считываются символы из файла Shortcut1.
Dim l1 As Long 'длина файла Shortcut1.
Dim T As Double
Dim p As Long
Dim i As Integer
Dim x As String
Dim y0 As String * 2
'проверяем параметр ScFolder - указывает целевую папку
If IsNumeric(ScFolder) Then
ScFolder = p_GetSpecialFolder(CInt(ScFolder))
ElseIf Dir$(ScFolder, vbDirectory) = "" Then
MsgBox "Указанная папка (" & ScFolder & " не существует!", _
vbCritical, "Создание ярлыка"
Exit Sub
End If
'создаем временный ярлык в папке RecentDocs, используя путь к целевой папке.
If api_SHAddToRecentDocs(2, TargetPath) > 0 Then
'определяем полный путь к созданному временному ярлыку.
Shortcut0 = p_GetSpecialFolder(8) & "\" & p_File_Folder(TargetPath) & ".lnk"
'Ждем окончания процесса создания ярлыка.
T = Now()
Do Until (Dir$(Shortcut0) <> ""
If (Now() - T) > 0.00006 Then 'ждем 5 секунд
If MsgBox("Создание ярлыка задерживается. Продолжить ожидание?", _
vbQuestion + vbOKCancel, "Создание ярлыка" <> vbOK Then
Exit Sub
Else
T = Now()
End If
End If
Loop
'Открываем созданный файл врменного ярлыка для чтения.
n0 = FreeFile()
Open Shortcut0 For Binary Access Read As #n0
'ждем, пока файл будет корректно открыт.
Do Until LOF(n0) > 0
Loop
l0 = LOF(n0)
'открываем файл целевого ярлыка для записи
Shortcut1 = ScFolder & "\" & ScCaption & ".lnk"
n1 = FreeFile()
Open Shortcut1 For Binary Access Write As #n1
'Ищем последний байт, который нужно считать
p = (l0 - 4)
y0 = ""
Do Until (p <= 0) Or (y0 = vbNullChar & vbNullChar)
Get #n0, p, y0
p = p - 1
Loop
l1 = p + 2
'Копируем байты
For p = 1 To l1
Get #n0, p, x0
Select Case p
Case 21 'путь к иконке, параметрам и командной строке ярлыка
i = 3
If StartFolder <> "" Then
i = i + 16
End If
If ScParam <> "" Then
i = i + 32
End If
If (IcoPath <> "" Or (IcoNum > 0) Then
i = i + 64
End If
x1 = Chr$(i)
Case 57 'Индекс иконки
x1 = Chr$(IcoNum)
Case 61 'Оконный режим запуска
x1 = Chr$(WindowMode)
Case Else
x1 = x0
End Select
Put #n1, p, x1
Next p
'Закрываем и удаляем файл временного ярлыка
Close #n0
Kill Shortcut0
'Добавляем иконку, параметры и командную строку в файл целевого ярлыка
x = ""
If StartFolder <> "" Then
x = x & Chr$(Len(StartFolder)) & vbNullChar & StartFolder
End If
If ScParam <> "" Then
x = x & Chr$(Len(ScParam)) & vbNullChar & ScParam
End If
If IcoPath = "" Then
If IcoNum > 0 Then
x = x & Chr$(Len(TargetPath)) & vbNullChar & TargetPath
End If
Else
x = x & Chr$(Len(IcoPath)) & vbNullChar & IcoPath
End If
x = x & String(4, vbNullChar)
Put #n1, l1 + 1, x
Close #n1
Else
MsgBox "Ошибка создания ярлыка.", vbCritical, "Создание ярлыка"
End If
End Sub
Private Function p_GetSpecialFolder(CsIdl As Long) As String
'возвращаем полный путь к системной папке Windows.
Dim r As Long
Dim pidl As Long
Dim sPath As String
r = api_SHGetSpecialFolderLocation(Application.hWndAccessApp, CsIdl, pidl)
If r = 0 Then
sPath = Space$(260)
r = api_SHGetPathFromIDList(ByVal pidl, ByVal sPath)
If r Then
p_GetSpecialFolder = Left$(sPath, InStr(sPath, Chr$(0)) - 1)
End If
End If
End Function
Private Function p_File_Folder(FullPath As String) As String
'возвращает короткое имя файла FullPath.
Dim i As Integer
p_File_Folder = FullPath
i = Len(FullPath)
Do Until i = 0
If Mid$(FullPath, i, 1) = "\" Then
p_File_Folder = Mid$(FullPath, i + 1)
i = 0
Else
i = i - 1
End If
Loop
End Function