Форум программистов, компьютерный форум CyberForum.ru

Консольное приложение - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Библиотеки для работы с http протоколом http://www.cyberforum.ru/cpp-beginners/thread1023570.html
Здорова господа!!! Пишу бота для mail.ru думал что будет легко просто используешь curl и все, а от фиг там. Делаю post авторизацию все нормально, затем меняю настройки на get запрос и делаю переход по страницам и дулю что я получаю. Удается считать страницу с письмами, а дальше переходить по страницам уже не получается. Просто при считывании определенной страницы я получаю страницы с...
C++ declaration terminated incorrectly Делал лабу на C++ и возникла проблема - "declaration terminated incorrectly", Кто-нибудь может сказать в чем ошибка? Задача в том что бы задать (с помощью "=") значение адрес нулевих указателей, значениями адрес уже заданных указателей (в даном случае ptg и ptb) #ifndef ptg #define ptg #ifndef ptb #define ptb #include <vcl.h> #pragma hdrstop #include <iostream.h> #include <math.h>... http://www.cyberforum.ru/cpp-beginners/thread1023569.html
MS-VS выдает ошибку C1083 Не удается открыть файл включение: graphics.h: No such file or directory C++
// ----------------------------------------------------------------------- // #include <dos.h> #include <stdio.h> #include <conio.h> #include <math.h> #include <graphics.h> #include <stdlib.h> #define EPSILON 0.00001 #define MAXSTEP 1
C++ В матрице найти сумму четных элементов, которые лежат выше главной диагонали
Помогите пожалуйста, срочно надо... Условие таковое: В матрице найти сумму четных элементов, которые лежат выше главной диагонали. Если она делится на 3 , обнулить побочную диагональ.
C++ cout, два стека, нет вывода из второго http://www.cyberforum.ru/cpp-beginners/thread1023553.html
Перегрузил оператор вывода: ostream& operator<<(ostream &ost, List &list) //Перегрузка оператора вывода { if (list.head != 0) { (ost << list.head->data << endl).flush(); list.head = list.head->next; } else ost.setstate(ios_base::badbit);
C++ Работа с текстовой строкой Здравствуйте уважаемые учасники форума, вот не задача, учусь в университете (1 курс), делал последнее задание на дом, сделал 4 из 5 задач, но последнюю никак не могу. Попалась работа с текстовой строкой, а я практически в этом не разбираюсь. Буду очень благодарен, если кто-то хотя бы опишет последовательность действий, а если будет настроение, набросает примерный код. Благодарю за внимание, с... подробнее

Показать сообщение отдельно
bolddot
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 5
30.11.2013, 11:50  [ТС]     Консольное приложение
newbie666, Спасибо за ответ. Да, походу так и сделаю. Буду использовать pipes для перехвата, дочернего процесса.

Нашел некий код, буду разбираться.

C++
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
//------------Пример использования CreateProcess и Anonymous Pipes------
 
// childspawn.cpp
// Приложение запускает shell и перехватывает его ввод/вывод
 
//---------------------use freely---------------------------------------
 
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#pragma hdrstop
#include <condefs.h>
 
 
 
#define bzero(a) memset(a,0,sizeof(a)) //для сокращения писанины
 
 
 
bool IsWinNT()  //проверка запуска под NT
{
  OSVERSIONINFO osv;
  osv.dwOSVersionInfoSize = sizeof(osv);
  GetVersionEx(&osv);
  return (osv.dwPlatformId == VER_PLATFORM_WIN32_NT);
}
 
 
 
void ErrorMessage(char *str)  //вывод подробной информации об ошибке
{
 
  LPVOID msg;
 
  FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // язык по умолчанию
    (LPTSTR) &msg,
    0,
    NULL
  );
 
  printf("%s: %s\n",str,msg);
  LocalFree(msg);
 
}
 
 
 
//----------------------------------------------------------------------
 
void main()
 
{
 
  char buf[1024];           //буфер ввода/вывода
 
 
 
  STARTUPINFO si;
  SECURITY_ATTRIBUTES sa;
  SECURITY_DESCRIPTOR sd;        //структура security для пайпов
  PROCESS_INFORMATION pi;
 
  HANDLE newstdin,newstdout,read_stdout,write_stdin;  //дескрипторы
                                                      // пайпов
 
 
  if (IsWinNT())        //инициализация security для Windows NT
  {
    InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(&sd, true, NULL, false);
    sa.lpSecurityDescriptor = &sd;
  }
 
  else sa.lpSecurityDescriptor = NULL;
 
  sa.nLength = sizeof(SECURITY_ATTRIBUTES);
  sa.bInheritHandle = true;       //разрешаем наследование дескрипторов
 
 
  if (!CreatePipe(&newstdin,&write_stdin,&sa,0))   //создаем пайп
                                                   // для stdin
  {
    ErrorMessage("CreatePipe");
    getch();
    return;
  }
 
  if (!CreatePipe(&read_stdout,&newstdout,&sa,0)) //создаем пайп
                                                  // для stdout
  {
    ErrorMessage("CreatePipe");
    getch();
    CloseHandle(newstdin);
    CloseHandle(write_stdin);
    return;
  }
 
 
 
  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;   //подменяем дескрипторы для
  si.hStdInput = newstdin;    // дочернего процесса
 
  char app_spawn[] = "d:\\winnt\\system32\\cmd.exe"; //это просто
                                                     // пример,
                                                     //замените на то,
                                                     // что вам нужно
 
 
 
  //создаем дочерний процесс
 
  if (!CreateProcess(app_spawn,NULL,NULL,NULL,TRUE,CREATE_NEW_CONSOLE,
                     NULL,NULL,&si,&pi))
  {
    ErrorMessage("CreateProcess");
    getch();
    CloseHandle(newstdin);
    CloseHandle(newstdout);
    CloseHandle(read_stdout);
    CloseHandle(write_stdin);
    return;
  }
 
 
 
  unsigned long exit=0;  //код завершения процесса
  unsigned long bread;   //кол-во прочитанных байт
  unsigned long avail;   //кол-во доступных байт
 
 
 
  bzero(buf);
 
  for(;;)      //основной цикл программы
  {
    GetExitCodeProcess(pi.hProcess,&exit); //пока дочерний процесс
                                           // не закрыт
    if (exit != STILL_ACTIVE)
      break;
 
    PeekNamedPipe(read_stdout,buf,1023,&bread,&avail,NULL);
 
    //Проверяем, есть ли данные для чтения в stdout
 
    if (bread != 0)
    {
      bzero(buf);
      if (avail > 1023)
      {
        while (bread >= 1023)
        {
          ReadFile(read_stdout,buf,1023,&bread,NULL);  //читаем из
                                                       // пайпа stdout
          printf("%s",buf);
          bzero(buf);
        }
      }
 
      else {
        ReadFile(read_stdout,buf,1023,&bread,NULL);
        printf("%s",buf);
      }
    }
 
    if (kbhit())      //проверяем, введено ли что-нибудь с клавиатуры
    {
      bzero(buf);
      *buf = (char)getche();
 
      //printf("%c",*buf);
 
      WriteFile(write_stdin,buf,1,&bread,NULL); //отправляем это
                                                // в stdin
 
      if (*buf == '\r') {
        *buf = '\n';
        printf("%c",*buf);
        WriteFile(write_stdin,buf,1,&bread,NULL); //формирум конец
                                                  //строки, если нужно
 
      }
    }
  }
 
  CloseHandle(pi.hThread);
  CloseHandle(pi.hProcess);
  CloseHandle(newstdin);            //небольшая уборка за собой
  CloseHandle(newstdout);
  CloseHandle(read_stdout);
  CloseHandle(write_stdin);
}
 
//----------------------------EOF-----------------------------------
 
//------------------------------------------------------------------
 
Текущее время: 00:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru