VBNet
VBMania
Голосование: Ваш голос отсылается по E-mail владельцу сайта, после чего голоса анализируются и на отдельной странице выводятся результаты. Нет тем. Доска почёта: Sergey Y. Tkachev Кононенко Роман Kirill Sergey Sapozhnikov Sobic Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Выпуск номер 41.
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Изменение атрибутов файла (SetFileAttributes) Изменение атрибутов файла с помощью API-функции SetFileAttributes Const READONLY = &H1 Const HIDDEN = &H2 Const SYSTEM = &H4 Const ARCHIVE = &H20 Const NORMAL = &H80 Private Declare Function SetFileAttributes Lib "kernel32.dll" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long Private Sub Command1_Click() Dim attr As Long Dim rval As Long attr = READONLY + SYSTEM + HIDDEN rval = SetFileAttributes("D:\garbage\top_spylog.Txt", attr) End End Sub наверх Получение сведений о файле В данном примере вы можете узнать о том, как можно получить сведения о файле с использованием FileSystemObject. Для использования этого примера установите ссылку на Microsoft Scripting Runtime через меню Project | References. И не забудьте расположить на форме элемент ListBox! В этом примере вы можете узнать: Имя файла,
Полный путь, Дата создания, Дата модификации,
Дата последнего доступа, Размер файла Удаление файла в корзину Если у вас в опциях корзины Windows не стоит галочка "Уничтожать файлы сразу после удаления", то данный пример удалит созданные вами файлы в корзину. Private Type SHFILEOPSTRUCT hwnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Long hNameMappings As Long lpszProgressTitle As Long End Type Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long Private Const FO_DELETE = &H3 Private Const FOF_ALLOWUNDO = &H40 Private Const FOF_NOCONFIRMATION = &H10 Private Const FOF_SILENT = &H4 Sub SendFileToRecycleBin(FileName As String, Optional Confirm As Boolean = True, Optional Silent As Boolean = False) Dim FileOp As SHFILEOPSTRUCT With FileOp .wFunc = FO_DELETE .pFrom = FileName .fFlags = FOF_ALLOWUNDO If Not Confirm Then .fFlags = .fFlags + FOF_NOCONFIRMATION If Silent Then .fFlags = .fFlags + FOF_SILENT End With SHFileOperation FileOp End Sub Private Sub Command1_Click() SendFileToRecycleBin "C:\1.txt", False SendFileToRecycleBin "C:\11.txt", True End Sub Private Sub Form_Load() Dim FN As Integer FN = FreeFile Dim FName As String FName = "C:\1.txt" Open FName For Output As #FN Print #FN, "" Close #FN FName = "C:\11.txt" Open FName For Output As #FN Print #FN, "" Close #FN End Sub наверх Использование функции SHGetFileInfo Данный пример позволяет из пути к файлу узнать имя файла, а также описание типа зарегистрированного файла, и еще 3 параметра, смысл которых я не уловил. Вам и карты в руки, если вы узанаете смысл получаемых параметров, напишите. Const MAX_PATH = 260 Private Type SHFILEINFO hIcon As Long ' out: icon iIcon As Long ' out: icon index dwAttributes As Long ' out: SFGAO_ flags szDisplayName As String * MAX_PATH ' out: display name (or path) szTypeName As String * 80 ' out: type name End Type Private Enum SHGFI_FLAGS SHGFI_LARGEICON = &H0 ' sfi.hIcon is large icon SHGFI_SMALLICON = &H1 ' sfi.hIcon is small icon SHGFI_OPENICON = &H2 ' sfi.hIcon is open icon SHGFI_SHELLICONSIZE = &H4 ' sfi.hIcon is shell size (not system size), rtns BOOL SHGFI_PIDL = &H8 ' pszPath is pidl, rtns BOOL SHGFI_USEFILEATTRIBUTES = &H10 ' pretend pszPath exists, rtns BOOL SHGFI_ICON = &H100 ' fills sfi.hIcon, rtns BOOL, use DestroyIcon SHGFI_DISPLAYNAME = &H200 ' isf.szDisplayName is filled, rtns BOOL SHGFI_TYPENAME = &H400 ' isf.szTypeName is filled, rtns BOOL SHGFI_ATTRIBUTES = &H800 ' rtns IShellFolder::GetAttributesOf SFGAO_* flags SHGFI_ICONLOCATION = &H1000 ' fills sfi.szDisplayName with filename containing the icon, rtns BOOL SHGFI_EXETYPE = &H2000 ' rtns two ASCII chars of exe type SHGFI_SYSICONINDEX = &H4000 ' sfi.iIcon is sys il icon index, rtns hImagelist SHGFI_LINKOVERLAY = &H8000 ' add shortcut overlay to sfi.hIcon SHGFI_SELECTED = &H10000 ' sfi.hIcon is selected icon End Enum Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long Private Const BASIC_SHGFI_FLAGS = SHGFI_TYPENAME Or SHGFI_SHELLICONSIZE Or SHGFI_SYSICONINDEX Or SHGFI_DISPLAYNAME Or SHGFI_EXETYPE Or SHGFI_ICON Private Sub Command1_Click() Dim hFile As Long, nRet As Long Dim nSize As Long, cCount As Long Dim sTmp As String Dim shfi As SHFILEINFO sPath = "C:\AUTOEXEC.BAT" nRet = SHGetFileInfo(sPath, 0&, shfi, Len(shfi), BASIC_SHGFI_FLAGS) MsgBox shfi.dwAttributes MsgBox shfi.hIcon MsgBox shfi.iIcon MsgBox shfi.szDisplayName MsgBox shfi.szTypeName End Sub наверх Найти TEMP-директорию и создать новый .tmp-файл Как найти временную папку Windows используя (1) функцию ENVIRON или (2) используя Win32 API GetTempPath. Эта программа покажет, как сгенерировать новое временное имя, используя GetTempFileName. Добавьте на форму CommandButton и Label Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Private Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long Private Sub Command1_Click() Dim ls_TempPath As String Dim ll_Buffer As Long Dim ls_TempFileName As String ll_Buffer = 255 ls_TempPath = Space(255) If GetTempPath(ll_Buffer, ls_TempPath) = 0 Then MsgBox "API Failed!" Else ls_TempPath = Left(ls_TempPath, ll_Buffer) End If ls_TempFileName = Space(255) ll_Buffer = GetTempFileName(ls_TempPath, "xxx", 0, ls_TempFileName) 'xxx is a three letter prefix - can be anything you want. '3rd parameter (0 above) is uUnique...If uUnique is nonzero, the function appends the hexadecimal string to lpPrefixString to form the temporary filename. In this case, the function does not create the specified file, and does not test whether the filename is unique. 'If uUnique is zero, the function uses a hexadecimal string derived from the current system time. In this case, the function uses different values until it finds a unique filename, and then it creates the file in the lpPathName directory. If ll_Buffer = 0 Then MsgBox "API Failed!" Else ls_TempFileName = Left(ls_TempFileName, ll_Buffer) MsgBox "Created temporary file :" & ls_TempFileName End If End Sub Private Sub Form_Load() Dim ls_TempPath As String Dim ll_Buffer As Long Dim li_Length As Integer ll_Buffer = 255 ls_TempPath = Space(255) li_Length = GetTempPath(ll_Buffer, ls_TempPath) If li_Length = 0 Then MsgBox "API Failed!" Else ls_TempPath = Left(ls_TempPath, li_Length) Label1 = "Temporary Directory is " & ls_TempPath End If 'Or Using environment variables. 'To see your environment variables go to the system icon in control panel and click on the environment tab. You can get the value of these variables from VB using the command ENVIRON. e.g. 'Label1 = Environ("TEMP") 'Label1 = Environ("TMP") End Sub наверх Рекурсивный перебор все подпапок в указанной папке Данный пример позволяет "перебрать" все подпапки одной определенной директории. К примеру, вам необходимо в каждой подпапке подсчитать количество файлов, или выполнить стандартную процедуру над каждым файлом, да мало ли какое применение. Данный код я использую в своей программе FPkiller. Разместите на форме элементы FileListBox, DirListBox, DriveListBox а также элемент CommandButton. Затем вставьте следующий код, и ваша программа
заработает. Все необходимые, на мой взгляд,
пояснения даны в примере. Как вы понимаете, в
данном примере основной процедурой является
процедура ScanFolders(). Ваш код для обработки
каждой папки должен помещаться между /// и \\\. Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автор: Шатрыкин Иван. Соавтор: Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: Роман Ответ ожидается по этому адресу В VB пытаюсь сделать текстовый редактор. Посоветуйте, как сделать, чтобы по нажатии на кнопку BOLD(жирный), жирным становился не весь текст, а только выделенный. Я написал так: Case "Bold" With txtBox If .FontBold = True Then .FontBold = False Else .FontBold = True End If End With Автор вопроса: Тимур Ответ ожидается по этому адресу В Excel написал программу, реагирующую на ияменение данных на странице. Но эта программа сама меняет данные на той же станице и тоже на это реагирует. В реяультате программа выяывает сама себя и яацикливается. Знает ли кто-нибудь как отключить реакцию на событие WorkSheet_Change на время выполнения процедуры. Сейчас я выкручиваюсь так: в начале прогаммы ставлю флажок, что программа в стадии выполнения и по нему делаю Exit. Автор вопроса: Саша Ответ ожидается по этому адресу Как проиграть телефонный раяговор черея явуковую карту? Автор вопроса: Саша Ответ ожидается по этому адресу Как при помощи VB и API переделать BMP в GIF (Раяумеется не просто поменять раширение)? Автор вопроса: Саша Ответ ожидается по этому адресу На каких платформах работают программы написанные на VB6? Автор вопроса: Саша Ответ ожидается по этому адресу Как перекодировать ия какой либо кодировки в другую при помощи VB. (Только не Win в Дос) Автор вопроса: Саша Ответ ожидается по этому адресу Как исправить текст находящийся вне формы ? Автор вопроса: Саша Ответ ожидается по этому адресу Можно ли удалить файл так что бы его нельяя было востановить даже unerase или undelete. Автор вопроса: Саша Ответ ожидается по этому адресу Можно ли востановить удаленные файлы при помощи VB (удаленные не яначит в коряине). Автор вопроса: hotmail Ответ ожидается по этому адресу Люди! Каким образом средствами VBA for EXEL97 получить список файлов в указанной папке, причем с определенный символом в начале имени и указанным расширением? И как после этого оргпнизовать последовательное открытие каждого из них? (все файлы .xls) Автор вопроса: CaHeK Ответ ожидается по этому адресу Как мне «воткнуть» файл в программу (музыкальный) чтобы от туда же его использовать…или воспроизводить его в нужный момент, но путь целиком не указывать (на случай если папку с прогой переместят)… + как заставить объект типа Picture по нажатии кнопки влево, двигаться влево, и т.д…прошу написать поподробнее…+как при определенном условии создавать объект (Picture), а при ненадобности его удалять (советы с visible не присылать, таких объектов за раз может быть много, а код компактен должен быть)…+как откомпилять EXEшник, чтоб он потом не требовал библиотек (VB6) Автор вопроса: DDT Ответ ожидается по этому адресу Народ, отзовитесь, кто работал гокда-нибудь с диаграммой Excel. Мне нужно внести в нее исходные данные для построения графика, но не вручную, а программно. Но какие свойства и методы надо использовать я не знаю. Автор вопроса: Николай Ответ ожидается по этому адресу Работа с базой данных. Расклад такой: Таблица - "А" Поля - "Дата Продажи" "Наименование Товара" "Стоимость" Как должен выглядеть SQL запрос чтобы вывести данные о количестве записей из поля"Наименование Товара",общей суммы из поля"Стоимость" на конкретную дату"Дата Продажи" из таблицы"А". Причём должна быть возможность делать выборку на дату задаваемую пользователем,в отдельном Text.Box. Пример: 17.03.02 было проданно 15 наименований товара на сумму 1500 рублей. "VB 6.0" ,база данных "ACCESS" , контрол "DATA" Автор вопроса: ComputerDestroyer Ответ ожидается по этому адресу Кто знает, как програмно создать кнопку али др. элемент упраления ? Автор вопроса: Luka Ответ ожидается по этому адресу Как добавить свою кнопку в любом окне windows, рядом с кнопками: Свернуть, Развернуть, Закрыть? Ответы: Вопрос: как сделать что бы в text1.text происходил поиск слов которые ты написал и изменялся, например цвет, размер итд в нём же самом для создания HTML редактора Ответ: Автор ответа: Roman 'Devil' Yuakovlev Можно... только нужно юзать richtextbox Вопрос: Когда яапускаешь программу под Dos. Открывается окно Dos и пишутся раяличные надписи (у большенства программ) Как сделать так что бы эти яаписи были на TextBox. Ответ: Автор ответа: P@Ssword Пример взял из API-Guide, инструкция прилагается. Пользуйся! 'Redirects output from console program to textbox. 'Requires two textboxes and one command button. 'Set MultiLine property of Text2 to true. ' 'Original bcx version of this program was made by ' dl 'VB port was made by Jernej Simoncic 'Visit Jernejs site at http://www2.arnes.si/~sopjsimo/ ' 'Note: don't run plain DOS programs with this example 'under Windows 95,98 and ME, as the program freezes when 'execution of program is finnished. Option Explicit Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long Private Declare Sub GetStartupInfo Lib "kernel32" Alias "GetStartupInfoA" (lpStartupInfo As STARTUPINFO) Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadId As Long End Type Private Type STARTUPINFO cb As Long lpReserved As Long lpDesktop As Long lpTitle As Long dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Byte hStdInput As Long hStdOutput As Long hStdError As Long End Type Private Type OVERLAPPED ternal As Long ternalHigh As Long offset As Long OffsetHigh As Long hEvent As Long End Type Private Const STARTF_USESHOWWINDOW = &H1 Private Const STARTF_USESTDHANDLES = &H100 Private Const SW_HIDE = 0 Private Const EM_SETSEL = &HB1 Private Const EM_REPLACESEL = &HC2 Private Sub Command1_Click() Command1.Enabled = False Redirect Text1.Text, Text2 Command1.Enabled = True End Sub Private Sub Form_Load() Text1.Text = "ping" End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If Command1.Enabled = False Then Cancel = True End Sub Sub Redirect(cmdLine As String, objTarget As Object) Dim i%, t$ Dim pa As SECURITY_ATTRIBUTES Dim pra As SECURITY_ATTRIBUTES Dim tra As SECURITY_ATTRIBUTES Dim pi As PROCESS_INFORMATION Dim sui As STARTUPINFO Dim hRead As Long Dim hWrite As Long Dim bRead As Long Dim lpBuffer(1024) As Byte pa.nLength = Len(pa) pa.lpSecurityDescriptor = 0 pa.bInheritHandle = True pra.nLength = Len(pra) tra.nLength = Len(tra) If CreatePipe(hRead, hWrite, pa, 0) <> 0 Then sui.cb = Len(sui) GetStartupInfo sui sui.hStdOutput = hWrite sui.hStdError = hWrite sui.dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES sui.wShowWindow = SW_HIDE If CreateProcess(vbNullString, cmdLine, pra, tra, True, 0, Null, vbNullString, sui, pi) <> 0 Then SetWindowText objTarget.hwnd, "" Do Erase lpBuffer() If ReadFile(hRead, lpBuffer(0), 1023, bRead, ByVal 0&) Then SendMessage objTarget.hwnd, EM_SETSEL, -1, 0 SendMessage objTarget.hwnd, EM_REPLACESEL, False, lpBuffer(0) DoEvents Else Exit Do End If CloseHandle hWrite Loop CloseHandle hRead End If End If End Sub Вопрос: В Excel 2000 при копировании листа Sheets("Name").Copy After:="NameA" где-то на 26-31-й копии возникает ошибка #1004 и лист не копируется. Что это за глюк? Как с ним бороться? Пока обхожу его так: в обработчике ошибки всавляю новый лист, переношу на него все данные, задаю нужные параметры печати. Но это требует НА ПОРЯДОК БОЛЬШЕ ВРЕМЕНИ! Ответ: Автор ответа: zhebelev Используй следующий метод: не Sheets("Name").Copy, а ActiveSheet.Copy str1 = ActiveSheet.Name + "_svod" ActiveSheet.Name = "proverka" ActiveSheet.Copy before:=Workbooks(WBN).Worksheets("START") ActiveSheet.Copy before:=Worksheets(Worksheets.Count) Вопрос: Как сделать, чтобы программа добавлялась в автозагрузку(не через меню "Автозагрузка", а в реестре)? Ответ: Автор ответа: Иван Для этого необходимо создать в разделе реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run строковый параметр. В значении параметра установить путь программы. В модуле пишешь: Option Explicit Public Const REG_SZ As Long = 1 Public Const REG_DWORD As Long = 4 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_USERS = &H80000003 Public Const ERROR_NONE = 0 Public Const ERROR_BADDB = 1 Public Const ERROR_BADKEY = 2 Public Const ERROR_CANTOPEN = 3 Public Const ERROR_CANTREAD = 4 Public Const ERROR_CANTWRITE = 5 Public Const ERROR_OUTOFMEMORY = 6 Public Const ERROR_INVALID_PARAMETER = 7 Public Const ERROR_ACCESS_DENIED = 8 Public Const ERROR_INVALID_PARAMETERS = 87 Public Const ERROR_NO_MORE_ITEMS = 259 Public Const KEY_ALL_ACCESS = &H3F Public Const REG_OPTION_NON_VOLATILE = 0 Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Declare Function RegCreateKeyEx Lib "advapi32.dll" 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, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long Declare Function RegOpenKeyEx Lib "advapi32.dll" 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 RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) 'Создание нового ключа (подключа) Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String) Dim hNewKey As Long Dim lRetVal As Long lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal) RegCloseKey (hNewKey) End Function 'Запись данных в ключ Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long) Dim lRetVal As Long Dim hKey As Long lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey) lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting) RegCloseKey (hKey) End Function Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long Dim lValue As Long Dim sValue As String Select Case lType Case REG_SZ sValue = vValue SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue)) Case REG_DWORD lValue = vValue SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4) End Select End Function 'Возвращает значения записанные в ключе Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String) Dim lRetVal As Long Dim hKey As Long Dim vValue As Variant lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey) lRetVal = QueryValueEx(hKey, sValueName, vValue) QueryValue = vValue RegCloseKey (hKey) End Function Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long Dim a As Integer Dim cch As Long Dim lrc As Long Dim lType As Long Dim lValue As Long Dim sValue As String On Error GoTo QueryValueExError 'Определение размера и типа считываемых данных lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch) If lrc <> ERROR_NONE Then a = 0 Select Case lType 'Для символьных Case REG_SZ: sValue = String(cch, 0) lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch) If lrc = ERROR_NONE Then vValue = Left$(sValue, cch) Else vValue = Empty End If 'Для числовых Case REG_DWORD: lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch) If lrc = ERROR_NONE Then vValue = lValue 'Для остальных не поддержанных типов данных Case Else lrc = -1 End Select QueryValueExExit: QueryValueEx = lrc Exit Function QueryValueExError: Resume QueryValueExExit End Function 'Удаление значений ключа Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String) Dim lRetVal As Long Dim hKey As Long lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey) lRetVal = RegDeleteValue(hKey, sValueName) RegCloseKey (hKey) End Function 'Удаление ключа Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String) Dim lRetVal As Long lRetVal = RegDeleteKey(lPredefinedKey, sKeyName) End Function В примере написан полный код работы с реестром, если необходимо только записать данные, то лишнее можно убрать. Применение: Private Sub Command1_Click() Dim path As String path = "Software\Microsoft\Windows\CurrentVersion\Run" CreateNewKey HKEY_LOCAL_MACHINE, path SetKeyValue HKEY_LOCAL_MACHINE, path, "Назавание программы", "здесь пишешь полный путь программы", REG_SZ End Sub Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
||||||||||||||||||||
Выпуск подготовили: |
Сурменок Павел |