Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Вызов приложения 
V
    Опции темы
VampirDX
Дата 3.11.2007, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.5.2007
Где: Россия, Москва

Репутация: нет
Всего: нет



Есть такой вот код:
Код

#include <windows.h>
#include <iostream>

using namespace std;

void main()
{
    char a;
    STARTUPINFO startin;
    PROCESS_INFORMATION pi;
    ZeroMemory (&startin, sizeof(STARTUPINFO));
    cout<<"What program do you need?"<<endl;
    cout<<"Please, enter the number:"<<endl;
    cout<<"                          1 - Internet Explorer"<<endl;
    cout<<"                          2 - Notepad"<<endl;
    cout<<"                          3 - run both programms"<<endl;
    cin>>a;
    switch ( a )
    {
    case '1':
        CreateProcess ("C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        break;
    case '2':
        CreateProcess ("C:\\WINDOWS\\system32\\notepad.exe",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        break;
    case '3':
        CreateProcess ("C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        CreateProcess ("C:\\WINDOWS\\system32\\notepad.exe",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        break;
    default:
        break;
    }
}


прога вызывает IE или блокнот по запросу. Нужно добавить кусок, который позволял бы закрывать приложение в нужный нам момент, то есть, когда мы захотим smile
подскажите плз
PM MAIL   Вверх
Evjeny
Дата 3.11.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 14.8.2006

Репутация: 3
Всего: 5



Цитата(VampirDX @  3.11.2007,  04:46 Найти цитируемый пост)
Нужно добавить кусок, который позволял бы закрывать приложение в нужный нам момент, то есть, когда мы захотим 


Т.е., насколько я понял, необходимо закрывать приложение по нажатию какой-нибудь определенной клавиши. Если так, то:

Код

#include <iostream>

using namespace std;

#include <windows.h>
#include <conio.h>

int main()
{
    char a;
    STARTUPINFO startin;
    PROCESS_INFORMATION pi, pi1;
    int term = 0;

    ZeroMemory (&startin, sizeof(STARTUPINFO));
    cout<<"What program do you need?"<<endl;
    cout<<"Please, enter the number:"<<endl;
    cout<<"                          1 - Internet Explorer"<<endl;
    cout<<"                          2 - Notepad"<<endl;
    cout<<"                          3 - run both programms"<<endl;
    cin>>a;
    switch ( a )
    {
    case '1':
        CreateProcess ("C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        break;
    case '2':
        CreateProcess ("C:\\WINDOWS\\system32\\notepad.exe",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        break;
    case '3':
        CreateProcess ("C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        CreateProcess ("C:\\WINDOWS\\system32\\notepad.exe",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi1);
        break;
    default:
        break;
    }
    
    cout << "Do you want terminate the running process(es)? (press y for terminate): ";

    while(!term)
    {
        if(getche()=='y')
        {
            term = TerminateProcess(pi.hProcess, NULL);
            if(a=='3')
                term = TerminateProcess(pi1.hProcess, NULL);
        }
    }

    cout << endl;

    return 0;
}


Sorry for my bad english.  smile 
PM MAIL WWW   Вверх
VampirDX
Дата 3.11.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.5.2007
Где: Россия, Москва

Репутация: нет
Всего: нет



спасиб smile
PM MAIL   Вверх
VampirDX
Дата 4.11.2007, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.5.2007
Где: Россия, Москва

Репутация: нет
Всего: нет



нет, млин, поторопился. ошибку выдает, что:
необъявленная локальная переменная pi1.
PM MAIL   Вверх
Evjeny
Дата 5.11.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 14.8.2006

Репутация: 3
Всего: 5



Попробуй объявлять переменные pi и pi1 отдельно.

Вместо
Код

PROCESS_INFORMATION pi, pi1;


вот так
Код

PROCESS_INFORMATION pi;
PROCESS_INFORMATION pi1;

PM MAIL WWW   Вверх
VampirDX
Дата 5.11.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.5.2007
Где: Россия, Москва

Репутация: нет
Всего: нет



пробовал. не хочет.
PM MAIL   Вверх
Evjeny
Дата 5.11.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 14.8.2006

Репутация: 3
Всего: 5



В чем работаешь (среда, компилятор) и что конкретно за ошибка?
PM MAIL WWW   Вверх
VampirDX
Дата 5.11.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.5.2007
Где: Россия, Москва

Репутация: нет
Всего: нет



работаю на Visual Studio 2005
вот последний, пока, код
Код
#include <windows.h>
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    int a;
    int term = 0;
    int getch(void);
    STARTUPINFO startin;
    PROCESS_INFORMATION pi;
    PROCESS_INFORMATION pi1;
    ZeroMemory (&startin, sizeof(STARTUPINFO));
    cout<<"What program do you need?"<<endl;
    cout<<"Please, enter the number:"<<endl;
    cout<<"                          1 - Internet Explorer"<<endl;
    cout<<"                          2 - Notepad"<<endl;
    cout<<"                          3 - run both programms"<<endl;
    cin>>a;
    switch ( a )
    {
    case '1':
        CreateProcess ("C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        break;
    case '2':
        CreateProcess ("C:\\WINDOWS\\system32\\notepad.exe",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        break;
    case '3':
        CreateProcess ("C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        CreateProcess ("C:\\WINDOWS\\system32\\notepad.exe",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi);
        break;
        }
    cout<<"Close?"<<endl;
    while(!term)
    {
        if(getch()=='y')
        {
            term = TerminateProcess(pi.hProcess, NULL);
            if(a=='3')
                term = TerminateProcess(pi1.hProcess, NULL);
        }
    }
    cout<<endl;

return 0;
}


выдавать ошибку о pi1 почему то перестал........ терь такую выдает:
error LNK2019: unresolved external symbol "int __cdecl getch(void)" (?getch@@YAHXZ) referenced in function _main
PM MAIL   Вверх
Optimus
Дата 5.11.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



Цитата(VampirDX @  5.11.2007,  17:17 Найти цитируемый пост)
int getch(void);

интересно,  и что это означает ? 
может надо убрать эту строку.

Это сообщение отредактировал(а) Optimus - 5.11.2007, 20:13
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
Evjeny
Дата 6.11.2007, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 14.8.2006

Репутация: 3
Всего: 5



VampirDX, Optimus прав.
1. В данном случае строка
Цитата(VampirDX @  5.11.2007,  17:17 Найти цитируемый пост)
int getch(void);

не имеет никакого смысла. Чтобы использовать функцию getch() к программе необходимо подключить conio.h.
2. Если ты объявляешь переменную a типа int
Цитата(VampirDX @  5.11.2007,  17:17 Найти цитируемый пост)
int a;

то чтобы программа заработала правильно необходимо убрать в кейсах кавычки:
Код

switch ( a )
    {
    case 1:
       ...
    case 2:
        ...
    case 3:
        ...
        }

Соответсвенно в ветвлении if кавычки в условии тоже убираются:
Код

if(a==3)
                term = TerminateProcess(pi1.hProcess, NULL);

И последнее. При создании двух процессов, при втором вызове CreateProcess должна вызываться с параметром pi1, а не pi:
Код

CreateProcess ("C:\\WINDOWS\\system32\\notepad.exe",NULL,NULL,NULL,NULL,0,NULL,NULL,&startin,&pi1);

В противном случае второй вызов процедуры CreateProcess затрет содержимое структуры pi, созданной предыдущим вызовом CreateProcess, а структура pi1 останется не заполненной. Соответственно следующий код будет завершать только последний созданный процесс:
Код

if(getch()=='y')
        {
            term = TerminateProcess(pi.hProcess, NULL);
            if(a==3)
                term = TerminateProcess(pi1.hProcess, NULL);
        }


PM MAIL WWW   Вверх
VampirDX
Дата 6.11.2007, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.5.2007
Где: Россия, Москва

Репутация: нет
Всего: нет



жжесть smile .... спасиб за разъяснения. терь все как по маслу smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.