![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Plotter |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 20.10.2002 Где: Москва Репутация: нет Всего: нет |
Меня тут заинтересовал один вопрос... А можно ли как-то произвести считывание из файла, который находится не на винте, а, допустим, в интернете...??? что-то вроде http://www.сайт.ru/file.txt ... и хорошо бы в этот файл научиться что-нить записывать... Может это как-то легко делается...
|
|||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: нет Всего: 25 |
ИМХО да.
Но там с водом адреса туруды. -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
Plotter |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 20.10.2002 Где: Москва Репутация: нет Всего: нет |
![]() ![]() |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Считать файл обычно труда не представляет. Открываем сокет на 80-й порт нужного хоста и передаем ему
GET /file.txt HTTP/1.1 <CR> <CR> В ответ получим файл. Записать тоже в принципе можно, используя тот же HTTP, но кто тебе просто так позволит файлы переписывать ? |
|||
|
||||
Plotter |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 20.10.2002 Где: Москва Репутация: нет Всего: нет |
Ну, сайт-то мой, так что записать должны дать...
Наверное...... ![]() А вот как сокет на 80-й порт открыть? P.s. может какой исходничек у тя есть...? |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Исходников сейчас под рукой нет. Могу дать направление:
MSDN "The Baseline Version: A Very Poor Performing Application" BOOL Map[ROWS][COLS]; void LifeUpdate() { ComputeNext( Map ); for( int i = 0 ; i < ROWS ; ++i ) //serialized for( int j = 0 ; j < COLS ; ++j ) Set( i, j, Map[i][j] ); //chatty } BYTE Set(row, col, bAlive) { SOCKET s = socket(…); BYTE byRet = 0; setsockopt( s, SO_SNDBUF, &Zero, sizeof(int) ); bind( s, … ); connect( s, … ); send( s, &row, 1 ); send( s, &col, 1 ); send( s, &bAlive, 1 ); recv( s, &byRet, 1 ); closesocket( s ); return byRet; } Основное в процедуре Set(..) 1. Создать сокет (socket) 2. Подключить его к локальной машине (bind) 3. Соединится с удаленной машиной (connect) 4. Посылать данные (send) 5. Получать данные (recv) |
|||
|
||||
Plotter |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 20.10.2002 Где: Москва Репутация: нет Всего: нет |
Лана, попробую что-нить смастерить... Будут вопросы - напишу.
|
|||
|
||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Можно использовать класс CHTTPFile
Также можно просто использовать библиотеку wininet. -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
DrMasik |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.12.2002 Репутация: нет Всего: нет |
Вот то, что ты хотел. как раз пару мес назад попросили написать... Лови и пользуйтесь! Только копирайты поставьте, плиз
![]() //The main file for FTP auot update //Let's beginning #include <windows.h> #include <wininet.h>// Wininet.lib #include <time.h> //for local time #include <fstream> #include <string> #include <conio.h> #include <iostream> //#include "Error.h" //------------------------------------------------------------------------------------------ ---------------*/ HINTERNET ConnectedHandle; WIN32_FIND_DATA FindFileDataLocal; std::string FilePathLocal="\0", DirectoryPath="\0", EntrenceDirName, LocalPathToDataFile="\0", ErrorString="NO errors"; //------------------------------------------------------------------------------------------ ---------------*/ bool ConnectToFTPServer(void); bool DataRead(std::string *HostIPOrAddress, std::string *UserLogon, std::string *UserPassword, std::string *FilePathLocal); void HelpData(void); bool IsItDirectory(void); bool ItemFindLocal(std::string ItemName, HANDLE *HDL); bool ParentLevelGo(void); void Error(int Type); void RepeatUntillKeyPressed(void); //------------------------------------------------------------------------------------------ ---------------*/ bool ExistDirectory(){ if(!FtpSetCurrentDirectory(ConnectedHandle, FindFileDataLocal.cFileName)){ //std::cout<<"Exist->"<<FindFileDataLocal.cFileName<<std::endl; //std::cout<<"Directory NOT exist!"<<std::endl; return (false); }//if //if(! //std::cout<<"Exist->"<<FindFileDataLocal.cFileName<<std::endl; FtpSetCurrentDirectory(ConnectedHandle, ".."); //)//std::cout<<"Directory chache error exist!"<<std::endl; //std::cout<<"Directory exist!"<<std::endl; return (true); }//ExistDirectry//------------------------------------------------------------------------------------------ ---------------*/ int main(int argc, char *argv[]){//The maine:) начало начал HANDLE HandlerFilePathLocal; struct tm *newtime; time_t aclock; std::fstream LogFile; bool FullExit=false; //------------------------------- LocalPathToDataFile=argv[0]; for(int i=LocalPathToDataFile.length()-1; LocalPathToDataFile[i]!='\\'; i--) LocalPathToDataFile.replace(i, 1, ""); //------------------------------- if(!ConnectToFTPServer()) FullExit=true; //------------------------------- //Open log file LogFile.open((LocalPathToDataFile+"FTPAULog.txt").c_str(), std::ios_base::app | std::ios_base::out); if(!LogFile.is_open()) LogFile.open((LocalPathToDataFile+"FTPAULog.txt").c_str(), std::ios_base::out); LogFile<<"------------------------------------------------------------------&qu ot;<<std::endl; time( &aclock ); /* Get time in seconds */ newtime = localtime( &aclock ); /* Convert time to struct *//* tm form */ LogFile<<"Beginning of transfer of the data at\t\t"<<asctime(newtime);//<<std::endl; LogFile.close(); //------------------------------- if(!FullExit){ DirectoryPath=FilePathLocal; if(DirectoryPath.empty() || argc>1){ if(argc<2){ FullExit=true; HelpData(); }//if else{ DirectoryPath=argv[1]; }//if }//if std::cout<<"Read data from >>"<<DirectoryPath<<"<<"<<std::endl; //std::cout<<"Read data from >>"<<DirectoryPath.length()<<"<<"<<std::endl; //Sleep(3000); if(!FullExit){ if(DirectoryPath.length()==3) DirectoryPath.replace(DirectoryPath.length()-1,1,""); if(!SetCurrentDirectory(DirectoryPath.c_str())) { Error(8); std::cout<<">>83<<"<<std::endl; FullExit=true; } }//if if(!FullExit){ HandlerFilePathLocal=FindFirstFile((DirectoryPath+"\\*.*").c_str(), &FindFileDataLocal); if(HandlerFilePathLocal==INVALID_HANDLE_VALUE){ Error(3); FullExit=true; } FindNextFile(HandlerFilePathLocal, &FindFileDataLocal); FindNextFile(HandlerFilePathLocal, &FindFileDataLocal); }//if }//if //если есть это дирестория на серваке - входим в нее иначе создаем и тоже самое while(!FullExit){ if(IsItDirectory()){ //std::cout<<FindFileDataLocal.cFileName<<std::endl; if(ExistDirectory()){//входим в директорию на серваке и локально //std::cout<<FindFileDataLocal.cFileName<<std::endl; if(!FtpSetCurrentDirectory(ConnectedHandle, FindFileDataLocal.cFileName)){ std::cout<<FindFileDataLocal.cFileName<<std::endl; Error(7); std::cout<<">>>103<<<"<<std::endl; FullExit=true; break; } //else std::cout<<"FtpSetCurrentDirectory was done successfully!"<<std::endl; //local DirectoryPath+="\\"; DirectoryPath+=FindFileDataLocal.cFileName; if(!SetCurrentDirectory(DirectoryPath.c_str())){ Error(8); std::cout<<">>112<<"<<std::endl; FullExit=true; break; } //else std::cout<<"Directory chanched successfully!"<<std::endl; HandlerFilePathLocal=FindFirstFile((DirectoryPath+"\\*.*").c_str(), &FindFileDataLocal); if(HandlerFilePathLocal==INVALID_HANDLE_VALUE){ Error(3); FullExit=true; break; } FindNextFile(HandlerFilePathLocal, &FindFileDataLocal); }//if else{//создаем директорию if(!FtpCreateDirectory(ConnectedHandle, FindFileDataLocal.cFileName)){ Error(4); FullExit=true; break; } //else std::cout<<"FtpCreateDirectory was done successfully!"<<std::endl; if(!FtpSetCurrentDirectory(ConnectedHandle, FindFileDataLocal.cFileName)){ Error(7); std::cout<<">>>135<<<"<<std::endl; FullExit=true; break; } //else std::cout<<"FtpSetCurrentDirectory was done successfully!"<<std::endl; //local DirectoryPath+="\\"; DirectoryPath+=FindFileDataLocal.cFileName; if(!SetCurrentDirectory(DirectoryPath.c_str())){ Error(8); std::cout<<">>143<<<"<<std::endl; FullExit=true; break; } //else std::cout<<"Directory chanched successfully!"<<std::endl; HandlerFilePathLocal=FindFirstFile((DirectoryPath+"\\*.*").c_str(), &FindFileDataLocal); if(HandlerFilePathLocal==INVALID_HANDLE_VALUE){ Error(3); FullExit=true; break; } FindNextFile(HandlerFilePathLocal, &FindFileDataLocal); }//else }//if else{//it is a file if(FtpPutFile(ConnectedHandle, (DirectoryPath+"\\"+FindFileDataLocal.cFileName).c_str(), FindFileDataLocal.cFileName, FTP_TRANSFER_TYPE_UNKNOWN, 0)); //std::cout<<"File updated!"<<std::endl; else { Error(11); FullExit=true; break; } }//else //go on next file on local HDD if(FindNextFile(HandlerFilePathLocal, &FindFileDataLocal)){ //std::cout<<"Next item exist!"<<std::endl; } else{// go to the parent level //std::cout<<"Next item NOT exist!"<<std::endl; while(1){ //std::cout<<"Going to the parent level!"<<std::endl; EntrenceDirName="\0"; if(!ParentLevelGo()){FullExit=true; break;} else{//go to current DIR if(!SetCurrentDirectory(DirectoryPath.c_str())){ Error(8); std::cout<<">>175<<"<<std::endl; FullExit=true; break; } //else std::cout<<"Directory chanched successfully!"<<std::endl; HandlerFilePathLocal=FindFirstFile((DirectoryPath+"\\*.*").c_str(), &FindFileDataLocal); if(HandlerFilePathLocal==INVALID_HANDLE_VALUE){ Error(3); FullExit=true; break; } //std::cout<<FindFileDataLocal.cFileName<<std::endl; FindNextFile(HandlerFilePathLocal, &FindFileDataLocal); FindNextFile(HandlerFilePathLocal, &FindFileDataLocal); //std::cout<<FindFileDataLocal.cFileName<<std::endl; if(!FtpSetCurrentDirectory(ConnectedHandle, "..")){ Error(7); std::cout<<">>>195<<<"<<std::endl; FullExit=true; break; } //else std::cout<<"FtpSetCurrentDirectory was done successfully!"<<std::endl; //идем к тому эленменту, в который зашли if(!ItemFindLocal(EntrenceDirName, &HandlerFilePathLocal)){ Error(10); FullExit=true; break; } //если за ним нет ничего - идем снова на родительский уровень if(FindNextFile(HandlerFilePathLocal, &FindFileDataLocal)) break; else continue; }//while }//else }//else }//while //------------------------------- CloseHandle(ConnectedHandle); std::cout<<"Send data finished!"<<std::endl; LogFile.open((LocalPathToDataFile+"FTPAULog.txt").c_str(), std::ios_base::app | std::ios_base::out); time( &aclock ); /* Get time in seconds */ newtime = localtime( &aclock ); /* Convert time to struct tm form */ LogFile<<"Error : \t\t\t\t\t"<<ErrorString<<std::endl; LogFile<<"The termination of transfer of the data at\t"<<asctime( newtime )<<std::endl; LogFile.close(); //Delay(3000); //RepeatUntillKeyPressed(); return 0; }//------------------------------------------------------------------------------------------ --------------*/ bool ItemFindLocal(std::string ItemName, HANDLE *HDL){ std::string String1; HANDLE FindFileHandlerLocal; FindFileHandlerLocal=FindFirstFile((DirectoryPath+"\\*.*").c_str(), &FindFileDataLocal); if(FindFileHandlerLocal==INVALID_HANDLE_VALUE) Error(3); FindNextFile(FindFileHandlerLocal, &FindFileDataLocal); FindNextFile(FindFileHandlerLocal, &FindFileDataLocal); String1=FindFileDataLocal.cFileName; while(ItemName!=String1){ if(!FindNextFile(FindFileHandlerLocal, &FindFileDataLocal)){ return (false); }//if String1=FindFileDataLocal.cFileName; }//while (*HDL)=FindFileHandlerLocal; return (true); }//------------------------------------------------------------------------------------------ --------------*/ bool ParentLevelGo(void){ if(FilePathLocal==DirectoryPath) return (false); bool CycleExit=false; for(int i=DirectoryPath.length()-1; !CycleExit;i--){ if(DirectoryPath[i]=='\\') CycleExit=true; else EntrenceDirName.insert(0, DirectoryPath[i]); DirectoryPath.replace(i, 1, ""); }//for return (true); }//------------------------------------------------------------------------------------------ --------------*/ bool IsItDirectory(void){ if((FindFileDataLocal.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY) || (FindFileDataLocal.dwFileAttributes==48)//Arch || (FindFileDataLocal.dwFileAttributes==18)//hidden || (FindFileDataLocal.dwFileAttributes==17)//Only Read || (FindFileDataLocal.dwFileAttributes==51)//hidden+OR+arch || (FindFileDataLocal.dwFileAttributes==19)//hidden+OR || (FindFileDataLocal.dwFileAttributes==49)//arch+OR || (FindFileDataLocal.dwFileAttributes==50)//hidden+arch || (FindFileDataLocal.dwFileAttributes==20)//system dir || (FindFileDataLocal.dwFileAttributes==55)//SD+H+A+O || (FindFileDataLocal.dwFileAttributes==53)//SD+A+O || (FindFileDataLocal.dwFileAttributes==54)//SD+A+H || (FindFileDataLocal.dwFileAttributes==23)//SD+H+O || (FindFileDataLocal.dwFileAttributes==22)//SD+H || (FindFileDataLocal.dwFileAttributes==21)//SD+O || (FindFileDataLocal.dwFileAttributes==52)//SD+A ) return (true); return (false); }//------------------------------------------------------------------------------------------ --------------*/ bool DataRead(std::string *HostIPOrAddress, std::string *UserLogon, std::string *UserPassword, std::string *FilePathLocal){ char ch; int k=0; std::ifstream OpenedFile((LocalPathToDataFile+"FTPAutoUpdateData.txt").c_str()); if(!OpenedFile) return (false); while(k<4){ OpenedFile.get(ch); if(ch=='\n'){k++;continue;} if(ch=='\0') break; if(OpenedFile.eof()) break; switch(k){ case 0: (*HostIPOrAddress)+=ch; break; case 1: (*UserLogon)+=ch; break; case 2: (*UserPassword)+=ch; break; case 3: (*FilePathLocal)+=ch; break; default: Error(6); }//switch; }//while OpenedFile.close(); return (true); }//DataRead//------------------------------------------------------------------------*/ void RepeatUntillKeyPressed(void){ std::cout<<"Press any key..."<<std::endl; while(!kbhit()); }//void RepeatUntillKeyPressed(void)//--------------------------------------------------------------------*/ bool ConnectToFTPServer(void){ HINTERNET OpenedInetHandle; std::string HostIPOrAddress="\0", UserLogon="\0", UserPassword="\0"; //Open internet connection OpenedInetHandle=InternetOpen("FTPAutoUpdate V1.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); if(OpenedInetHandle==NULL){ Error(0); return (false); } std::cout<<"InternetOpen was successfully."<<std::endl; //Read data for reading data from server - user definition data if(!DataRead(&HostIPOrAddress, &UserLogon, &UserPassword, &FilePathLocal)){ Error(1); return (false); } std::cout<<"DataRead was done successfully."<<std::endl; //connect to the server ConnectedHandle=InternetConnect(OpenedInetHandle, HostIPOrAddress.c_str(), INTERNET_DEFAULT_FTP_PORT, UserLogon.c_str(), UserPassword.c_str(),INTERNET_SERVICE_FTP,0,0); if(ConnectedHandle==NULL){ Error(0); return (false); } std::cout<<"InternetConnect was done successfully."<<std::endl; return (true); }//----------------------------------------------------------------*/ void HelpData(void){ std::cout<< "*--------------------- Help data ---------------------*"<<std::endl; std::cout<< "* *"<<std::endl; std::cout<< "* If you has an error about local file message it *"<<std::endl; std::cout<< "* mean you have no 'FTPAutoUpdateData.txt' file or *"<<std::endl; std::cout<< "* it is empty. Please, fillout it. *"<<std::endl; std::cout<< "* *"<<std::endl; std::cout<< "* >>>File format<<< *"<<std::endl; std::cout<< "* *"<<std::endl; std::cout<< "* The first string must contain host IP or it name, *"<<std::endl; std::cout<< "* next string - user login, *"<<std::endl; std::cout<< "* next string must contain user password, *"<<std::endl; std::cout<< "* next string - full quality name to local directory, *"<<std::endl; std::cout<< "* each contain your files to transfere. *"<<std::endl; std::cout<< "* *"<<std::endl; std::cout<< "* Written by Didusenko Maksim. *"<<std::endl; std::cout<< "* [email protected] *"<<std::endl; std::cout<< "*******************************************************"<<std::endl; }//HelpData//------------------------------------------------------------------------------------------ ------ void Error(int Type){ // char ch; switch(Type){ case 0: //PrintOut(-1, GetLastError()); //std::cout<<"Error # "<<GetLastError()<<" !!!"<<std::endl; // CreateErrorLog(GetLastError()); break; case 1: ErrorString="Can't read data from local directory! It may be empty."; break; case 2: ErrorString="Can't read data from local directory! It was not defined!"; break; case 3: ErrorString="Can't read data from defined local directory!"; break; case 4: ErrorString="Can't create directory on sever!"; break; case 5: ErrorString="Can't write down file on sever!"; break; case 6: ErrorString="Can't undefined item in DataRead switch!"; break; case 7: ErrorString="Can't set current directory on server!"; break; case 8: ErrorString="Error!!! Can't set current local directory!"; break; case 9: ErrorString="Can't find local directory!"; break; case 10: ErrorString="Current item was not found!"; break; case 11: ErrorString="File can't put on srver!"; break; default: ErrorString="Uncknow error!"; break; }//switch if(GetLastError()==12029){ ErrorString="Server not found"; std::cout<<ErrorString<<std::endl; }//if else{ if(Type>11){ std::cout<<"Error # "<<GetLastError()<<" !!!"<<std::endl; ErrorString="Uncknow error!"; std::cout<<ErrorString<<std::endl; }//else else{ std::cout<<"Error!!! "<<ErrorString<<std::endl; }//else }//else }//Error()//-------------------------------------*/ ![]() ////////////////////////////////////////////////////////// ![]() Файл Error.h #ifndef Drmasiks_Error_Header_File #define Drmasiks_Error_Header_File #include <iostream> void Error(int Type){ // char ch; switch(Type){ case 0: //PrintOut(-1, GetLastError()); //std::cout<<"Error # "<<GetLastError()<<" !!!"<<std::endl; // CreateErrorLog(GetLastError()); break; case 1: std::cout<<"Error!!! Can't read data from local directory!"<<std::endl; std::cout<<"It can be empty!"<<std::endl; break; case 2: std::cout<<"Error!!! Can't read data from local directory!"<<std::endl; std::cout<<"It was not defined!"<<std::endl; break; case 3: std::cout<<"Error!!! Can't read data from defined local directory!"<<std::endl; std::cout<<">>> Panic <<<"<<std::endl; break; case 4: std::cout<<"Error!!! Can't create directory on sever!"<<std::endl; break; case 5: std::cout<<"Error!!! Can't write down file on sever!"<<std::endl; std::cout<<">>> Panic <<<"<<std::endl; break; case 6: std::cout<<"Error!!! Can't undefined item in DataRead switch!"<<std::endl; std::cout<<">>> Panic <<<"<<std::endl; break; case 7: std::cout<<"Error!!! Can't set current directory on server!"<<std::endl; break; case 8: std::cout<<"Error!!! Can't set current local directory!"<<std::endl; break; case 9: std::cout<<"Can't find local directory!"<<std::endl; break; case 10: std::cout<<"Current item was not found!"<<std::endl; break; case 11: std::cout<<"File can't put on srver!"<<std::endl; break; default: std::cout<<"Uncknow error!"<<std::endl; break; }//switch std::cout<<"Error # "<<GetLastError()<<" !!!"<<std::endl; }//Error()//-------------------------------------*/ #endif ![]() |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
Не так дело не пойдетDrMasik ты ж ему подумать не даеш, а сразу код лепишь, у него ж прогресса не будет
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
DrMasik к стати такие коды лучше по мылу отпровляй, кому надо будет сам попросит.
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
DrMasik |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.12.2002 Репутация: нет Всего: нет |
Согласен, что подумать не дам. Хотя, если он будет не просто читать и вставлять, а еще и разберется почему так, а не иначе, хотя иногда можно и иначе, это и так ясно, он будет учиться... Как говорил мой учитель:"научился писать - научись читать..."
|
|||
|
||||
DrMasik |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.12.2002 Репутация: нет Всего: нет |
Дело в том, что я уже не один раз столкнулся с тем, что такого мыла уже не существует, и дабы у людей не возникало бодобных ситуаций я сделал то. что сделал!
|
|||
|
||||
XpyDi |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 25.11.2002 Где: USSR Репутация: нет Всего: 2 |
Прощу прощения за флейм, но по-поводу кода на прошлой странице я считаю найлучшим вариантом держать хостинг где-нибудь на narod.ru(или что-то в этом роде), куда и скидывать подобные файлы, а те кому это действительно необходимо качали бы уже себе на винчестер.
|
|||
|
||||
Unregistered |
|
|||
Unregistered |
вот млин ... чел поджелдился инфой ..а вы его критикуете :-)
гы . и при этом хацкер растет :-))) гы гы ... А потому еще попросит как пароль поменять на машине , путем использования ВинАпи :-))) гы |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |