ShellExecute i iconv.exe problem z przekazaniem parametrów

dział ogólny

ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Darek_C++ » środa, 16 czerwca 2010, 19:19

Kolejnym sposobem na zmianę kodowania znaków z użyciem iconv programu jest program iconv.exe i wywoływany z lini poleceń np:
cd E:\iconv
E:\iconv>iconv.exe -f ISO-8859-2 -t UTF-8 <test.txt> wyjscie.txt
i tak działa. Działa również przy wywołaniu w programie funkcji:
Kod: Zaznacz cały
system("E:\\iconv\\iconv.exe -f ISO-8859-2 -t UTF-8 E:\\iconv\\test.txt > E:\\iconv\\wyjscie2.txt");

ale za nic nie chce zadziałać wywołany z
Kod: Zaznacz cały
ShellExecute(Form1->Handle, NULL , "E:\\iconv\\iconv.exe", "-f ISO-8859-2 -t UTF-8 E:\\iconv\\test.txt > E:\\iconv\\wyjscie3.txt", "", SW_SHOWNORMAL);
tak samo dzieje się gdy podaje argumenty do programu Wyświetlanie zawartości konsoli CMD.exe w Memo - wg. pomysłu kinio.
[Scieżka do procesu] E:\iconv\iconv.exe
[Parametry wywolania] -f ISO-8859-2 -t UTF-8 E:\iconv\test.txt > E:\iconv\wyjscie3.txt
[Zwracane jest]Invalid argument
No such file or directory
-----------
Najbarzdiej zależało by mi na możliwości uruchomienia działania programu funkcją CreateProcess której jak myślę odpowiednia wywołanie spowoduje oczekiwanie programu głównego na zakończenie wywołania danego procesu co ma kluczowy związek z jego dalszym działaniem.

W załączniku zamieszczam program iconv.exe jak by ktoś z Was chciał się zmierzyć z tym problemem

Pozdrawiam
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Cyfrowy Baron » czwartek, 17 czerwca 2010, 07:27

Spróbuj za pomocą funkcji CreateProcess:

Kod: Zaznacz cały

 String eValue 
="E:\\iconv\\iconv.exe";
  
  
String val1 "-f ISO-8859-2 -t UTF-8 E:\\iconv\\test.txt > E:\\iconv\\wyjscie3.txt";

 if(!
FileExists(eValue)) return; // jeżeli brak pliku to przerwij
 
eValue "\"" eValue "\" \"" val1 "\" \""// program i parametr zostają ujęte w cudzysłowa.

 
STARTUPINFO StartupInfo;
 ;
ZeroMemory( &StartupInfosizeof(STARTUPINFO));
 
StartupInfo.cb sizeof(STARTUPINFO);

 
PROCESS_INFORMATION ProcessInfo;

 if(
CreateProcess(NULLeValue.w_str(), NULLNULLtrueNORMAL_PRIORITY_CLASS,
                  
NULLNULL, &StartupInfo, &ProcessInfo))
 {
  
CloseHandle(ProcessInfo.hProcess);
  
CloseHandle(ProcessInfo.hThread);
 }
 
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Darek_C++ » czwartek, 17 czerwca 2010, 13:17

Niestety, ale też nie działa :(
---
Jak dotąd zadziałało tylko przy wywołaniu funkcją system :(
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Cyfrowy Baron » piątek, 18 czerwca 2010, 16:35

Spróbuj podanego przeze mnie sposobu, ale ujmij każdy element linii komend w oddzielny cudzysłów, czyli:

Kod: Zaznacz cały

  String val1 
"\"-f\" \"ISO-8859-2\" \"-t UTF-8\" \"E:\\iconv\\test.txt >\" \"E:\\iconv\\wyjscie3.txt\"";

  if(!
FileExists(eValue)) return;
  
eValue "\"" eValue "\" " val1;
 
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Darek_C++ » piątek, 18 czerwca 2010, 17:05

Dałem:
Kod: Zaznacz cały
String eValue ="E:\\iconv\\iconv.exe";
   String val1 = "\"-f\" \"ISO-8859-2\" \"-t UTF-8\" \"E:\\iconv\\test.txt >\" \"E:\\iconv\\wyjscie3.txt\"";
   if(!FileExists(eValue)) return; // jeżeli brak pliku to przerwij
   eValue = "\"" + eValue + "\" \"" + val1 + "\" \""; // program i parametr zostają ujęte w cudzysłowa.


I też nie działa :(
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Cyfrowy Baron » piątek, 18 czerwca 2010, 17:09

Ale ten element:

Kod: Zaznacz cały

   if
(!FileExists(eValue)) return; // jeżeli brak pliku to przerwij
   eValue = "\"" + eValue + "\" \"" + val1 + "\" \""; // program i parametr zostają ujęte w cudzysłowa.
 


powinieneś teraz zapisać tak:

Kod: Zaznacz cały

   if
(!FileExists(eValue)) return; // jeżeli brak pliku to przerwij
   eValue = "\"" + eValue + "\" " + val1


Nie należy ponownie ujmować zmiennej val1 w cudzusłowa, gdyż pojawią się podwójne.

Poza tym ten element:

Kod: Zaznacz cały
String val1 = "\"-f\" \"ISO-8859-2\" \"-t UTF-8\" \"E:\\iconv\\test.txt >\" \"E:\\iconv\\wyjscie3.txt\""; 


też źle rozpisałeś, gdyż chodzi o to, że każdy element oddzielony spacją należy ująć w cudzuysłowa. Powinno być:

Kod: Zaznacz cały
String val1 = "\"-f\" \"ISO-8859-2\" \"-t\" \"UTF-8\" \"E:\\iconv\\test.txt>\" \"E:\\iconv\\wyjscie3.txt\""; 


między -t i UTF-8 zabrakło cudzysłowów. Poprawiłem też ten element: E:\\iconv\\test.txt> na E:\\iconv\\test.txt>

Spróbuj z poprawkami.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Cyfrowy Baron » piątek, 18 czerwca 2010, 17:32

Spróbuj może za pomocą pliku wsadowego *.BAT. Niech program zapisze dane do pliku wsadowego a następnie uruchom ten plik.



Symbol > użyty jako parametr przekazywany do programu nie ma zastosowania poza konsolą CMD, spróbuj więc bez tych symboli:

Kod: Zaznacz cały


 String eValue 
="E:\\iconv\\iconv.exe";
  
 String val1 
= "-f ISO-8859-2 -t UTF-8 E:\\iconv\\test.txt E:\\iconv\\wyjscie3.txt";

if(!
FileExists(eValue)) return;
 eValue = "\"" + eValue + "\" \"" + val1 + "\" \"";

 
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez polymorphism » piątek, 18 czerwca 2010, 19:53

Panowie, problem polega na tym, że macie do czynienia z przekierowaniem standardowego wejścia/wyjścia na pliki, a to - chodzi o zapis - ma zastosowanie pod konsolą.

Tu macie kod przykładowy, nieładny, bo spłodzony na szybko, ale mam nadzieję, że tłumaczący idee:
Kod: Zaznacz cały
    SECURITY_ATTRIBUTES sa;
    sa.nLength              =   sizeof  (   SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor =   NULL;
    sa.bInheritHandle       =   TRUE;

    STARTUPINFO si;
    ZeroMemory( &si, sizeof(STARTUPINFO));

    si.cb = sizeof(STARTUPINFO);
    si.dwFlags = STARTF_USESTDHANDLES;

    /* wejście */
    si.hStdInput = CreateFile("D:\\iconv\\test.txt",
                GENERIC_READ,
                FILE_SHARE_READ,
                &sa,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                NULL);

    /* wyjście */
    si.hStdOutput = CreateFile("D:\\iconv\\out.txt",
                GENERIC_WRITE,
                FILE_SHARE_READ | FILE_SHARE_WRITE,
                &sa,
                CREATE_ALWAYS,
                FILE_ATTRIBUTE_NORMAL,
                NULL);

    PROCESS_INFORMATION ProcessInfo;

    if(CreateProcess(NULL,
                    "D:\\iconv\\iconv.exe -f ISO-8859-2 -t UTF-8", 
                    NULL
, 
                    NULL
, 
                    TRUE
, 
                    NORMAL_PRIORITY_CLASS
, 
                    NULL
, 
                    NULL
, 
                    
&si, 
                    
&ProcessInfo))
    {
        WaitForSingleObject(ProcessInfo.hProcess,INFINITE); //<--- czekamy...
        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
    }

    CloseHandle(si.hStdInput);
    CloseHandle(si.hStdOutput); 
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Darek_C++
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Cyfrowy Baron » sobota, 19 czerwca 2010, 08:25

Rzeczywiście, teraz gdy to napisałeś, jest to oczywiste. Ja osobiście traktowałem to jako parametr przekazywany do programu i w zasadzie nie zastanawiałem się nad tym co ten program ma zrobić.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Darek_C++ » sobota, 19 czerwca 2010, 12:53

Brawo Panie polymorphism - w końcu zadziałało.
Jeszcze chciał bym się jeżeli można ;) dowiedzieć jak uruchomić program by wyeliminować mignięcie okna konsoli jakie się pojawia przy wykonywaniu tego kodu ?
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez polymorphism » sobota, 19 czerwca 2010, 13:01

Poczytaj w dokumentacji o STARTUPINFO, tam chyba jest coś o tym.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Cyfrowy Baron » sobota, 19 czerwca 2010, 14:13

Struktura STARTUPINFO posiada element wShowWindow, jeżeli przypisze mu wartość SW_HIDE to okno konsoli uruchamiane za pomocą funkcji CreateProcess zostanie uruchomione jako ukryte, czyli niewidoczne. Element wShowWindow jest brany pod uwagę tylko wtedy, gdy inny element tej struktury - dwFlags ma wartość STARTF_USESHOWWINDOW, w przeciwnym razie element wShowWindow jest ignorowany.

Kod: Zaznacz cały

 STARTUPINFO StartupInfo
;
 ;ZeroMemory( &StartupInfo, sizeof(STARTUPINFO));
 StartupInfo.cb = sizeof(STARTUPINFO);
 StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
 StartupInfo.wShowWindow = SW_HIDE;
 


Czyli w przypadku kodu podanego przez polymorphism, powinno może to wyglądać tak:

Kod: Zaznacz cały

SECURITY_ATTRIBUTES sa
;
sa.nLength              =   sizeof  (   SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor =   NULL;
sa.bInheritHandle       =   TRUE;

STARTUPINFO si;
ZeroMemory( &si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);

si.dwFlags     = STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;                  // <-- patrz tutaj

/* wejście */
si.hStdInput = CreateFile("D:\\iconv\\test.txt",
                    GENERIC_READ,
                    FILE_SHARE_READ,
                    &sa,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);

/* wyjście */
si.hStdOutput = CreateFile("D:\\iconv\\out.txt",
                    GENERIC_WRITE,
                    FILE_SHARE_READ | FILE_SHARE_WRITE,
                    &sa,
                    CREATE_ALWAYS,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);

PROCESS_INFORMATION ProcessInfo;

if(
CreateProcess(NULL, "D:\\iconv\\iconv.exe -f ISO-8859-2 -t UTF-8", 
                        NULL
, 
                        NULL
, 
                        TRUE
, 
                        NORMAL_PRIORITY_CLASS
, 
                        NULL
, 
                        NULL
, 
                        
&si, 
                        
&ProcessInfo))
{
 WaitForSingleObject(ProcessInfo.hProcess, INFINITE); //<--- czekamy...
 CloseHandle(ProcessInfo.hProcess);
 CloseHandle(ProcessInfo.hThread);
}

CloseHandle(si.hStdInput);
CloseHandle(si.hStdOutput); 
 
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Darek_C++ » sobota, 19 czerwca 2010, 14:22

Jest coś takiego jak si.wShowWindow = SW_HIDE; ale dodanie tego parametru nic nie zmienia i nadal pojawia się na chwilę okno konsoli :(
-------
Znalazłem musi być tak:
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
-------

Jeszcze jedna kwestia mnie nurtuje z którą raczej sam sobie nie poradzę czy można zmienić standardowe wyjście hStdOutput w tym wypadku z zapisania do pliku na zmianną , lub TMemo ?
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Cyfrowy Baron » sobota, 19 czerwca 2010, 14:40

To raczej niezwykłe, gdyż u mnie to działa tak jak podałem. Poza tym w pomocy jest podane:


STARTF_USESHOWWINDOW - The wShowWindow member is valid.



STARTF_USESTDHANDLES - The hStdInput, hStdOutput, and hStdError members are valid.



Wynika więc z tego, że wartość STARTF_USESTDHANDLES nie ma nic wspólnego z elementem wShowWindow, gdyż go nie dotyczy. Poza tym mozemy również przeczytać:


wShowWindow
If dwFlags specifies STARTF_USESHOWWINDOW, this member can be any of the SW_ constants defined in Winuser.h. Otherwise, this member is ignored.
For GUI processes, wShowWindow specifies the default value the first time ShowWindow is called. The nCmdShow parameter of ShowWindow is ignored. In subsequent calls to ShowWindow, the wShowWindow member is used if the nCmdShow parameter of ShowWindow is set to SW_SHOWDEFAULT.





po chwili...

Już wiem gdzie tkwi błąd. Powinno być tak jak podałem ja, a nie Ty, czyli wartość STARTF_USESHOWWINDOW, tylko, że w kodzie polymorphism mamy podaną wartość STARTF_USESTDHANDLES, stąd ten błąd, poprawiony kod powinien wyglądać tak:

Kod: Zaznacz cały

SECURITY_ATTRIBUTES sa
;
sa.nLength              =   sizeof  (   SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor =   NULL;
sa.bInheritHandle       =   TRUE;

STARTUPINFO si;
ZeroMemory( &sisizeof(STARTUPINFO));
si.cb sizeof(STARTUPINFO);

si.dwFlags     STARTF_USESHOWWINDOW STARTF_USESTDHANDLES// <-- tutaj zmieniłem
si.wShowWindow SW_HIDE;                  // <-- patrz tutaj

/* wejście */
si.hStdInput CreateFile("D:\\iconv\\test.txt",
                    
GENERIC_READ,
                    
FILE_SHARE_READ,
                    &
sa,
                    
OPEN_EXISTING,
                    
FILE_ATTRIBUTE_NORMAL,
                    
NULL);

/* wyjście */
si.hStdOutput CreateFile("D:\\iconv\\out.txt",
                    
GENERIC_WRITE,
                    
FILE_SHARE_READ FILE_SHARE_WRITE,
                    &
sa,
                    
CREATE_ALWAYS,
                    
FILE_ATTRIBUTE_NORMAL,
                    
NULL);

PROCESS_INFORMATION ProcessInfo;

if(
CreateProcess(NULL"D:\\iconv\\iconv.exe -f ISO-8859-2 -t UTF-8"
                        
NULL
                        
NULL
                        
TRUE
                        
NORMAL_PRIORITY_CLASS
                        
NULL
                        
NULL
                        &
si
                        &
ProcessInfo))
{
 
WaitForSingleObject(ProcessInfo.hProcessINFINITE); //<--- czekamy...
 
CloseHandle(ProcessInfo.hProcess);
 
CloseHandle(ProcessInfo.hThread);
}

CloseHandle(si.hStdInput);
CloseHandle(si.hStdOutput); 
  


Ta druga wartość podana przez ciebie czyli STARTF_USESTDHANDLES jest potrzebna dla elementów hStdInput i hStdOutput, gdyż wypełniasz zarówno element wShowWindow jak też elementy hStdInput i hStdOutput.

Drobne przeoczenie, ale teraz wszystko się zgadza i nie ma w tym niczego niezwykłego.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Darek_C++
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: ShellExecute i iconv.exe problem z przekazaniem parametrów

Nowy postprzez Darek_C++ » sobota, 19 czerwca 2010, 14:50

A jak by wyglądało z tym:
Jeszcze jedna kwestia mnie nurtuje z którą raczej sam sobie nie poradzę czy można zmienić standardowe wyjście hStdOutput w tym wypadku z zapisania do pliku na zmianną , lub TMemo ?
Ostatnio edytowano sobota, 19 czerwca 2010, 15:01 przez Darek_C++, łącznie edytowano 3 razy
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 12 gości