nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 17 Apr 2024 18:03



Reply to topic  [ 104 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 7  Next
Windows 98/Me 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
Глюк с кодировкой подтверждаю. Как по дровам, так и по папкам
и не только Рабстол, я вам скажу)

А с чем ещё такой глюк происходит?

Shaos wrote:
нотепад использует виндоус кодировку, а не досовскую - которую требует батник

Вот я и отследил, что это связано с некорректной работой Венды с кодировками
в ДОС окне. Java - это тоже ДОС-приложение...
Мелкомягкие ничего не говорили - я следил.
Shaos wrote:
может уменя правильная русская версия была

У меня самогО лицензионная версия с голограммами номерами и книжкой.
"правильная" - что есть критерий её "правильности"?


07 May 2011 11:16
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Есть у меня ещё одно подозрение, что весь гимор с кодировками происходит
"на лету". В частности, у меня не работал appletviewer.exe от Java - путался
с путями типа:

C:\\WORK\\J2SDK1_4\\BIN\\appletviewer.exe
C:\WORK\J2SDK1_4\BIN\appletviewer.exe

вот эти двойные слэши появлялись "на лету" и это приводило к тому, что путь
не находился. Пришлось написать виндавозную затычку, меняющую пути "по пути",
назвать её applet.exe и ассоциировать с ней все системные вызовы appletviewer.exe
по умолчаниям. applet.exe далее сама вызывает appletviewer.exe с параметрами:
Code:
// здесь много лишнего за комментами - отслеживал что происходит в отладке...

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
        MSG msg;
//---------------------- Запускаем appletviewer.EXE --------------------------------------
        Buf[0]=0x22; // ->"<-
if(strlen(lpCmdLine)!=0)
        {
//        ClsBuff[256];
//        result=GetCurrentDirectory(256,ClsBuff);
//        strcpy(ClsName, "");//--- смотрим имя CurrentDirectory --
//        strncat(ClsName, ClsBuff, result);
//        MessageBox(0,ClsName," CurrentDirectory:",MB_ICONWARNING);

//        MessageBox(0, lpCmdLine, "  CommandLine:", MB_ICONWARNING);
        strcpy(pat, "");
        strcpy(pat, "appletviewer ");
        // C:\\WORK\\J2SDK1_4\\BIN\\appletviewer.exe
        // C:\WORK\J2SDK1_4\BIN\appletviewer.exe
        strcpy(mes,"");
        strcpy(tmp,"");
// выделяем только имя файла этими манипуляциями
        strcpy(mes,strrchr(lpCmdLine,0x5c));  // ищем
        strrev(mes);
        strncat(tmp,mes,strlen(mes)-1);
        strrev(tmp);
//        MessageBox(0, tmp, "  Command:", MB_ICONWARNING);
//        strcpy(mes,"");
                           // иначе добавляем кавычки
            strcat(pat, Buf);       // в начале и
            strcat(pat, tmp);
            strcat(pat, Buf);       // в конце

//        MessageBox(0, pat, "  Command:", MB_ICONWARNING);
//        SetCurrentDirectoryA
        result=WinExec(pat,SW_MINIMIZE); //MINIMIZED or  SW_SHOW
        }

Также пришлось порешать аналогичную проблему для Professional Notepad.

Мне думается, если точно бы отследить момент, где происходит трабла с кодировкой
у сабжа с "Рабочим столом", это вполне можно было бы отследить и скорректировать
"на лету", но я никак не отслежу причину и повторяемость траблы, а в этом случае
утилиты - "следилки" выкидывают объём информации, который трудно анализировать.


Last edited by Lavr on 07 May 2011 17:41, edited 1 time in total.



07 May 2011 13:14
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Ага, фактически я угадал, что "на лету" это происходит, т.к. в реестре символов
¦рсю¢шщ ёªюы нет. Только непонятно в какой момент портится всё...

Вот тут люди также мучаются с похожей проблемой:
CMD/BAT - Проблема с кодировками в cmd. http://forum.oszone.net/thread-57327.html
Если стоит русская винда, то возникает проблема с кодировками, переменная %DESKTOP%
выглядит как "¦рсю¢шщ ёªюы". Пробовал chcp 1251, не помогает.

И судя по всему это трабла не только Вынь'98.

http://www.sql.ru/forum/actualthread.aspx?bid=3&tid=770114
Quote:
Вся гуя в русской (и даже в нерусской - не помню уже от чего зависит) винде работает в 1251, а консоль в 866. Можно в реестре нагло заменить 866 на 1251 , но имхо, если не стоит производственной необходимости - лучше не парится
мне в молодости помогало ... set nls_lang=russian_cis.ru8pc866 выполнить

но это решает только в частном случае...

Quote:
Кажется даже Microsoft не знает где собака зарыта.

http://forum.oszone.net/thread-66865.html :wink:

Quote:
твик реестра насчет кодовой страницы сделан (=>1251)?

Code:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"
"1253"="c_1251.nls"


Last edited by Lavr on 07 May 2011 18:03, edited 1 time in total.



07 May 2011 13:53
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
http://www.sql.ru/forum/actualthread.aspx?bid=3&tid=770114
Quote:
твик реестра насчет кодовой страницы сделан (=>1251)?


Code:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"
"1253"="c_1251.nls"

У меня лично эта ветка реестра выглядит так:
Code:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\Codepage]
"1250"="cp_1250.nls"
"1251"="cp_1251.nls"
"1252"="cp_1252.nls"
"1253"="cp_1253.nls"
"1254"="cp_1254.nls"
"1257"="cp_1257.nls"
"437"="cp_437.nls"
"850"="cp_850.nls"
"737"="cp_737.nls"
"775"="cp_775.nls"
"852"="cp_852.nls"
"857"="cp_857.nls"
"855"="cp_855.nls"
"866"="cp_866.nls"
"869"="cp_869.nls"
"28597"="cp_28597.nls"
"20866"="cp_20866.nls"
"28595"="cp_28595.nls"
"28592"="cp_28592.nls"
"28591"="cp_28591.nls"
"ACP"="1251"
"OEMCP"="866"

Поменять можно, попробую, как из Инета выйду. Вопрос как проверить -
наобум запускать указанные пакеты компиляторов и JAVA....


07 May 2011 14:29
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Так, похоже, сдвиги есть. В файлах JAVA обращения к %DESKTOP% имеются...
Code:
 Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders    Desktop %
ReleaseDC ¤ GetDC [SetWindowPos  Ё GetClientRect _ GetDesktopWindow  + EndPaint  BeginPaint  рPostQuitMessage Д DefWindowProcA

Возможно, тут глюк и проходит при передаче параметра %DESKTOP% в окно ДОС.
Надо посмотреть...

Самое смешное, что отчасти эта дурная папка полезна.
C:\WINDOWS\All Users\¦рсю¢шщ ёªюы
Будучи созданной, она существует в этом виде и принимает все дурные
обращения к себе --> более ни разу не создаётся.
А непосредственно момент её создания на десктопе можно и не увидеть,
так как десктоп загорожен окнами или окном.
Поэтому Шаос и многие другие могли этого не видеть никогда.
C:\WINDOWS\All Users\ - не самое популярное место что-то искать.
Но вот когда на эту папку натыкается сам виндовоз - он сильно недоволен,
но тоже не факт, что это критично.
Непреодолимо это, если делать Виндовский Дефраг. Но Дефраг многие делают
сторонними утилитами - я, например, от Симантека. Где-то читал байку, что
Виндовский Дефраг содержит ошибку.

Похоже, функции работы с реестром не совсем корректно выполняются консольными приложениями WINDOWS.


07 May 2011 15:41
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Lavr wrote:
HardWareMan wrote:
Глюк с кодировкой подтверждаю. Как по дровам, так и по папкам
и не только Рабстол, я вам скажу)

А с чем ещё такой глюк происходит?

Нортона 98/2К/2К1 все помнят? Если похерить строчку "COUNTRY=007,866,C:\WINDOWS\COMMAND\COUNTRY.SYS" в CONFIG.SYS, то он сносит все русские имена, заменяя их на вопросы. Так что BEWARE! Кстати, может здесь можно и 1251 задать сразу?


07 May 2011 21:19
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
Похоже, функции работы с реестром не совсем корректно выполняются
консольными приложениями WINDOWS.

Да вывод, похоже, правильный, но дело, собственно, и не столько в нём.
Для проверки даже не пришлось писАть консольных приложений
Венды, чего я с горяча было надумал...
Опыт очень простой: скопированное название папки Рабочий стол в редакторе
транспонировано в ДОС кодировку и снова скопировано в буфер обмена.
В консольном приложении Венды создаётся папка с кривым именем:
(вверху - Folder Manager - консольное приложение, внизу - окно Проводника.

Image

Дальше баг успешно создаётся и ведёт себя в точности как здесь ранее описано:
папка не может быть удалена, папки не существует.
Сама Венда средствами Проводника такой папки создать не даёт!!!

Image

Венде в названии папки не нравится всего лишь первый символ.
Если скопировать название папки так, как показывает его Венда, то такую папку
запросто можно создать и всё будет корректно.

Но поскольку в консольных приложения словосочетания Рабочий стол ни в какой
кодировке нет (я специально искал - проверял), они получают его через обращение
к ключу Desktop ветви Реестра
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
вот тут-то, на мой взгляд, и возникает глюк с кодировкой в названии папки.

Значицца причина понятна, вопрос - как её корректно забороть...

PS. За годы работы с Вендой создал специальную папку - Боремся с WIN... :wink:

PPS. Получается что-ли, что консольные приложения Венды, коими являются
и JAVA, и, собственно, сам CMD, работают в 1251, а когда что-то досовское
им подсовывается, то "сжирают" некорректно?


Last edited by Lavr on 08 May 2011 06:07, edited 6 times in total.



08 May 2011 05:20
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
Нортона 98/2К/2К1 все помнят?

Не то, чтобы не помню, а даже ни разу не сталкивался и не знаю кто такой... Серьёзно.


08 May 2011 05:23
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Lavr wrote:
HardWareMan wrote:
Нортона 98/2К/2К1 все помнят?

Не то, чтобы не помню, а даже ни разу не сталкивался и не знаю кто такой... Серьёзно.

А говоришь юзаешь дефраг от симантека. Я имел в виду Norton Utilities от Symantek.


08 May 2011 06:39
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
А говоришь юзаешь дефраг от симантека. Я имел в виду Norton Utilities от Symantek.

Тогда знаю. По названию согрешил было на NC и клоны, а я ими и вправду
не пользовался, т.к. юзал VC и FM. Сказал бы NU - я б сразу въехал. :wink:


08 May 2011 07:25
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Нашел конкретно, условия появления бага. Он случается, когда из консольного
приложения Венды вызывается программа MS-DOS. Это совершенно чётко.
У меня из Folder Manager вызывал Borland C++ - bc.exe .
"Рабочими столами" запрудил весь десктоп. :lol:

Не знаю пока, от всех ли MS-DOS приложений такой эффект.
Если в пути C:\WINDOWS\All Users\¦рсю¢шщ ёªюы эту папку удалять,
она всякий раз появляется заново. Интересно, что только на десктопе.
В папке C:\WINDOWS\Рабочий стол этих клонов в этот же момент нет.

Предполагаю, что эффект вызван пользовательской политикой Венды.
Не приложение MS-DOS, а Венда лезет в пользовательскую папку
C:\WINDOWS\All Users\Рабочий стол
что-то там для себя посмотреть с кривым эффектом.
Что она там ищет - попробую выяснить вьюерами, раз уж точно знаю момент
возникновения бага.


08 May 2011 07:29
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
У меня из Folder Manager вызывал Borland C++ - bc.exe .
"Рабочими столами" запрудил весь десктоп.
Не знаю пока, от всех ли MS-DOS приложений такой эффект.

Справедливо действительно при вызове ЛЮБОГО .EXE-шника но только 1 раз.
То есть, если создалась папка C:\WINDOWS\All Users\¦рсю¢шщ ёªюы
после чего - её удалить из C:\WINDOWS\All Users\
повторного эффекта не будет.
Надо выйти из консольного приложения, после чего вызвать его снова и
запустить любой .EXE-шник, баг повторится.

Написал своё консольное приложение, где по нажатию кнопки запускаю BC.EXE:
Code:
strcpy(pat, "C:\WORK\BC31\BIN\BC.EXE");
result=WinExec(pat,SW_NORMAL);

Никакого бага не происходит. :(


08 May 2011 08:38
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Утилита REGMON.EXE (Монитор реестра) показывает, что, действительно, Folder Manager
получает из реестра ключ Common Desktop в кодировке ДОС:
Code:
14  Manager  QueryValueEx  HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Desktop  NOTFOUND
15  Manager  CloseKey  HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders  SUCCESS
16  Manager  CreateKey  HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders  SUCCESS  hKey: 0xC29B9D60
17  Manager  SetValueEx  HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Desktop  SUCCESS  "C:\WINDOWS\All Users\¦рсю¢шщ ёªюы"

Может так и надо - Венда считает консольное приложение программой ДОС?

Посмотрю дальше, как этот ключ применяется...


08 May 2011 09:31
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Post 
А если из фара запускать? ;)
Т.е. важно чтобы это было именно CMD?
Или оно из любого консольного приложения так чудит?

_________________
:dj: https://mastodon.social/@Shaos


08 May 2011 09:31
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
А если из фара запускать? ;)
Т.е. важно чтобы это было именно CMD?
Или оно из любого консольного приложения так чудит?

Мне кажется - главное - это получение "кривого" значения ключа Common Desktop.
Code:
Manager  SetValueEx  HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Desktop  SUCCESS  "C:\WINDOWS\All Users\¦рсю¢шщ ёªюы"

Дальше, мне кажется, этот момент на всё и влияет. Такой папки не будет,
значит придётся её создать, откуда и вылезет:
C:\WINDOWS\All Users\¦рсю¢шщ ёªюы

Сейчас проверю обращения к файловой системой через FILEMON.EXE и посмотрю,
как повлияет смена кодировок на "cp_1250.nls"


08 May 2011 09:38
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 104 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 7  Next

Who is online

Users browsing this forum: No registered users and 15 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.