С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 30

Создание процесса (калькулятор)

18.02.2014, 00:19. Показов 5440. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте . У меня есть пример программы , которая создаёт процесс "Калькулятор" . Вот пытаюсь всё с ней разобраться , но некоторые моменты непонятны . Надеюсь на Вашу помощь)
Вот сама прога:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{   STARTUPINFO si;  //структура
PROCESS_INFORMATION pi;//структура
LPTSTR IpszSystemInfo;
TCHAR tchBuff [MAX_PATH+1];
IpszSystemInfo=tchBuff;
GetSystemDirectory (IpszSystemInfo, MAX_PATH+1);
wsprintf (tchBuff, TEXT("%s\\calc.exe"), IpszSystemInfo);
ZeroMemory( &si, sizeof(si) );//обнулить
    si.cb = sizeof(si);//указать размер
    ZeroMemory( &pi, sizeof(pi) );//обнулить
if(!CreateProcess (NULL, tchBuff, NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) //якщо процес не створений
return 0;//повернути нуль
//Закиття дескриптора
CloseHandle (pi.hProcess);//процесу
CloseHandle(pi.hThread) ;//та основної нитки
return 0;
}
Я почитал и понял , что STARTUPINFO si; //структура для окна,заголовка процесса
PROCESS_INFORMATION pi;//структура с инфой про процесс

Не могу понять , что происходит здесь:
C++
1
2
3
4
5
LPTSTR IpszSystemInfo;
TCHAR tchBuff [MAX_PATH+1];
IpszSystemInfo=tchBuff;
GetSystemDirectory (IpszSystemInfo, MAX_PATH+1);
wsprintf (tchBuff, TEXT("%s\\calc.exe"), IpszSystemInfo);
Что такое
C++
1
LPTSTR IpszSystemInfo
и для чего оно нужно? и что такое tchBuff?

И ещё , используется wsprintf , не сталкивался с ней , не могу понять как работает , что в неё передаём . Выяснил , что она записывает отформатированные данные в указанный буфер. То есть , буфером , наверное , есть переменная tchBuff?

Извините за такое количество вопросов ,просто очень нужно разобраться со всем этим , а сам не могу понять , что да как (
Очень надеюсь на Вашу помощь.
Заранее огромное спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2014, 00:19
Ответы с готовыми решениями:

Создание процесса
Меня интересует вопрос: процесс можно создавать - открывае .exe файл. Можно ли создать процесс из самого кода, всмысле - под некую...

Создание процесса
Доброго времени суток! Пытаюсь создать процесс. В книге Рихтера - Создание эффективных Win32-приложений нашел такой код: STARTUPINFO...

Создание дочернего процесса
Уважаемые форумчане, у меня возник такой вопрос: Возможно ли средствами с++ создать дочерний процесс для определенного процесса? так...

8
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
18.02.2014, 00:32
_koder_, про LPTSTR и всякие другие непонятные аббревиатуры вы можете прочитать тут
Цитата Сообщение от _koder_ Посмотреть сообщение
используется wsprintf , не сталкивался с ней
это тоже самое, что sprintf, только с приставочкой w, что означает wide. предназначена для печати переменных типа wstring.
0
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 30
18.02.2014, 00:51  [ТС]
да я тоже сначала думал , что для печати - но что она тогда печатает ?
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
18.02.2014, 01:08
Цитата Сообщение от _koder_ Посмотреть сообщение
но что она тогда печатает ?
эта функция положит уже отформатированную строку TEXT("%s\\calc.exe"), в tchBuff
для лучшего понимания прочитайте как работает sprintf, а wsprintf - это то же самое, только заменить типы параметров в соответствии в WinAPI(и, кст, этот вопрос должен относиться к разделу WinApi)
0
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 30
18.02.2014, 01:13  [ТС]
Спасибо. То есть , получается , что именно эта функция запускает процесс что-ли ? ведь туда передалась прога "калькулятор" ?

а не знаете , случайно , что такое IpszSystemInfo ? Нигде информации не найду , зачем это нужно
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
18.02.2014, 01:20
смотри на строку
Цитата Сообщение от _koder_ Посмотреть сообщение
GetSystemDirectory (IpszSystemInfo, MAX_PATH+1);
тут в IpszSystemInfo записывается системный путь, а в строке
Цитата Сообщение от _koder_ Посмотреть сообщение
wsprintf (tchBuff, TEXT("%s\\calc.exe"), IpszSystemInfo);
системный путь и "\\calc.exe" конкатеируются и записываются в tchBuff
0
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 30
18.02.2014, 01:41  [ТС]
то есть , IpszSystemInfo нужно , чтобы найти выполняемый файл калькулятора ? правильно? это просто переменная получается?
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
18.02.2014, 01:43
Цитата Сообщение от _koder_ Посмотреть сообщение
это просто переменная получается?
ну да, это просто переменная. а Вы что думали? на что это еще похоже?)
0
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 30
18.02.2014, 01:46  [ТС]
Извините , можно ещё один вопрос? Вот есть такая задача: запустить сразу не более 10 копий Блокнота с запретом использования для них буфера обмена .
Вот я пробовал так:
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
#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;
 
void main()
{
    STARTUPINFO cif;
    ZeroMemory(&cif,sizeof(STARTUPINFO));
    cif.cb=sizeof(STARTUPINFO);         // указать размер
    PROCESS_INFORMATION pi;
    for(int i=0;i<10;i++)//не більше 10 копій процесу
    {
    if (CreateProcess(TEXT("c:\\windows\\notepad.exe"),NULL,
        NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==TRUE)
    {
        cout << "process" << endl;
        cout << "handle " << pi.hProcess << endl;
        
    }
    
    }
    ExitProcess(1);//вихід з процесу
}
Вроде всё запускается . Только я вот не пойму - как это с запретом буфера обмена ? что имеется в виду ?

Добавлено через 1 минуту
Спасибо) Ну мало ли , только вот начал изучать все эти процессы , может важное что-то очень , кто его знает )) нужно уточнять )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2014, 01:46
Помогаю со студенческими работами здесь

Создание дочернего процесса
нужно создать дочерний процесс, чтобы если закрыть родительский закрылся и дочерний. но незнаю как можно сделать...

Создание нового процесса
Добрый день, подскажите, как создать новый процесс, какие библиотеки подключать?

Создание фонового процесса в одном потоке
У меня назрел вопрос, использовал функцию std::thread Но она создаёт параллельный поток, а мне нужна фоновая задача в одном...

Создание процесса и контроль учетных записей
Подскажите, создаю процессCreateProcess(buffer, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &amp;cif, &amp;pi) Приложения с манифестом...

Создание процесса работает только если указывать полный путь расположения файла
Доброго времени суток, возникла проблема. В программе идет запуск других программ: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru