Есть у меня ещё одно подозрение, что весь гимор с кодировками происходит
"
на лету". В частности, у меня не работал 
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: Select all
// здесь много лишнего за комментами - отслеживал что происходит в отладке...
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.
Мне думается, если точно бы отследить момент, где происходит трабла с кодировкой
у сабжа с "
Рабочим столом", это вполне можно было бы отследить и скорректировать
"
на лету", но я никак не отслежу причину и повторяемость траблы, а в этом случае
утилиты - "следилки" выкидывают объём информации, который трудно анализировать.