Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

Собственные функции MFC

Posted on 31 августа, 20151 сентября, 2015 by admin

Функция создает процесс 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;
}

 

 

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (29)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • ExchiNuGs к записи Программка для заполнения форума на vBulletin 3.8.7
  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • admin к записи Как удалить изображение из google
  • Shakanris к записи Программка для заполнения форума на vBulletin 3.8.7
  • костя к записи visual C++, создание диалоговых окон.
©2021 Kselax.ru Theme by ThemeGiant