Страница: 1 |
|
Вопрос: Вопросы, вопросы, вопросы...
|
Добавлено: 25.01.06 16:48
|
|
Автор вопроса: Tamplier | ICQ: 298742928
|
Недавно бил вопрос: как определить цветовую схему? Но он был неправильно сформулирован. Как определить, какой стиль сейчас включен? Допустим, классический или стандартный синий, или серебрянный?
Как определить часовой пояс, который сейчас выбран? Пробова через GetTimezoneInfo, но там ничего не понятно.
Можно ли по времени создания файла определить отношение версий? Допустим, мне надо программным путем выяснить версию comctl32.dll, как определить версию продукта (не файла!!!) я не нашел, но мне пришла в голову идея: а что если сравнить время создания библиотеки? Если оно меньше определенного, то соответственно считать версию меньше... Можно так? И какие еще варианты?
Вопрос по смене цвета меню все еще остается в силе. Кто знает Shark'a - просьба сообщить, потому что у он писал библиотеку Form_Action, в которой есть эта функция, а вся библиотека мне не нужна, только эта функция.
Ответить
|
Номер ответа: 1 Автор ответа: GSerg
Вопросов: 0 Ответов: 1876
|
Профиль | | #1
|
Добавлено: 25.01.06 17:32
|
Как определить, какой стиль сейчас включен? Допустим, классический или стандартный синий, или серебрянный?
Их гораздо больше - каждый будешь определять?
IsAppThemed() посмотри, единственное что могу сказать.
Как определить часовой пояс, который сейчас выбран? Пробова через GetTimezoneInfo, но там ничего не понятно.
Что именно непонятно? Простейшая функция.
Option Explicit
Private Declare Function GetTimeZoneInformation Lib "kernel32.dll" ( ByRef lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Type TIME_ZONE_INFORMATION
Bias As Long
StandardName(32 * 2) As Byte
StandardDate As SYSTEMTIME
StandardBias As Long
  aylightName(32 * 2) As Byte
  aylightDate As SYSTEMTIME
  aylightBias As Long
End Type
Private Sub Form_Load()
Dim t As TIME_ZONE_INFORMATION
GetTimeZoneInformation t
MsgBox StrConv(StrConv(t.StandardName, vbUnicode), vbFromUnicode)
End Sub
Если оно меньше определенного, то соответственно считать версию меньше... Можно так? И какие еще варианты?
Можно долго постигать всю отстойность этого способа, но так и не постичь - уж слишком она велика.
Ответить
|
Номер ответа: 6 Автор ответа: Tamplier
ICQ: 298742928
Вопросов: 58 Ответов: 340
|
Профиль | | #6
|
Добавлено: 27.01.06 15:51
|
Shark, возожно, есть еще один такой. Эти библиотеки я взял с этого сайта. DllCollection.
Многие компиляторы зашивают в exe (иногда в dll) стандартную структуру VERSIONINFO...
Втом-то и вся фигня, что объявить ссылку на comctl32.dll я не могу!
Можно долго постигать всю отстойность этого способа, но так и не постичь - уж слишком она велика.
Другие варианты?
Про версию библиотеки я не
совсем понял, версию чего (как не файлы) ты хочешь получить с этого
файла? Версию продукта в котором библиотека является составной?
Если на comctl32.dll, как и на некоторых других библиотеках сделать правый клик, в свойствах во вкладке "Версия" есть два пункта, кроме прочих: "версия файла" и "версия продукта". Меня итересует версия продукта. Версию файла определить - не проблема.
Что именно непонятно? Простейшая функция.
непонятно, откуда, собственно брать информацию о том, сколько часов и куда данный часовой пояс от Гринвича
Ответить
|
Номер ответа: 7 Автор ответа: GSerg
Вопросов: 0 Ответов: 1876
|
Профиль | | #7
|
Добавлено: 27.01.06 16:51
|
Втом-то и вся фигня, что объявить ссылку на comctl32.dll я не могу!
Зачем она тебе объяснил бы ещё...
Другие варианты?
Читать мануал чаще. Во избежание вопросов, сверхподробно освещённых в нём.
Option Explicit
Private Declare Function GetFileVersionInfo Lib "version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwHandle As Long, ByVal dwLen As Long, ByRef lpData As Any) As Long
Private Declare Function GetFileVersionInfoSize Lib "version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, ByRef lpdwHandle As Long) As Long
Private Declare Function VerQueryValue Lib "version.dll" Alias "VerQueryValueA" (ByRef pBlock As Any, ByVal lpSubBlock As String, ByRef lplpBuffer As Long, ByRef puLen As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Type VS_FIXEDFILEINFO
dwSignature As Long
dwStrucVersion As Long ' e.g. 0x00000042 = "0.42"
dwFileVersionMS As Long ' e.g. 0x00030075 = "3.75"
dwFileVersionLS As Long ' e.g. 0x00000031 = "0.31"
dwProductVersionMS As Long ' e.g. 0x00030010 = "3.10"
dwProductVersionLS As Long ' e.g. 0x00000031 = "0.31"
dwFileFlagsMask As Long ' = 0x3F for version "0.42"
dwFileFlags As Long ' e.g. VFF_DEBUG Or VFF_PRERELEASE
dwFileOS As Long ' e.g. VOS_DOS_WINDOWS16
dwFileType As Long ' e.g. VFT_DRIVER
dwFileSubtype As Long ' e.g. VFT2_DRV_KEYBOARD
dwFileDateMS As Long ' e.g. 0
dwFileDateLS As Long ' e.g. 0
End Type
Private Sub Form_Load()
Dim b() As Byte, t As Long, s As Long, v As VS_FIXEDFILEINFO
ReDim b(1 To GetFileVersionInfoSize("comctl32.dll", 0))
GetFileVersionInfo "comctl32.dll", 0, UBound(b) - LBound(b) + 1, b(LBound(b))
VerQueryValue b(LBound(b)), "\", t, s
CopyMemory v, ByVal t, Len(v)
MsgBox Hex$(v.dwFileVersionMS)
End Sub
непонятно, откуда, собственно брать информацию о том, сколько часов и куда данный часовой пояс от Гринвича
Как правило, после чтения мануалов такие вопросы пропадают.
Первый член структуры, называемый bias, содержит разницу от UTC в минутах. Для меня это минус 660.
Ответить
|
Страница: 1 |
Поиск по форуму