1

Тема: HTA: Аналоги VB-функций Asc и Chr или как обойти неверное кодирование

Добрый день, товарищи. Столкнулся со следующей проблемой.

Имеется hta-файл, преимущественно на jscript, за исключением двух функций из vb - Asc и Chr. С помощью этих функций из значений [0x00, 0xff] формируется пакет (а именно ASCII-строка) и отправляется через сокет по ethernet в подключённую железяку (использую MSWinsock.SendData). И всё было ничего, пока юзалось на руссифицированной винде (как на XP так и на 7-ке). Но вот потребовалось запустить на ноутбуке с английско-арабской виндой, и содержимое пакетов резко поплохело. Я так понимаю, случилось это потому, что верхняя половина символов ASCII-таблицы оказалась отличной от использовавшейся ранее.
Железяку я не перешью, поэтому надо что-то придумать, как получать валидные символы кодов и наоборот средствами jscript, vb или activex, дабы формировать верные UDP-пакеты и верно их же раскодировать.

2

Re: HTA: Аналоги VB-функций Asc и Chr или как обойти неверное кодирование

Где код?

3

Re: HTA: Аналоги VB-функций Asc и Chr или как обойти неверное кодирование

В общем-то код тут не особо поможет, ну если очень хочется, то вот относящийся к делу кусок (вернее куски)

Используемые функции VBScript

<script language="vbscript">
Function GetAsc(char)
GetAsc=Asc(char)
End Function

Function GetChr(code)
GetChr=Chr(code)
End Function

Function xgetdata(x)
dim ret
x.GetData ret, 8
xgetdata=ret
End Function
</script>

Формирование и отправка пакета

packet=GetChr(0)+GetChr(255)+GetChr(0)+GetChr(6)+GetChr(0)+GetChr(2)
Winsock.SendData(packet)

Создание объекта MSWinsock, приём и декодирование пакета

var Winsock= new ActiveXObject("MSWinsock.Winsock")

window.onload=function()
{

function Winsock::DataArrival(bytTotal)
{
var Data
Data = xgetdata(Winsock);
switch (GetAsc(Data.charAt(0))&31)
{
case 1:
...
}
}

    Winsock.Protocol = 1
    Winsock.RemoteHost= "192.168.200.178"
    Winsock.RemotePort = 24001
    Winsock.Bind(24000)
}

4

Re: HTA: Аналоги VB-функций Asc и Chr или как обойти неверное кодирование

Я думаю, что было бы корректнее работать с байтовым массивом в VBS, чем через строки JS.

5 (изменено: Himmler, 2012-08-01 19:24:35)

Re: HTA: Аналоги VB-функций Asc и Chr или как обойти неверное кодирование

Проблема решилась использованием функции vbscript

SetLocale 1049

Теперь и на английско-арабской винде Chr и Asc возвращают требуемые значения.