Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Вопрос по поводу реестровой автозагрузки


Автор: Начинающий_новичок 24.7.2004, 14:21
У меня такой вопрос: КАК отправить скрипт в реестр, в автозагрузку с дискеты ------ подробнее:
Наример, у меня скрипт есть на дискете(в корневом каталоге) - "Напоминалка.vbs" Я наисал этот скрипт для
того, чтобы он запускался вместе с Windows и напоминал мне о чём либо, но чтоб он запустился вместе
с Windows нужно, очевидно, поставить его в автозагрузку! Мне приходится вручную копировать
скрипт - "Напоминалка.vbs" в меню Пуск->Программы->Автозагрузка. Но хочется чтоб при запуске с дискеты
скрипт "Напоминалка.vbs" автоматически кидался в автозагрузку, в реестр! Конечно можно воспользоваться
таким скриптом, но он кидает "Напоминалка.vbs" не в реестровую автозагрузку, а просто в автозагрузку:

Код
(скрипт для Windows98)
Set FSO = CreateObject("Scripting.FileSystemObject")
if fso.FileExists("a:\Напоминалка.vbs") then
fso.copyfile "a:\Напоминалка.vbs", "C:\Windows\Главное меню\Программы\Автозагрузка\Напоминалка.vbs"
End if

(скрипт для WindowsXP)
Set FSO = CreateObject("Scripting.FileSystemObject")
if fso.FileExists("a:\Напоминалка.vbs") then
fso.copyfile "a:\Напоминалка.vbs", "C:\Documents and Settings\All Users\Главное меню\Программы\Автозагрузка\Напоминалка.vbs"
End if



Тем более он объёмный(скрипт), и чтоб он был универсальный для WindowsXP и Windows98 приходится сначала описывать
функцию для WindowsXP, а потом для Windows98 или наооборот... Короче говоря хочется одну
функцию - и для XP и для 98 Windows'а которая кидала бы скрипт "Напоминалка.vbs" в реестровую автозагрузку! Зачем имено с
дискеты запускать и кидать в реестр - потому-что у меня есть немного нформации "как записывать в реестр", но я в ней не могу
разобраться, единственое что я понял - так это, что для облегчения копирования скрипта в реестровую автозагрузку нужно этот
скрипт запустить из корневого каталога - например с дискеты - диск A !!
Так значит у меня есть диск А, на нем скрипт "Напоминалка.vbs" - "A:\Напоминалка.vbs", и мне его надо записать в
автозагрузку (в реестр), (не исключаю, что для начала нужно "Напоминалка.vbs" перенести на сам копьютер). Ниже я
представлю скрипт в котором я не могу разобраться, ЛЮДИ ДОБРЫЕ ЕСЛИ ВЫ ЭТОТ СКРИПТ ПОЙМЁТЕ, ЕСЛИ НЕ СЛОЖНО,
ПОДСТАВЬТЕ В ЭТОТ СКРИПТ ПАРАМЕТРЫ КОТОРЫЕ Я ЗАДАЛ - "A:\Напоминалка.vbs" , (СКРИПТ ВЗЯТ С КАКОГО-ТО
САЙТА)
Представляю скрипт "точку в точку" с сайта:

Код
A (Flangie):

Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, _
ByVal lpFileName As String) As Long
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

'Registry keys
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006

'Registry access constants
Public Const KEY_QUERY_VALUE = &H1 'Permission to query subkey data.
Public Const KEY_SET_VALUE = &H2 'Permission to set subkey data.
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10
Public Const KEY_CREATE_LINK = &H20
Public Const KEY_READ = KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
Public Const KEY_WRITE = KEY_SET_VALUE Or KEY_CREATE_SUB_KEY
Public Const KEY_ALL_ACCESS = KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_SUB_KEY _
Or KEY_CREATE_LINK Or KEY_SET_VALUE

Public Const REG_OPTION_NON_VOLATILE = 0&
Public Const REG_OPTION_VOLATILE = &H1

Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Public Enum RegTypes
RegNonee = 0
RegSZ = 1
RegExpandSz = 2
RegBinary = 3
RegDword = 4
RegDwordLittleEndian = 4
RegDwordBigEndian = 5
RegLink = 6
RegMultiSz = 7
RegResourceList = 8
RegFulResourceDesc = 9
End Enum

Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long

Declare Function RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
ByVal Reserved As Long, ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long

Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long

Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, _
ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal szData As String, _
ByRef lpcbData As Long) As Long

Declare Function RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, _
ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long

Public Function RegGetValue(Root As Long, SubKey As String, Key As String) As String
Dim Buffer As String, hKey As Long, nType As Long, nSize As Long
RegGetValue = 0
If Not RegOpenKeyEx(Root, SubKey, 0, KEY_READ, hKey) Then
nSize = 0
RegQueryValueEx hKey, Key, 0, nType, Buffer, nSize
If hKey And nSize > 0 And nType = RegSZ Then
Buffer = Space(nSize + 1)
RegQueryValueEx hKey, Key, 0, nType, Buffer, nSize
RegGetValue = Left(Buffer, nSize - 1)
RegCloseKey hKey
End If
End If
End Function

Public Sub RegSetValue(Root As Long, SubKey As String, Key As String, value As String)
Dim hKey As Long, sa As SECURITY_ATTRIBUTES, nDisp As Long
If Not RegCreateKeyEx(Root, SubKey, 0, vbNull, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, sa, hKey, nDisp) Then
RegSetValueEx hKey, Key, 0, RegSZ, value, Len(value) + 1
RegCloseKey hKey
End If
End Sub

' использование:

' RegSetValue HKEY_LOCAL_MACHINE, "Software\Folder", "Key", "StringValue"
' string= RegGetValue(HKEY_LOCAL_MACHINE, "Software\Folder", "Key")
' ----------------------------------------------------------------------
' вместо Software\Folder - пишите нужные вам папки

' вместо Key - имя строковой переменной (которая будет храниться
' в реестре)

' вместо StringValue - значение строковой переменной


ПОМОГИТЕ КТО ЗНАЕТ!!!!!!!!!!!!!!!!!!

Автор: Enflout 24.7.2004, 15:07
Значит так поступаем с реестром:
Set Reg = CreateObject("WScript.Shell")
Reg.RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\yourprogram", "C:\111\Напоминалка.vbs"
Получится ключ под названием yourprogram и путем для запуска твоего скрипта(Run выбрал условно, для примера).
Перед использованием нужно скопировать твою напоминалку по указанному адресу(в данном случае C:\111\) или вставлять дискету при каждой загрузке. Для этого смотри в fso file.copy.
Теперь по отношению приведенного кода. Это модуль, который можно подключить к своей программе и использовать его как показано выше(тобой), но это api-функции, а у тебя скрипт.
Ну вроде все, если неправ, то поправьте, но вроде все правильно. smile.gif

Автор: Crash_K 29.7.2004, 09:17
Спасибо, а переменные какие-то надо вводить перед этим:
Код
Set Reg = CreateObject("WScript.Shell")
Reg.RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\yourprogram", "C:\111\Напоминалка.vbs"

Автор: Enflout 29.7.2004, 21:30
Нет, не надо. Создаешь vbs-скрипт и туда вводишь этот код. После его выполнения в реестре появится по адресу HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ ключ yourprogram со значением C:\111\Напоминалка.vbs. smile.gif

Автор: Naghual 29.7.2004, 22:13
Crash_K
А ты часом не вирусок рисуеш? А?

Автор: cardinal 30.7.2004, 03:14

 ! 
 
Модератор: Crash_K еще раз напоминаю, что обсуждение написания вирусов на форуме запрещено! Если ты не пишешь вирус, то проигнорируй это сообщение.

Naghual, если что - сделай Report. Спасибо.

Автор: Crash_K 31.7.2004, 09:16
Игнорирую, потому, что я пишу программу наподобие программы SXNetworker, эта программа предназначена для подшучивания над друзьями - запускаю приложение (одно не программа сама) с дискеты и оно записывается в автозагрузуку. Иду на другую машину которая в сети с вышеуказаной машиной и завожу IP адрес той машины и начинаю прикалываться - проезжает экран, копируются всякие файлы и т.д

Автор: Crash_K 31.7.2004, 13:02
Слушай Templar$, а удалить ключ из реестра как?
Uninstall хочется сделать !!!

Автор: Enflout 31.7.2004, 13:43
Crash_K, я конечно ничего не имею против, но думаю было бы гораздо лучше, если бы вы сами пытались решить такого рода задачи! Ради интереса дал яндексу запрос "VBS работа с реестром" и получил 368 результатов. Мало? Ну раз уж написал все это, то дам и ответ на ваш вопрос:
Set Reg = CreateObject("WScript.Shell")
Reg.RegDelete "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\yourprogram"
Вот и все!
Не задавайте пожалуйста больше таких вопросов, не воспользовавшись хотя бы поиском!
ЗЫ
Если у вас установлено что-то вроде win9x, то зайдите в %SystemRoot%\Samples\WSH полегчает.

Автор: Crash_K 31.7.2004, 13:50
В принципе я сначало спросил потом попробывал удалить таким способом как вы указали, но всё равно спасибо!!!

Автор: Guest 23.11.2005, 18:03
Crash_K конечно ничего не имею против, но думаю было бы гораздо лучше, если бы вы сами пытались решить такого рода задачи! Ради интереса дал яндексу запрос "VBS работа с реестром" и получил 368 результатов. Мало? Ну раз уж написал все это, то дам и ответ на ваш вопрос:
Код

Set Reg = CreateObject("WScript.Shell")
Reg.RegDelete "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\yourprogram"

Вот и все!
Не задавайте пожалуйста больше таких вопросов, не воспользовавшись хотя бы поиском!
ЗЫ
Если у вас установлено что-то вроде win9x, то зайдите в %SystemRoot%\Samples\WSH полегчает.

Автор: cardinal 23.11.2005, 18:09
Гость_LOOX, не выражайтесь пожалуйста на форуме и используйте теги для кода в будущем!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)