Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/47: Рейтинг темы: голосов - 47, средняя оценка - 4.98
NK
0 / 0 / 0
Регистрация: 04.02.2008
Сообщений: 13
1

Как сменить системные параметры: десятичный разделитель и разделитель в дате?

26.02.2008, 16:52. Показов 8847. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сменить системные параметры: 'десятичный разделитель' и 'разделитель в дате'?

Подозреваю, что с помощью API-функций.
Хотелось бы при открытии приложения MS Access сменить '.' на ',' и '/' в дате на '.'.
Соответственно при выходе из приложения - возвратить те параметры, какие были..
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2008, 16:52
Ответы с готовыми решениями:

Embarcadero. Как настроить десятичный разделитель
Программа стартует, инициализируются переменные, но при запуске расчета вылетает из-за division by...

Десятичный разделитель
Командой insert вставляю строку в таблицу, одно из полей которой имеет тип Double Precision. Если в...

Десятичный разделитель
Скажите, у андроида десятичный разделитель всегда точка? Если нет, то как получить его значение?...

Заменить десятичный разделитель
вытаскиваю значения поля из 1с, оно может быть дробное и в качестве десятичного разделителя...

2
msd
27.02.2008, 00:01 2
Данные о regional setting'ах лежат в win.ini (файл в каталоге Windows). При запуске винды его читают и применяют описанные там установки. Если ты меняешь win.ini по ходу работы, необходимо, чтобы винды по новой прочитали win.ini. Для этого понадобится API'шный SendMessage.

Описание для SendMessage:
Visual Basic
1
2
3
4
5
6
7
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
Const WM_WININICHANGE = &H1A
Const HWND_BROADCAST = &HFFFF
Обычными файловыми операциями ищешь в win.ini (раздел [intl]) строки:

sDate=.
sDecimal=.

Меняешь точки на что надобно, потом запускаешь:
Visual Basic
1
r = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal 'windows')
Под Win9х работает точно! На других - не проверял...
NK
0 / 0 / 0
Регистрация: 04.02.2008
Сообщений: 13
27.02.2008, 17:40  [ТС] 3
Так, с Win9x все понятно, спасибо.
Но у меня же WinNT или Win2000.
Получается, надо править реестр (а не win.ini).
Очень приблизительно удалось найти следующее (смена значения параметра в реестре):
(См. код ниже (ничего не оттестировано толком!!!), а пока проблема такая: почему-то 'хорошее' значение не заносится, в реестре прописывается нечто вроде ¤— или ,[« и прочее. Тут в чем может быть дело? Уже нет сил...)

RegCreateKeyEx Создает раздел, а если раздел существует, то просто открывает его. RegSetValueEx Сохраняет данные в параметре реестра.
RegCloseKey Освобождает манипулятор раздела

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
‘основные узлы реестра 
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_CURRENT_CONFIG = &H80000005 
Public Const HKEY_DYN_DATA = &H80000006 
 
Public Const KEY_ALL_ACCESS = &H3F 
 
'типы
'Unicode nul terminated string 
Public Const REG_SZ = (1) 
 
'структурка 
Type SECURITY_ATTRIBUTES 
nLength As Long 
lpSecurityDescriptor As Long 
bInheritHandle As Boolean 
End Type 
 
 
'API-функции 
Public Declare Function RegCloseKey Lib 'advapi32' (ByVal hKey As Long) As Long 
 
Public 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, _ 
lpSecurityAttributes As SECURITY_ATTRIBUTES, _ 
phkResult As Long, _ 
lpdwDisposition As Long) _ 
As Long 
 
Public 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 
 
 
 
 
Function SetRegValue(HKey As Long, ByVal RazdelName As String, ByVal ParametrName As String, ByVal ParametrValue As String) As Boolean
On Error GoTo ErrorRoutineErr
    
Dim SecAttr As SECURITY_ATTRIBUTES  ' security settings of the key
Dim HregKey As Long                 ' receives handle to the newly created or opened registry key
Dim NewOrUsed As Long            ' receives 1 if new key was created or 2 if an existing key was opened
Dim RetVal As Long                     ' return value
 
RetVal = RegCreateKeyEx(HKey, RazdelName, 0, '', 0, KEY_ALL_ACCESS, SecAttr, HregKey, NewOrUsed)
 
RetVal = RegSetValueEx(HregKey, ParametrName, 0, REG_SZ, ParametrValue, CLng(Len(ParametrValue) + 1))
 
RetVal = RegCloseKey(HregKey)
 
Exit Function
 
 
ErrorRoutineErr::
    MsgBox 'Ошибка: <' & Err.number & '> - ' & Err.Description, vbExclamation + vbOKOnly, 'Создание параметра'
    SetRegValue = False
 
End Function
 
'вызов такой:
Dim HKey As Long
Dim RazdelName As String
Dim ParametrName As String
Dim ParametrValue As String
 
HKey = HKEY_CURRENT_USER
RazdelName = 'Control PanelInternational'
ParametrName = 'sDate'
ParametrValue = '/' & vbNullChar
Call SetRegValue(HKey, RazdelName, ParametrName, ParametrValue)
0
27.02.2008, 17:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2008, 17:40
Помогаю со студенческими работами здесь

Десятичный разделитель в AutoCAD
Добрый день. Возникла проблема при передаче десятичного разделителя в AutoCAD на разных...

Десятичный системный разделитель
Здравствуйте товарищи (господа) специалисты! Прошу помощи в решении вопроса любителю. Есть...

Lexical_cast и десятичный разделитель
Можно ли как то задать десятичный разделитель что бы кастовалось число записанное с разделителем...

Десятичный разделитель и INI-файлы
- Здравствуйте завсегдатаи. С прошедшими и наступающими Вас праздниками! Помогите пожалуйста ...

Sql loader и десятичный разделитель
Доброго времени суток. С oracale-ом я начинающий и хотел бы услышать совета более опытных людей....

Удалить десятичный разделитель из чила
Ребят,как сделать если число &quot;3,&quot; и после разделителя ничего нет,то удалить этот разделитель???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru