Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
30.10.2015, 17:56

Кириллица на нелокализованной ОС

30.10.2015, 17:56. Показов 4122. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
У меня только один вопрос (Пока…).
Скажу сразу, языка Visual Basic я не знаю.
Просто нарыл код, немного поправил как хочется мне и всё работает. Мне всё нравится(хотя конечно осознаю что есть много и других интерестностей и хорошестей) но пока достаточно.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dim fff                                               
fff = MsgBox("Показать следующее сообщение?",4,"Показать?") 
If fff = 6 Then                                    
on error resume next
Set S = CreateObject ("Wscript.shell")
Set FSO = CreateObject ("Scripting.FileSystemObject")
Set IE = CreateObject ("InternetExplorer.Application")
IE.Visible=1
IE.Navigate "http://www.example.com/"
While.Ie.Busy
wscript.sleep 200
wend           
 
else                                                               
 
Msgbox "ЧООО???"                                                                  
 
end if
Но есть одна проблемка. Данное диалоговое окно содержит кириллицу. А у меня Location, регион и другие настройки компа не Россия. И не могу менять.
Вот в чём вопрос, можно ли записать в самом скрипте, что бы выводило русские буквы. Не зависимо от настроек ОС?
Если сложно, то если не трудно. Напишите этот код. И куда мне его вставить.
Буду очень благодарен.
P.S. А и ещё. Как я понимаю может открыть только с помощью IE Да?
0
Лучшие ответы (1)
30.10.2015, 17:56
Ответы с готовыми решениями:

Подсчитать количество вхождений буквы (кириллица) в строку (кириллица)
Суть такая: по требованию программы ввести строку символов (обыкновенный текст, кириллица(!!!)) и посчитать количество вхождений, если...

Кириллица в БД
Привет коллеги ! С НГ по старому стилю ! Есть БД созданная в VS2017 MYSQL Запись и отображение идет без проблем - но только при условии...

Кириллица
Добрый день! Что сделать, что б кириллицу можно было вводить?

20
7140
30.10.2015, 18:02
Цитата Сообщение от ytrewq123 Посмотреть сообщение
Данное диалоговое окно содержит кириллицу. А у меня Location, регион и другие настройки компа не Россия.
Нужно компилировать с поддержкой юникода.
Вложения
Тип файла: zip Unicode.zip (1.2 Кб, 16 просмотров)
1
ytrewq123  [ТС]
0
30.10.2015, 18:08
Спасибо. Просто смотрю здесь. VBA и VB есть.
То есть я просто запускаю это. Все настройки остаются как и были. Это важно. Но это окно будет понимать кириллицу. И если будут, испанские символы то понимать их, если латышские то их и если по-русски то их.
0
7140
30.10.2015, 18:17
Будут поддерживаться все языки мира в т. ч. китайский и арабский.
Вложения
Тип файла: zip Unicode_2.zip (1.3 Кб, 15 просмотров)
0
 Аватар для Dragokas
18035
30.10.2015, 19:05
Лучший ответ Сообщение было отмечено Pro_grammer как решение

Решение

Замените msgbox на юникодный (msgboxW).

Visual Basic
1
2
3
4
5
Private Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxW" (ByVal hwnd As Long, ByVal lpText As Long, ByVal lpCaption As Long, ByVal uType As Long) As Long
 
Public Function MsgBoxW(Prompt As String, Optional Buttons As VbMsgBoxStyle, Optional Title As String = " ") As VbMsgBoxResult
    MsgBoxW = MessageBox(frmMain.hwnd, StrPtr(Prompt), StrPtr(Title), ByVal Buttons)
End Function
2
ytrewq123  [ТС]
0
31.10.2015, 18:20
Спасибо Всем.
Извините. Действительно не знаю ВБ. А куда в моём коде это вставить? C этим MsgBoxW. Просто я когда искал, были подобные коды, но к сожалению они не работали. Ничего не открывалось. И я не знал в чём причина.

Добавлено через 19 часов 11 минут
Ну пожалуйста скажите куда мне вставить эту функцию. И где и как её вызвать. В моём коде. Пробую, пробую, ну никак не получается. Пожалуйста!!!

Добавлено через 30 минут
Я уже его туда и туда. Но всё время одно. Expected end of statement в Char 17.
А что ожидается и почему и что такое Char17. Я конечно не понимаю.
0
ytrewq123  [ТС]
0
03.11.2015, 05:27
Здравствуйте!
Ну неужели, никто не может подсказать как соединить мой код с этой функцией. Ну пожалуйста. Неужели это так трудно. Или хотя бы скажите что значит ошибка Char17 в этом коде функции.
0
 Аватар для Dragokas
18035
05.11.2015, 16:50
ytrewq123, для начала, Вы вообще на каком языке пишите, Visual Basic 6, или VBScript ?
Цитата Сообщение от ytrewq123 Посмотреть сообщение
Ну пожалуйста скажите куда мне вставить эту функцию.
В самое начало. MsgBoxW пользоваться точно также, как и MsgBox.
0
ytrewq123  [ТС]
0
06.11.2015, 02:50
Ой спасибо что Вы откликнулись.
Да куда я её только не вставлял. Ничего, всегда ошибка какая-то.
Насколько я понимаю VBScript.
Ибо, я просто открыл блокнот. Скопировал туда выше показанный код? подправил и сохранил файл с расширением VBS.
Вставил в самое начало, поменял MsgBox на MsgBoxWю Сохранил. Нажимаю. И. Сообщение окна.
Windows Script Host

Line. 1
Char. 12
Error. Expected end of statement
Code. 800A0401
Source Microsoft VBScript compilation error

Вот так.
Помогите пожалуйста. Мне очень надо.
0
 Аватар для Pro_grammer
6807
06.11.2015, 07:42
Цитата Сообщение от ytrewq123 Посмотреть сообщение
Насколько я понимаю VBScript
Это тут причем? Вам дали код для вставки в проект на VB6, который использует Win API "MessageBoxW". Скрипт VBS изначально не поддерживает прямое обращение к Win API.
Вы уже определитесь, что вам надо, VBA, VBS, VB6 или может VB.NET? Это по сути разные вещи, хотя и со схожим синтаксисом.
0
ytrewq123  [ТС]
0
06.11.2015, 16:26
Ну вот значит.
В заглавии статьи откуда я взял этот код. Написано так.
Программирование на языке Microsoft Visual Basic Scripting Edition.
И какой вывод? Мне просто надо чтобы этот файл лежал на десктопе, я нажал появилось сообщение в инфо. окне.
Как я писал всё в порядке, всё работает. Только если регион не Россия не пошит кириллицу, а мне это очень надо.
Так как возможно решить проблему???
0
ytrewq123  [ТС]
0
09.11.2015, 16:47
Аууу!!!
Неужели никто не знает и не может помочь. Скажите хоть, возможно ли это сделать. Дааа вот это задача.
Ну кто ни будь знает!!!??? Буду очень благодарен. Мне очень надо.
0
 Аватар для Dragokas
18035
09.11.2015, 21:40
Просто выставьте в настройках ОС язык для программ, не поддерживающих Юникод, - "Русский".
0
ytrewq123  [ТС]
0
12.11.2015, 18:01
Спасибо Вам. Туда ползал, но не углубился что это только как-бы как исключение. Единственное. А кодом нельзя что-то. Просто вдруг будут не доступны все эти изменения. И всё. Если что-то можно. Напишите если не сложно. Но пока этого будет. Достаточно. Спасибо.
0
 Аватар для Dragokas
18035
12.11.2015, 18:49
Цитата Сообщение от ytrewq123 Посмотреть сообщение
Единственное. А кодом нельзя что-то. Просто вдруг будут не доступны все эти изменения.
Можно через API-обертку DynamicWrapperX (т.е. придется тягать с собой файл библиотеки).
Тогда код будет выглядеть так:
Visual Basic
1
2
3
4
5
6
Wrap.Register "User32", "MessageBoxW", "i=lwwl", "r=l"
MsgBoxW "Показать следующее сообщение?", vbYesNo, "Показать?"
 
Function MsgBoxW(Prompt, Buttons, Title)
    MsgBoxW = Wrap.MessageBoxW (0, Prompt, Title, Buttons)
End Function
Библиотеку перед использованием следует зарегистрировать (от имени Админа для всех пользователей, или без прав админа - только для текущего пользователя). Подробнее здесь.
Можно автоматизировать. Смотрите приложенный архив.
Вложения
Тип файла: rar MsgBoxW.rar (47.0 Кб, 18 просмотров)
0
ytrewq123  [ТС]
0
13.11.2015, 02:43
Спасибо. Большое Вам спасибо что ответили мне. Попробую разобраться.
Спасибо ещё раз.
0
 Аватар для Dragokas
18035
13.11.2015, 12:39
Проверил на виртуалке. Последний код не работает как положено на EN-системе. Видимо, происходит неявное преобразование Unicode/ANSI.
Нужно прямо передавать указатели, которые в языке VBS получить непросто.
Будет больше времени, попробую сделать.

Добавлено через 42 минуты
Оказывается, Юрий Попов уже все предусмотрел.
Вот так нужно попробовать:

Visual Basic
1
2
3
4
5
6
7
8
Set Wrap = CreateObject("DynamicWrapperX.2")
 
Wrap.Register "User32", "MessageBoxW", "i=hppu", "r=l"
MsgBoxW "Показать следующее сообщение?", vbYesNo, "Показать?"
 
Function MsgBoxW(Prompt, Buttons, Title)
    MsgBoxW = Wrap.MessageBoxW (0, Wrap.StrPtr(Prompt), Wrap.StrPtr(Title), Buttons)
End Function
0
ytrewq123  [ТС]
0
14.11.2015, 19:36
Спасибо Вам большое.
Только я пробовал. Извините не могу сложить всё вместе мой код и ваш.
Если Вам не сложно тыкните мне как. Ибо действительно не знаю этого языка программирования. Хотел просто сделать интересную штуку. А по сути Вас загрузил проблемой. Простите. Попробую сам. Но если можно как всё вместе это выглядит.
0
 Аватар для Dragokas
18035
14.11.2015, 20:17
Блин. Проверил в виртуалке, и так тоже не работает. Сам код скрипта не в юникоде, т.о. интерпретатор его воспринимает как ANSI-текст.
Ну, у меня остался только единственный вариант, прогнать через матрицу перевода. Как сделать проще, затрудняюсь.
Вот так исправно работает на EN-системах. Проверено.

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Option Explicit
 
Dim Wrap
On Error Resume Next
Set Wrap = CreateObject("DynamicWrapperX.2")
if Wrap is nothing then
    if msgbox("Необходимо зарегистрировать библиотеку DynamicWrapperX. Продолжить?", vbYesNo + vbInformation) = vbYes then
        with CreateObject("WScript.Shell")
            .Run """" & CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & _
                "\regdynwrapx.bat" & """ """" """ & WScript.ScriptFullName & """", 1, false
            WScript.Quit 0
        end with
    else
        WScript.Quit 1
    end if
end if
On Error Goto 0
' Если нужно вызвать функцию из 32-битной библиотеки, уберите знаки комментариев ниже
'Dim SysWOW64: SysWOW64 = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%SystemRoot%") & "\SysWOW64"
'with CreateObject("Scripting.FileSystemObject")
'   if .FileExists(SysWOW64 & "\WScript.exe") then
'       if strcomp(.GetBaseName(.GetParentFolderName(WScript.FullName)), "SysWOW64") <> 0 then
'           CreateObject("Shell.Application").ShellExecute "WScript.exe", """" & WScript.ScriptFullName & """", SysWOW64, "open", 1
'           WScript.Quit 0
'       end if
'   end if
'end with
 
Wrap.Register "User32", "MessageBoxW", "i=hppu", "r=l"
MsgBoxW "Показать следующее сообщение?", vbYesNo, "Показать?"
 
Function MsgBoxW(Prompt, Buttons, Title)
    MsgBoxW = Wrap.MessageBoxW (0, Wrap.StrPtr(ConvertAnsi2Unicode(Prompt)), Wrap.StrPtr(ConvertAnsi2Unicode(Title)), Buttons)
End Function
 
Function ConvertAnsi2Unicode(sText)
    Dim Result, i, CodeA, CodeW, Ch
    For i = 1 to Len(sText)
        Ch = mid(sText, i, 1)
        CodeW = AscW(Ch)
        CodeA = Asc(Ch)
        if CodeW <> CodeA then 
            Result = Result & Ch
        else
            if CodeA <= 127 then
                Result = Result & Ch
            elseif CodeA >= 192 then
                Result = Result & ChrW(CodeA + 848)
            else
                Select case CodeA
                case 152, 160, 164, 166, 167, 169, 171, 172, 173, 174, 176, 177, 181, 182, 183, 187             
                    CodeW = CodeA
                case 128: CodeW = 1026
                case 129: CodeW = 1027
                case 130: CodeW = 8218
                case 131: CodeW = 1107
                case 132: CodeW = 8222
                case 133: CodeW = 8230
                case 134: CodeW = 8224
                case 135: CodeW = 8225
                case 136: CodeW = 8364
                case 137: CodeW = 8240
                case 138: CodeW = 1033
                case 139: CodeW = 8249
                case 140: CodeW = 1034
                case 141: CodeW = 1036
                case 142: CodeW = 1035
                case 143: CodeW = 1039
                case 144: CodeW = 1106
                case 145: CodeW = 8216
                case 146: CodeW = 8217
                case 147: CodeW = 8220
                case 148: CodeW = 8221
                case 149: CodeW = 8226
                case 150: CodeW = 8211
                case 151: CodeW = 8212
                case 153: CodeW = 8482
                case 154: CodeW = 1113
                case 155: CodeW = 8250
                case 156: CodeW = 1114
                case 157: CodeW = 1116
                case 158: CodeW = 1115
                case 159: CodeW = 1119
                case 161: CodeW = 1038
                case 162: CodeW = 1118
                case 163: CodeW = 1032
                case 165: CodeW = 1168
                case 168: CodeW = 1025
                case 170: CodeW = 1028
                case 175: CodeW = 1031
                case 178: CodeW = 1030
                case 179: CodeW = 1110
                case 180: CodeW = 1169
                case 184: CodeW = 1105
                case 185: CodeW = 8470
                case 186: CodeW = 1108
                case 188: CodeW = 1112
                case 189: CodeW = 1029
                case 190: CodeW = 1109
                case 191: CodeW = 1111
                end Select
                Result = Result & ChrW(CodeW)
            end if
        end if
    Next
    ConvertAnsi2Unicode = Result
End Function
Сделал матрицу для всей ASCII таблицы.
0
 Аватар для Dragokas
18035
14.11.2015, 20:23
На счет того, как интегрировать в Ваш код, то это можно сделать в любом порядке, только MsgBox поменять на MsgBoxW.

Пример вместе с библиотеками в архиве.
Вложения
Тип файла: rar test.rar (47.8 Кб, 5 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 Аватар для raxper
raxper
30234
14.11.2015, 20:23

кириллица
Подскажите, как сделать ,чтобы в Borland C вывод был русскими буквами. Я написал setlocale(LC_ALL, &quot;Russian&quot;); вывод стал на...

Кириллица
Получаю данные из бд и на серверной стороне данные приходят в нормальной кодировке ( скрин 1) msg.append(new...

Кириллица в C#
Доброго времени суток. У меня такая проблема, прога не считает кол-во букв кириллицы в тексте:( Как это можно сделать? Вот мой код...

Кириллица
Доброго времени суток! Заранее извиняюсь за весьма глупый вопрос, но все же string name; int main() { setlocale...

Кириллица
Имеется код: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; /* ЋЇЁб**ЁҐ бЁбвҐ¬л Є®¬**¤...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости. Решение: Создан документ со следующими. . .
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово. Решение: Создан документ с единственным. . .
Сумма и количество положительных элементов в чётных строках массива
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить сумму и количество положительных элементов массива, расположенных в четных строках. Решение: Создан документ с. . .
Поиск произведения положительных чётных чисел в последовательности
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Дана произвольная последовательность целых чисел. Найти произведение положительных четных чисел данной последовательности. . . .
Обработка трёх чисел: утроение и возведение в степень
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Даны три действительных числа. Утроить те из них, значения которых неотрицательны, и возвести в четвертую степень отрицательные. . . .
Расчёт стоимости яблок по весу
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Написать программу вычисления стоимости некоторого количества (по весу) яблок. Решение: Создан документ, с табличной частью. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru