Прокси свичер, программка для смены прокси. Полностью меняет прокси на компе, прописывает в реестре. (Ссылка на скачивание программки в самом низу) Можно устанавливать как один прокси, так можно и добавить список в файле и перебирать. Добавляем один прокси
Рубрика: MFC
Собственные функции MFC
Функция создает процесс CreateProcess и перенаправляет вывод Показать »
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
//фукнкция создает процесс с помощью CreateProcess и читает из него данные //для консольного приложения CString MyCreateProcess(CString name, CString param) { char buf[1024]; //буфер ввода/вывода STARTUPINFO si; SECURITY_ATTRIBUTES sa; PROCESS_INFORMATION pi; HANDLE newstdout,read_stdout; //дескрипторы // пайпов sa.lpSecurityDescriptor = NULL; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = true; //разрешаем наследование дескрипторов if (!CreatePipe(&read_stdout,&newstdout,&sa,0)) //создаем пайп // для stdout { AfxMessageBox(L"CreatePipe"); return L""; } GetStartupInfo(&si); //создаем startupinfo для // дочернего процесса /* Параметр dwFlags сообщает функции CreateProcess как именно надо создать процесс. STARTF_USESTDHANDLES управляет полями hStd*. STARTF_USESHOWWINDOW управляет полем wShowWindow. */ si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; si.hStdOutput = newstdout; si.hStdError = newstdout; //подменяем дескрипторы для // char app_spawn[] = L"d:\\winnt\\system32\\cmd.exe"; //это просто // пример, //замените на то, // что вам нужно // TCHAR szCmdline[]=L"recognition.exe img.png"; // CString str(L"recognition.exe img.png"); //создаем дочерний процесс if (!CreateProcess(name.GetBuffer(),param.GetBuffer(),NULL,NULL,TRUE,HIGH_PRIORITY_CLASS, NULL,NULL,&si,&pi)) { AfxMessageBox(L"CreateProcess"); CloseHandle(newstdout); CloseHandle(read_stdout); return L""; } unsigned long exit=0; //код завершения процесса unsigned long bread; //кол-во прочитанных байт unsigned long avail; //кол-во доступных байт CString result(L"");//результат std::fill(buf,buf+1024,0); for(;;) //основной цикл программы { GetExitCodeProcess(pi.hProcess,&exit); //пока дочерний процесс // не закрыт if (exit != STILL_ACTIVE) break; PeekNamedPipe(read_stdout,buf,1023,&bread,&avail,NULL); //Проверяем, есть ли данные для чтения в stdout if (bread != 0) { std::fill(buf,buf+1024,0); if (avail > 1023) { while (bread >= 1023) { ReadFile(read_stdout,buf,1023,&bread,NULL); //читаем из // пайпа stdout CString str;str.Format(L"%S",buf); // AfxMessageBox(str); result+=str; std::fill(buf,buf+1024,0); } } else { ReadFile(read_stdout,buf,1023,&bread,NULL); CString str;str.Format(L"%S",buf); // AfxMessageBox(str); result+=str; } } } CloseHandle(pi.hThread); CloseHandle(pi.hProcess); //небольшая уборка за собой CloseHandle(newstdout); CloseHandle(read_stdout); return result; } |
WebBrowser, функция копирует изображение в буфер из браузера Показать »
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
//Функция добавляет изображение в буфер //принимает // 1. CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2>& pDoc2 // 2. CComQIPtr<IHTMLElement,&IID_IHTMLElement> pImgElement; BOOL AddImgToBuffer(CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2>&pDoc2, CComQIPtr<IHTMLElement,&IID_IHTMLElement>& pImgElement) { IHTMLElement* pelmBody=NULL;//тело документа IHTMLElement2* pelmBodyTwo=NULL;//тело документа 2 IDispatch* pdispCtrlRange=NULL; IDispatch* pdispImgElement=NULL; IHTMLControlRange* pCtrlRange=NULL; IHTMLControlElement* pCtrlElement = NULL; // 1. получаем IHTMLElement* pelmBody = NULL; if(FAILED(pDoc2->get_body(&pelmBody)) || pelmBody == NULL) {AfxMessageBox(L"net pelmBody");return FALSE;} // 2. получаем IHTMLElement2* pelmBodyTwo = NULL; if (FAILED(pelmBody->QueryInterface(IID_IHTMLElement2, (void**) &pelmBodyTwo)) || pelmBodyTwo == NULL) {AfxMessageBox(L"net pelmBodyTwo");return FALSE;} // 3. получаем IDispatch* pdispCtrlRange = NULL; if (FAILED(pelmBodyTwo->createControlRange(&pdispCtrlRange)) || pdispCtrlRange == NULL) {AfxMessageBox(L"net pelmBodyTwo");return FALSE;} // 4. получаем IHTMLControlRange* pCtrlRange = NULL; if (FAILED(pdispCtrlRange->QueryInterface(IID_IHTMLControlRange, (void**) &pCtrlRange)) || pCtrlRange == NULL) {AfxMessageBox(L"net pCtrlRange");return FALSE;} // 5. получаем IHTMLControlElement* pCtrlElement = NULL; if (FAILED(pImgElement->QueryInterface(IID_IHTMLControlElement, (void**) &pCtrlElement)) || pCtrlElement == NULL) {AfxMessageBox(L"net pCtrlElement");return FALSE;} // 6. добавляем элементв Control if(FAILED(pCtrlRange->add(pCtrlElement))){AfxMessageBox(L"not pCtrlRange->add(pCtrlElement)");} // 7. выполняем команду (походу коппирует в буфер изображение в браузере) VARIANT_BOOL vbReturn; VARIANT vEmpty; VariantInit(&vEmpty); if(FAILED( pCtrlRange->execCommand(L"Copy", VARIANT_FALSE,vEmpty, &vbReturn) )) {AfxMessageBox(L"not execCommand");return FALSE;} return TRUE; } |
Преобразование из CStringW в char* Показать » Почитать за преобразования различных типов можно тут. Функция которая преобразует CStringW в char*
1 2 3 4 5 6 7 8 9 |
//преобразовывает CStringW в Char char* CStringW_to_char(CStringW str) { const size_t newsizew = (str.GetLength() + 1)*2; char *nstringw = new char[newsizew]; size_t convertedCharsw = 0; wcstombs_s(&convertedCharsw, nstringw, newsizew, str, _TRUNCATE ); return nstringw; } |
Parser_fl_ru программка для автоматических ответов под проектами :)
Программка для автоматического отсылания сообщения под проектами на сайте fl.ru Запускаем программуку в настройках вводим логин пароль и сообщение которое хотите оставить, так же вводим время задержки между запросами, чем больше чем меньше шансов что забанят, вводим с какой страницы начинаем и количество страниц в постраничной
MFC Сериализация диалогового приложения Serialize
Здорова! Сегодня разберем как создать сериализацию для диалогового приложения. И так приступим. Создаем диалоговое приложение, в классе диалога перезагружаем функцию Serialize и добавляем в нее код Ctest_fl_ruDlg::Serialize »
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void Ctest_fl_ruDlg::Serialize(CArchive& ar) { AfxMessageBox(L"Serialize"); TRACE("Serialize\n"); CDialogEx::Serialize(ar);//вызываем функцию предка if (ar.IsStoring()) { // storing code ar <<m_cLogin<<m_cPass; } else { // loading code TRACE("Loading code\n"); ar >>m_cLogin>>m_cPass; } } |
[warning]Нужно вроде обязательно вызвать функцию для базового класса CDialogEx::Serialize[/warning] Дальше нужно добавить в определение класса макрос
1 |
DECLARE_SERIAL(Ctest_fl_ruDlg) |
и в файл с определениями функций класса
1 |
IMPLEMENT_SERIAL(Ctest_fl_ruDlg,CDialogEx,1) |
Если…
MFC DECLARE_EVENTSINK_MAP отлов событий в WebBrowser
Здорова! Сегодня разберем такой макрос как DECLARE_EVENTSINK_MAP. В WebBrowser существуют события DWebBrowserEvents2, почитать за этот интерфейс можно тут. За DECLARE_EVENTSINK_MAP читаем тут. Приступим к реализации отлова событий. Создаем приложение MFC на основе диалоговых окон, подключаем и WebBrowser, вообще директиву #import можно не использовать, WebBrowser походу уже подключен по умлочанию имеются интерфейсы, потому что когда мы…
MFC Программирование многопоточного приложения
Здорова! Сегодня разберем как создаются многопоточные приложения. Про то как создаются однопоточные приложения мы уже разобрали тут. Немножко теории и терминов Процесс (process) — это выполняемая программа, обладающая собственной памятью, описателями файлов и другими системными ресурсами. Процесс может допускать несколько параллельных путей исполнения кода, называемых потоками (threads). Потоки в Windows бывают двух видов: рабочие потоки…
MFC Обработка сообщений Windows в однопоточной программе
Здорова! Немножко разберемся как обрабатывает сообщения Windows в однопоточной программе и создадим эту программку тестовую. В каждой программе виндовс спрятаны следующие инструкции
1 2 3 4 5 |
while(::GetMessage(&message,NULL,0,0)) { ::TranslateMessage(&message); ::DispatchMessage(&message); } |
Это бесконечный цикл из которого никогда не будет выхода, потому что если нету сообщений функция GetMessage ждет пока они появятся, про нее вы можете почитать тут. Windows определяет, какие сообщения принадлежат вашей…
MFC функции GetMessage и PeekMessage, чем они отличаются?
Здорова! Сегодня разберем такие функции как GetMessage и PeekMessage и чем они отличаются. GetMessage немножно теории Функция GetMessage применяется для отлова сообщений вот в такой конструкции
1 2 3 4 5 6 |
MSG message; if(GetMessage(&message,NULL,0,0)) { ::TranslateMessage(&message); ::DispatchMessage(&message); } |
Эта функция работает следующим образом, если есть в очереди сообщения она возвращает true и входит в if, если нету сообщений то эта функция походу не будет возвращать false…
Работа в Webbrowser
Сохранение текста страницы с помощью IHTMLDocument3 Показать »
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
CComQIPtr<IHTMLDocument3,&IID_IHTMLDocument3> pADocument3; IDispatch* pdispTmpVal3; pIWeb->get_Document(&pdispTmpVal3);//получаем документ pADocument3 = pdispTmpVal3; IHTMLElement* html; pADocument3->get_documentElement(&html); BSTR temp; html->get_innerHTML(&temp); _bstr_t text2(L"<script type=\"text/javascript\">\n"); text2+=_bstr_t(L"alert('hellow world!');\n"); text2+=L"document.getElementById('ps_text').innerHTML=\"hellow soski\";\n"; text2+=L"$(\"#ps_text\").html(\"+7 (923) 775-38-68, 8-383-375-38-68<br>\");\n"; text2+=L"</script>\n"; _bstr_t b(temp); b+=text2.copy(); std::string temp1=_com_util::ConvertBSTRToString(b.Detach()); std::ofstream ofss1("data2.html",std::ofstream::out); ofss1 <<temp1<<"\n"; |
IHTMLElement находим ссылку и кликаем по ней Показать »
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
pIWeb->get_Document(&pdispTmpVal2);//получаем документ pADocument2 = pdispTmpVal2; CComQIPtr<IHTMLDocument3,&IID_IHTMLDocument3> pADocument3; IDispatch* pdispTmpVal3; pIWeb->get_Document(&pdispTmpVal3);//получаем документ pADocument3 = pdispTmpVal3; //записываем в файЛ IHTMLElementCollection* ptr; pADocument2->get_all(&ptr); long p(0); ptr->get_length(&p); TRACE("ptr->get_length= %d\n",p); IDispatch *ppvdispOption; HRESULT hr; _bstr_t s2; std::ofstream ("text.html",std::ofstream::out);//удалить for(int i=0;i<p;i++) { _variant_t index = i; hr=ptr->item(index,index,&ppvdispOption); if(FAILED(hr)) { TRACE("hr=failed i=%d\n",i); } else { // TRACE("hr=S_OK i=%d\n",i); IHTMLElement* pElem=NULL; if(ppvdispOption->QueryInterface(IID_IHTMLElement,(void**)&pElem)==S_OK) { // TRACE("IHTMLElement = TRUE\n"); BSTR s1=SysAllocString(L""); pElem->get_innerHTML(&s1); //запись в файл std::stringstream ss; ss <<"i= "<<i<<"-----------------------\n"; s2+=_com_util::ConvertStringToBSTR(ss.str().c_str()); s2+=s1; s2+="--------------------------------\n"; std::string temp1=_com_util::ConvertBSTRToString(s2.Detach()); std::ofstream ofss1("text.html",std::ofstream::app); ofss1 <<temp1<<"\n"; //// // TRACE("s1=%S\n",s1); SysFreeString(s1); BSTR tagName; //получаем имя тега if(pElem->get_tagName(&tagName)==S_OK) { if(_bstr_t(tagName)==_bstr_t(L"A")) { TRACE("tagName=%S\n",tagName); VARIANT atrVal; if(pElem->getAttribute(L"href",0,&atrVal)==S_OK) { if(_bstr_t(atrVal)==_bstr_t(L"https://www.fl.ru/projects/")) { TRACE("atr=%S\n",_bstr_t(atrVal).Detach()); pElem->click(); return; } } } } pElem->Release(); } else { TRACE("IHTMLOptionElement = FALSE\n"); } } } |
Инициализация и вывод на экран Показать »
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// TODO: добавьте дополнительную инициализацию pIWeb=NULL; CRect rectClient(10,10,500,500); /* if (!m_wndBrowser.CreateControl(CLSID_WebBrowser, _T("Window"), WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))*/ if (!m_wndBrowser.CreateControl(__uuidof(ddd::WebBrowser), _T("Window"), WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST)) { DestroyWindow(); } if (m_brows = m_wndBrowser.GetControlUnknown()) { m_brows.QueryInterface(__uuidof(ddd::IWebBrowser2),(void**)&pIWeb); // m_brows->Getsi // m_brows-> ddd::IWebBrowser2* pTr; m_brows->QueryInterface(__uuidof(ddd::IWebBrowser2),(void**)&pTr); pTr->put_Silent(TRUE); BSTR url=L"http://fl.ru"; // pTr->Navigate(url, NULL, NULL, NULL, NULL); pTr->Navigate2(COleVariant(url),NULL,NULL,NULL,NULL); TRACE("bifore if url=%S\n",url); // if(pTr->get_LocationName(&url)==S_OK) /* { TRACE("begin! ddddddddddddddddddddddddddddddddddddd s=%S\n",url); /* ddd::DWebBrowserEvents2* pEv; m_brows->QueryInterface(__uuidof(ddd::DWebBrowserEvents2),(void**)&pEv);*/ // COleVariant v(url); // pEv->BeforeNavigate2( // pEv->NavigateComplete2(pTr,&v); /* TRACE("end! Dddddddddddddddddddddddddddddd\n"); }*/ } |
Заполняем форму и отправляем
Работа с WebBrowser в visual studio 2010
Здорова в этом посте разберем по пунктам как работать в Webbrowser. И так начнем с подключения. 1. Подключение Webbrowser к проекту Создаем обычное диалоговое приложение Visual studio. Дальше к файлу нашего диалога подключаем с помощью директивы #import файл ieframe.dll примерно так
1 |
#import "C:\\Windows\\System32\\ieframe.dll" rename_namespace("ddd") |
Это создаст в директории Debug или Release два файла которые подключаются к проекту…