Страница: 1 |
Страница: 1 |
Вопрос: SHGetValue
Добавлено: 30.09.04 17:26
Автор вопроса: dNW
Подскажите объявление и использование этой функций
API-GUIDE на эта тему молчит..., но я знаю, что эта функция есть
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #1
Добавлено: 30.09.04 22:38
ByVal hkey As Long, _
ByVal pszSubKey As String, _
ByVal pszValue As String, _
ByRef pdwType As Long, _
pvData As Any, _
ByRef pcbData As Long) As Long
==================================================
SHGetValue
Retrieves a registry value.
DWORD SHGetValue(
HKEY hkey,
LPCTSTR pszSubKey,
LPCTSTR pszValue,
LPDWORD pdwType,
LPVOID pvData,
LPDWORD pcbData
Parameters
hkey
Handle to the currently open key, or any of the following predefined values: HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_DYN_DATA (Windows 95 only)
HKEY_LOCAL_MACHINE
HKEY_PERFORMANCE_DATA (Windows NT only)
HKEY_USERS
pszSubKey
Address of a null-terminated string that specifies the name of the subkey from which to retrieve the value.
pszValue
Address of the value.
pdwType
Type of value. For more information, see Registry Data Types.
pvData
Address of the destination data buffer.
pcbData
Size of the destination data buffer.
Return Values
Returns ERROR_SUCCESS if successful, or a nonzero error code defined in Winerror.h otherwise. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to retrieve a generic description of the error.
Remarks
Note If your application must set/retrieve a series of values in the same key, it is better to open the key once and set/retrieve the values with the regular Microsoft® Win32® registry functions rather than use this function repeatedly.
Requirements
Version 4.71 and later of Shlwapi.dll
Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later).
Windows 95/98/Me: Requires Windows 98 (or Windows 95 with Internet Explorer 4.0 or later).
Header: Declared in Shlwapi.h.
Import Library: Shlwapi.lib.
Номер ответа: 2
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #2
Добавлено: 01.10.04 07:14
Это хорошо, а как этим пользоваться?
На VB пожалуйста! СИ я не знаю
Номер ответа: 3
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #3
Добавлено: 01.10.04 09:29
Ну всё же расписано по пунктам, что и как:
Private Declare Function SHGetValue Lib "shlwapi.dll" Alias "SHGetValueA" ( _
ByVal hkey As Long, _
ByVal pszSubKey As String, _
ByVal pszValue As String, _
ByRef pdwType As Long, _
pvData As Any, _
ByRef pcbData As Long) As Long
Const HKEY_CLASSES_ROOT As Long = &H80000000
Const REG_SZ As Long = 1
Dim pcbData As Long
Dim pvData As String * 100
Dim pdwType As Long
Dim pszValue As String
Dim pszSubKey As String
Dim hkey As Long
Private Sub Form_Load()
hkey = HKEY_CLASSES_ROOT
pszSubKey = ".wmv"
pszValue = "Content Type"
pdwType = REG_SZ
SHGetValue hkey, ByVal pszSubKey, ByVal pszValue, pdwType, ByVal pvData, pcbData
SHGetValue hkey, ByVal pszSubKey, ByVal pszValue, pdwType, ByVal pvData, pcbData
MsgBox pvData, vbInformation, "HKEY_CLASSES_ROOT\" & pszSubKey & "\" & pszValue
End Sub
Номер ответа: 4
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #4
Добавлено: 01.10.04 14:45
Спасибо
Номер ответа: 5
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #5
Добавлено: 01.10.04 15:24
Только смотри, то что два раза подряд вызывается SHGetValue - это не опечатка. Так и должно быть. Первый вызов получает длину значения, второй уже само значение.
Номер ответа: 6
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #6
Добавлено: 01.10.04 18:27
Я уже разобрался
Я использую конструкцию:
Dim t As String: t=String$(100," "
SHGetValue HKEY_CLASSES_ROOT, ".wmv", "Content Type", REG_SZ, ByVal t, Len(t)
И два вызова не нужны
Номер ответа: 7
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #7
Добавлено: 01.10.04 18:29
А ты случайно не знаешь как сохранить изображение, зная его DC. Впихивание на форму с последующим SavePicture не предлогай...
Номер ответа: 8
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #8
Добавлено: 01.10.04 20:20
Ну если не подходит форма, впихни в PictureBox
А вообще напрямую, как я понимаю, можно создать файл так: описать для него BITMAPFILEHEADER, BITMAPINFOHEADER, BITMAPINFO на основе данных твоего DC(может ещё какие структуры) поместить их в начале массива байт и сделать CreateFile для этого массива. Сам не пробовал, но думаю, надо рыть в эту сторону.