![]() |
|
Модераторы: bartram, Akella |
![]()
|
|
| Гога |
|
|||
|
Unregistered |
Подскажите, пожалуйста, как из программы захватить картинку с вебкамеры (USB)?
|
|||
|
||||
| Guest |
|
|||
|
Unregistered |
|
|||
|
||||
| Guest |
|
|||
|
Unregistered |
//---------------------------------------------------------------------------
#include <vcl.h> // Библиотека компонентов Buildera #include <MmSystem.h> // Библиотека системных потоков #include <vfw.h> // Библиотека драйверов WDM #include <wingdi.h> // Библиотека диспечеров вывода потока #include <winuser.h> // Библиотека пользователя WDM #include <Clipbrd.hpp> // Библиотека ScreenServera (клиборд) #include <Sysutils.hpp> // Библиотека определения свободного места #include <mmsystem.h> // Привод CDR #include <fstream.h>; // Поток файла #include <systdate.h>; // системное время #include <process.h> // процессорный момент #pragma hdrstop // Библиотека указателей функций #include "Unit1Panel.h" // Библиотека портатипов функций //--------------------------------------------------------------------------- #pragma package(smart_init)// Быстрая инициализация #pragma link "LMDCustomComboBox" #pragma link "LMDDriveComboBox" #pragma link "LMDCustomComponent" #pragma link "LMDIniCtrl" #pragma link "LMDBaseDialog" #pragma link "LMDContainerComponent" #pragma link "LMDDirDlg" #pragma link "LMDGlobalHotKey" #pragma link "LMDStarter" #pragma resource "*.dfm" // Подключаемый ресурс TForm1 *Form1; // Конструктор формы Graphics::TBitmap *Bitmap = new Graphics::TBitmap(); _SECURITY_ATTRIBUTES *lpSecAttrib; HWND VFWAPI hWndC; // Handle драйвера захвата видео HWND hVideo; // Handle окна драйвера захвата CAPTUREPARMS SetupVideo; // Настройки драйвера захвата CAPSTATUS s; // Положение параметров драйвера захвата CAPDRIVERCAPS cpDriver; // Определяет возможности драйвера захвата ICINFO Cinfo; int errs; //--------------------------------------------------------------------------- // Структуры Устройства захвата BOOL VFWAPI wfDriver; // Присутствие платы WORD wSize=0xfffffff; // Структура Длинны WORD wDriverIndex; // Индекс драйвера 0.....9 LPSTR lpszName; // Указатель на буфер с именем устройства захвата INT cbName=255; // Размер буфера для имени драйвера LPSTR lpszVer; // Указатель на буфер с версией драйвера захвата INT cbVe=255; // Размер для буфера с версией драйвера захвата DWORD dwRequestMicroSecPerFrame = 33333;//скорость кадров в микросекундах BOOL fMakeUserHitOKToCapture; // включает диалог подтверждения записи UINT wPercentDropForError; // максимально допустимый процент выпадения кадров BOOL fYield; // включает создания дополнительного фонового подтока для захвата видео DWORD dwIndexSize; // максимальное количество индексов файла UINT wChunkGranularity; BOOL fUsingDOSMemory; // Использование памяти UINT wNumVideoRequested; BOOL fCaptureAudio; // указывает, записывать ли звук UINT wNumAudioRequested; UINT vKeyAbort; // устанавливает кнопку, нажатием которой можно прервать запись BOOL fAbortLeftMouse; // активизирует прерывание записи нажатием левой клавиши мыши BOOL fAbortRightMouse; // активизирует прерывание записи нажатием правой клавиши мыши BOOL fLimitEnabled; UINT wTimeLimit; BOOL fMCIControl; BOOL fStepMCIDevice; DWORD dwMCIStartTime; DWORD dwMCIStopTime; BOOL fStepCaptureAt2x; UINT wStepCaptureAverageFrames; DWORD dwAudioBufferSize; BOOL fDisableWriteCache; UINT AVStreamMaster; DWORD nLength; LPVOID lpSecurityDescriptor; BOOL bInheritHandle; //--------------------------------------------------------------------------- UINT uiImageWidth; UINT uiImageHeight; BOOL fLiveWindow; BOOL fOverlayWindow; BOOL fScale; POINT ptScroll; BOOL fUsingDefaultPalette; BOOL fAudioHardware; BOOL fCapFileExists; DWORD dwCurrentVideoFrame; DWORD dwCurrentVideoFramesDropped; DWORD dwCurrentWaveSamples; DWORD dwCurrentTimeElapsedMS; HPALETTE hPalCurrent; BOOL fCapturingNow; DWORD dwReturn; UINT wNumVideoAllocated; UINT wNumAudioAllocated; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- // Переменные используемые в программе __int64 FreeSpaceDisk; // Свободное место на диске в байтах float FreeSpaceDiskC; // Свободное место на диске в килобайтах int HeightW; // Ширина окна WDM int WidthW; // Высота окна WDM bool DriverWDM = 0; // По умолчанию плат захвата нет char *Name_; // Имя устройства захвата видео int TempDriver; // Времянная переменная AnsiString Expansion; // расширение нмини файла AnsiString FileNameStart; // созданое мимя файла AnsiString FileNamePatch; // Путь к файлу AnsiString FULLFILENAME; // Полное имя файла bool Codek = false; // по умолчанию кодек не используется int KeyPres = 0; // Флаг нажатия кнопки REC \ PAUSE const char *DIR; // Служебная int hor,minut,minut2,sec,sec2;// часы минуты секунды AnsiString OLDRECORDFILE; // последний записанный файл bool Limited = 0; // от чайников AnsiString Temp; // служебная AnsiString Temp1; // служебная bool CDR_W = 0; // //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { int i; // Для зачистки ненужного AnsiString str_data =DateToStr(Date()); // Дата начала операции i=str_data.AnsiPos("."); // Убираем ненужное str_data.Delete(i,1); // Убираем ненужное i=str_data.AnsiPos("."); // Убираем ненужное str_data.Delete(i,1); // Убираем ненужное str_data = "C:\\ARCHIV\\" + str_data; // полный путь к базе DIR = str_data.c_str(); // Получаем дату CreateDirectory("C:\\ARCHIV\\",lpSecAttrib); // Место для хранения CreateDirectory(DIR,lpSecAttrib); // Создаем директорию с датой HWND hVideo = WDMWindows->Handle; // Получаем Handle окна видео FreeSpaceDiskC = DiskFree(3)/1024; // Свободное место на диске С в Kb HeightW = WDMWindows->Height; // Ширина окна сбора WidthW = WDMWindows->Width; // Высота окна сбора // Создаем окно сбора видео "WDMWindows" hWndC = capCreateCaptureWindow (" ",WS_CHILD | WS_VISIBLE,0,0,WidthW,HeightW,hVideo,0); // Проверяем наличие плат захвата capDriverConnect(hWndC,0); // Конектимся к драйверу capGetStatus(hWndC,&s,sizeof(s)); // Читаем настройки capOverlay(hWndC,1); // Работаем через оверлей capCaptureGetSetup(hWndC,&SetupVideo,sizeof(SetupVideo)); // Читаем настройки SetupVideo.dwRequestMicroSecPerFrame = 33333;// 30 кадров в секунду SetupVideo.fMakeUserHitOKToCapture = 0; // Отключаем подтверждение записи SetupVideo.fYield = 1; // Запускаем 2 поток SetupVideo.wPercentDropForError=100; // Допускаем выпадение 100 % SetupVideo.wChunkGranularity=sizeof wChunkGranularity;//1000; // SetupVideo.fUsingDOSMemory = true; // Блокируем остановку SetupVideo.fAbortLeftMouse=0; // Блокируем остановку по мышке SetupVideo.fAbortRightMouse=0; // Блокируем остановку по мышке SetupVideo.fLimitEnabled=0; // Снимаем блокировку на лимит времени SetupVideo.dwIndexSize=0xffffffff; // Максимальный номер индексных данных в файле AVI SetupVideo.AVStreamMaster=AVSTREAMMASTER_NONE;//длительность аудио и видео потоков может отличиться SetupVideo.fMCIControl=false; // Контроль по времени обрубаем SetupVideo.fStepMCIDevice=false; // на всякий случай //SetupVideo.fStepCaptureAt2x=true; // двойное качество //SetupVideo.dwAudioBufferSize=sizeof dwAudioBufferSize; // Сформируется сам SetupVideo.fDisableWriteCache=1; capCaptureSetSetup(hWndC,&SetupVideo,sizeof(SetupVideo)); // Заполняем структуру настроек capDriverGetCaps(hWndC,&cpDriver,sizeof(cpDriver)); capGetStatus(hWndC,&s,sizeof(s)); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { SystemTime->Caption = DateToStr(Date())+ " "+ TimeToStr(Time()); // отображаем на фоне capGetStatus(hWndC,&s,sizeof(s)); // Проверяем статус FreeSpaceDiskC = DiskFree(3); if(s.fCapturingNow==1) // Запись пошла ? { Label1->Caption="Записано : "+ IntToStr(hor) + " час. " + IntToStr(minut2)+ " мин. " + IntToStr(sec2) + " сек. "; sec = (s.dwCurrentTimeElapsedMS/1000); // получаем секунды sec2 = sec; // некоторые преобразования if (sec2>=60) sec2=sec2-(60*minut); // получаем минуты minut = (s.dwCurrentTimeElapsedMS/60000);// преобразования minut2 =minut; if (minut2>=60) minut2=minut2-(60*hor); hor = minut / 60; // соответственно часы Label2->Caption="Обработано : "+IntToStr(s.dwCurrentVideoFrame)+" кадров."; Label4->Caption="Стробовых : "+IntToStr(s.dwCurrentVideoFramesDropped)+" кадров."; Label3->Caption="Свободно : " + FloatToStr(FreeSpaceDiskC)+" Байт"; StatusBar1->Panels->Items[1]->Text = " Идет Запись "; // С статус бар путь с именем } else { Label1->Caption=" "; // в случае если нет записи Label2->Caption=" "; // в случае если нет записи Label3->Caption=" "; // в случае если нет записи Label4->Caption=" "; StatusBar1->Panels->Items[1]->Text = " ";// С статус бар путь с именем } Application->ProcessMessages(); // перерисовка заполнения } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonARCClick(TObject *Sender) { ButtonARC->Font->Color=clRed; // кнопку красным ButtonEDT->Font->Color=clBlack; // кнопку черным Expansion= ".MPEG"; // Расширение .MPEG FileNameStart = "A_"; // Заголовок файла LMDIniCtrl1->WriteBool("Состояние","ARC",true); // Состояние кнопки ARC - вкл LMDIniCtrl1->WriteBool("Состояние","EDT",false); // Состояние кнопки EDT - выкл Codek = true; // Покажем кодеки BYTE keys[256]; // имитация комбинации GetKeyboardState(keys); // имитация комбинации keys[17]=128; // имитация комбинации SetKeyboardState(keys); // имитация комбинации keybd_event(87,0,0,0); // имитация комбинации } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonEDTClick(TObject *Sender) { ButtonEDT->Font->Color=clRed; // кнопку красным ButtonARC->Font->Color=clBlack; // кнопку черным Expansion= ".AVI"; // Расширение .AVI FileNameStart = "E_"; // Заголовок файла LMDIniCtrl1->WriteBool("Состояние","ARC",false); // Состояние кнопки ARC - выкл LMDIniCtrl1->WriteBool("Состояние","EDT",true); // Состояние кнопки EDT - вкл Codek = false; // Диалок с кодеками не кажем BYTE keys[256]; // имитация комбинации GetKeyboardState(keys); // имитация комбинации keys[17]=128; // имитация комбинации SetKeyboardState(keys); // имитация комбинации keybd_event(69,0,0,0); // имитация комбинации } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonHDDClick(TObject *Sender) { ButtonHDD->Font->Color=clRed; // кнопку красным ButtonCDR->Font->Color=clBlack; // кнопку черным LMDIniCtrl1->GetIniName(); // Откроем INI файл FileNamePatch = LMDDirDlg1->Path; // Директория пути к файлу LMDIniCtrl1->WriteBool("Состояние","HDD",true); // Состояние кнопок в INI LMDIniCtrl1->WriteBool("Состояние","CDR",false); // Состояние кнопок в INI CDR_W = 0; LMDIniCtrl1->WriteString("Путь","Каталог",Temp1); // последний каталог BYTE keys[256]; // имитация комбинации GetKeyboardState(keys); // имитация комбинации keys[17]=128; // имитация комбинации SetKeyboardState(keys); // имитация комбинации keybd_event(67,0,0,0); // имитация комбинации } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonCDRClick(TObject *Sender) { ButtonCDR->Font->Color=clRed; // кнопку красным ButtonHDD->Font->Color=clBlack; // кнопку черным LMDIniCtrl1->WriteBool("Состояние","HDD",false); // CD-R Активен LMDIniCtrl1->WriteBool("Состояние","CDR",true); //Состояние кнопок в INI CDR_W = 1; BYTE keys[256]; // имитация комбинации GetKeyboardState(keys); // имитация комбинации keys[17]=128; // имитация комбинации SetKeyboardState(keys); // имитация комбинации keybd_event(88,0,0,0); // имитация комбинации } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonREC_PAUSEClick(TObject *Sender) { if (LMDIniCtrl1->ReadBool("Состояние","ARC",1)==1) ButtonARC->Click(); // ARC -вкл if (LMDIniCtrl1->ReadBool("Состояние","ARC",1)==0) ButtonEDT->Click(); // ARC -выкл if (LMDIniCtrl1->ReadBool("Состояние","HDD",1)==1) ButtonHDD->Click(); // ARC -вкл if (LMDIniCtrl1->ReadBool("Состояние","HDD",1)==0) ButtonCDR->Click(); // ARC -выкл FileNamePatch = LMDIniCtrl1->ReadString("Путь","Каталог","C:\\"); //Активная или НЕТ BYTE keys[256]; GetKeyboardState(keys); // имитация комбинации keys[17]=128; // имитация комбинации SetKeyboardState(keys); // имитация комбинации keybd_event(45,0,0,0); // имитация комбинации } //--------------------------------------------------------------------------- void __fastcall TForm1::StartRECORDKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { KeyPres++; // выставили флаг записи ButtonREC_PAUSE->Caption="RECORD"; // надпись на кнопке ButtonREC_PAUSE->Font->Color=clRed; // красным цветом ButtonARC->Enabled=false; // отключаем все кнопки ButtonEDT->Enabled=false; // ButtonCDR->Enabled=false; // ButtonHDD->Enabled=false; // ButtonPLAY->Enabled=false; // STARTRECORDING(); // запуск функции записи Timer2->Enabled=true; if (KeyPres==2) // Второе нажатие на клавишу { ButtonREC_PAUSE->Font->Color=clBlack; //надпись черным ButtonREC_PAUSE->Caption="REC/AUTO"; // меняем название KeyPres=0; // флаг сбросили ButtonARC->Enabled=true; // включаем ButtonEDT->Enabled=true; // все ButtonCDR->Enabled=true; // кнопки ButtonHDD->Enabled=true; // ButtonPLAY->Enabled=true; // Codek = false; // Диалок с кодеками не кажем Timer2->Enabled=false; Timer3->Enabled=false; StaticText1->Font->Color=clBlack; STOPRECORDING(); // функция стоп записи } } //--------------------------------------------------------------------------- void __fastcall TForm1::LMDGlobalHotKey1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { SendMessage(hWndC,WM_CAP_DLG_VIDEOSOURCE,0,0L); // Диалог выбора устройства } //--------------------------------------------------------------------------- void __fastcall TForm1::LMDGlobalHotKey2KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { SendMessage(hWndC,WM_CAP_DLG_VIDEOCOMPRESSION,0,0L); // Диалог компрессии } //--------------------------------------------------------------------------- void __fastcall TForm1::LMDGlobalHotKey3KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { SendMessage(hWndC,WM_CAP_DLG_VIDEOFORMAT,0,0L); // Формат видео } //--------------------------------------------------------------------------- void __fastcall TForm1::LMDGlobalHotKeyARCKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Действие по нажатию Ctrl+W ButtonARC->Font->Color=clRed; // кнопку красным ButtonEDT->Font->Color=clBlack; // кнопку черным Expansion= ".MPEG"; // Расширение .MPEG FileNameStart = "A_"; // Заголовок файла LMDIniCtrl1->WriteBool("Состояние","ARC",true); // Состояние кнопки ARC - вкл LMDIniCtrl1->WriteBool("Состояние","EDT",false); // Состояние кнопки EDT - выкл Codek = true; // Покажем кодеки } //--------------------------------------------------------------------------- void __fastcall TForm1::LMDGlobalHotKeyEDTKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Действие по нажатию Ctrl+У ButtonEDT->Font->Color=clRed; // кнопку красным ButtonARC->Font->Color=clBlack; // кнопку черным Expansion= ".AVI"; // Расширение .AVI FileNameStart = "E_"; // Заголовок файла LMDIniCtrl1->WriteBool("Состояние","ARC",false); // Состояние кнопки ARC - выкл LMDIniCtrl1->WriteBool("Состояние","EDT",true); // Состояние кнопки EDT - вкл Codek = false; // Диалок с кодеками не кажем } //--------------------------------------------------------------------------- void __fastcall TForm1::LMDGlobalHotKeyCDRKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Действие по нажатию Ctrl+X ButtonCDR->Font->Color=clRed; // кнопку красным ButtonHDD->Font->Color=clBlack; // кнопку черным LMDIniCtrl1->WriteBool("Состояние","HDD",false); // CD-R Активен LMDIniCtrl1->WriteBool("Состояние","CDR",true); //Состояние кнопок в INI } //--------------------------------------------------------------------------- void __fastcall TForm1::LMDGlobalHotKeyHDDKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Действие по нажатию Ctrl+C ButtonHDD->Font->Color=clRed; // кнопку красным ButtonCDR->Font->Color=clBlack; // кнопку черным LMDIniCtrl1->GetIniName(); // Откроем INI файл FileNamePatch = LMDDirDlg1->Path; // Директория пути к файлу LMDIniCtrl1->WriteBool("Состояние","HDD",true); // Состояние кнопок в INI LMDIniCtrl1->WriteBool("Состояние","CDR",false); // Состояние кнопок в INI LMDIniCtrl1->WriteString("Путь","Каталог",FileNamePatch); // последний каталог } //--------------------------------------------------------------------------- void __fastcall TForm1::LMDGlobalHotKeyREC_STOPKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Действие по нажатию Ctrl+S KeyPres++; ButtonREC_PAUSE->Caption="RECORDING"; ButtonREC_PAUSE->Font->Color=clRed; ButtonARC->Enabled=false; ButtonEDT->Enabled=false; ButtonCDR->Enabled=false; ButtonHDD->Enabled=false; ButtonPLAY->Enabled=false; STARTRECORDING(); if (KeyPres==2) { ButtonREC_PAUSE->Font->Color=clBlack; ButtonREC_PAUSE->Caption="REC/AUTO"; KeyPres=0; ButtonARC->Enabled=true; ButtonEDT->Enabled=true; ButtonCDR->Enabled=true; ButtonHDD->Enabled=true; ButtonPLAY->Enabled=true; STOPRECORDING(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::LMDGlobalHotKeyPLAYKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Действие по нажатию Ctrl+D LMDStarter1->Command=OLDRECORDFILE; LMDStarter1->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm1::STARTRECORDING() { // ЗАПИСЬ int i; if (Limited==1) return; Limited =1; ShortTimeFormat ="hh:mm"; if (CDR_W==1) { capFileAlloc(hWndC,4535334); errs=3; } AnsiString str_time =TimeToStr(Time()); // Время начала операции AnsiString str_data =DateToStr(Date()); // Дата начала операции i=str_data.AnsiPos("."); // Убираем ненужное str_data.Delete(i,1); // Убираем ненужное i=str_data.AnsiPos("."); // Убираем ненужное str_data.Delete(i,1); // Убираем ненужное Temp1 = "C:\\ARCHIV\\" + str_data+"\\"; // Укажем путь FileNamePatch = Temp1; // сл. преобразования if (Codek==1) SendMessage(hWndC,WM_CAP_DLG_VIDEOCOMPRESSION,0,0L); Temp = FileNameStart+str_data+"_"+str_time; // Формируем имя файла i=Temp.AnsiPos("."); // Убираем ненужное Temp.Delete(i,1); // Убираем ненужное i=Temp.AnsiPos("."); // Убираем ненужное Temp.Delete(i,1); // Убираем ненужное i=Temp.AnsiPos(":"); // Убираем ненужное Temp.Delete(i,1); // Убираем ненужное i=Temp.AnsiPos(":"); // Убираем ненужное Temp.Delete(i,1); // Убираем ненужное i=Temp.Length(); // Убираем ненужное Temp.Delete(i,1); // Убираем ненужное Temp.Delete(i-1,1); // Убираем ненужное FULLFILENAME = Temp + Expansion; // Полное имя файла OLDRECORDFILE = FileNamePatch = FileNamePatch + Temp + Expansion; // С путем LMDIniCtrl1->WriteString("Путь","Последний записанный",OLDRECORDFILE); StatusBar1->Panels->Items[0]->Text = FileNamePatch; // С статус бар путь с именем StatusBar1->Panels->Items[1]->Text = " Идет Запись "; // С статус бар путь с именем char *b=FileNamePatch.c_str(); // имя файла записи capFileSetCaptureFile(hWndC,b); // непосредственно запись capGetStatus(hWndC,&s,sizeof(s)); // получаем статус capCaptureSequence(hWndC); // САМ ЗАХВАТ } //--------------------------------------------------------------------------- void __fastcall TForm1::STOPRECORDING() { // СТОП Limited = 0; // к первому нажатию capCaptureStop(hWndC); // тормозим захват if(errs==3) {Application->MessageBox("Невозможно найти Nero Burning Rom v 7.0.11.0 \n файл сохранен на HDD диске"," Ошибка записи на DVD-R ",MB_OK|MB_ICONHAND);} } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonPLAYClick(TObject *Sender) { ButtonPLAY->Font->Color=clRed; // кнопку красным ButtonREC_PAUSE->Font->Color=clBlack; // кнопку черным LMDStarter1->Command=LMDIniCtrl1->ReadString("Путь","Последний записанный",""); LMDStarter1->Execute(); // читаем INI BYTE keys[256]; // имитация комбинации GetKeyboardState(keys); // имитация комбинации keys[17]=128; // имитация комбинации SetKeyboardState(keys); // имитация комбинации keybd_event(68,0,0,0); // имитация комбинации } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer2Timer(TObject *Sender) { StaticText1->Font->Color=clBlack; Timer3->Enabled=true; Timer2->Enabled=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer3Timer(TObject *Sender) { StaticText1->Font->Color=clRed; Timer2->Enabled=true; Timer3->Enabled=false; } //--------------------------------------------------------------------------- |
|||
|
||||
| Gigabyte |
|
|||
|
Студент-халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 1.11.2004 Где: ПЫтер Репутация: нет Всего: 3 |
Всё проще: на Windows xp есть хорошая програмка называется она Windows Movie Maker лежит она в стандартных. Так чот дерзай.
-------------------- ![]() ![]() |
|||
|
||||
![]()
|
| Правила форума "Windows" | |
|
|
Запрещается! 1. Обсуждать взлом и делиться кряками 2. Способствовать созданию и распространению вирусов
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS Windows | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |