Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание процесса, запуск блокнота 
V
    Опции темы
maxi91m
  Дата 21.1.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 14.1.2007
Где: Нижний Новгород

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



Код компилируется но блокнот не запускается. Что я делаю не так?(ОС Win7)
Код

#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR buff[MAX_PATH];
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si,sizeof(STARTUPINFO));
    si.cb = sizeof(STARTUPINFO);
    _tcscpy(buff, TEXT("C:\Windows\notepad.exe"));
    if(!CreateProcess(NULL,buff,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
    {
        cout << "The new process is not created." << endl
            << "Check a name of the process." << endl;
    return 0;
    }

    Sleep(1000);
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);

    return 0;
}
[quote]

[/quote]

 smile 
--------------------
PM MAIL ICQ   Вверх
artsb
Дата 21.1.2010, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



А так:
Код

_tcscpy(buff, TEXT("C:\\Windows\\notepad.exe"));

?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
maxi91m
Дата 21.1.2010, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 14.1.2007
Где: Нижний Новгород

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



Да так заработало.  Блин а почему с одним слешем не работает? 
А почему нельзя так написать?
CreateProcess(NULL,"C:\\Windows\\notepad.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)
Возникает ошибка  Error    1    error C2664: 'CreateProcessW' : cannot convert parameter 2 from 'const char [23]' to 'LPWSTR'    
Если явно преобразовываю 
CreateProcess(NULL,(LPWSTR)"C:\\Windows\\notepad.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)
то запускается но на этом месте возникает какая то ошибка
Что делает волшебного  _tcscpy(buff, TEXT("C:\Windows\notepad.exe"));

Это сообщение отредактировал(а) maxi91m - 21.1.2010, 21:49
--------------------
PM MAIL ICQ   Вверх
artsb
Дата 21.1.2010, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(maxi91m @  21.1.2010,  21:39 Найти цитируемый пост)
а почему с одним слешем не работает?  

Спецсимвол. Нужно экранировать.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
maxi91m
Дата 21.1.2010, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 14.1.2007
Где: Нижний Новгород

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



Что скажите?(см пост выше)
--------------------
PM MAIL ICQ   Вверх
bilbobagginz
Дата 21.1.2010, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

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



Цитата(maxi91m @  21.1.2010,  20:39 Найти цитируемый пост)
Блин а почему с одним слешем не работает? 

потому что напр. "\n" - это на Си - переход на новую строку.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
artsb
Дата 21.1.2010, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(maxi91m @  21.1.2010,  22:29 Найти цитируемый пост)
Что скажите?(см пост выше) 

\ - служит для экранирования. А вот чтобы использовать сам символ '\', нужно его заэкранировать.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
maxi91m
Дата 22.1.2010, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 14.1.2007
Где: Нижний Новгород

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



Со слешами разобрались, а вот почему когда я просто строку передаю не работает?
--------------------
PM MAIL ICQ   Вверх
GremlinProg
Дата 22.1.2010, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(maxi91m @  21.1.2010,  23:39 Найти цитируемый пост)
Что делает волшебного  _tcscpy(buff, TEXT("C:\\Windows\\notepad.exe"));

волшебство в данном случае делает макрос TEXT, а не _tcscpy,
а константную строку нельзя передавать напрямую в CreateProcess потому что она может подвергаться изменениям:
Цитата(CreateProcess Function @  MSDN)

The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
artsb
Дата 22.1.2010, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



maxi91m, сори smile я не заметил, что ты пост отредактировал и подумал, что ты меня не понял  smile 
Ну GremlinProg уже написал в чём дело.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Dem_max
Дата 22.1.2010, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



макрос TEXT
у тебя проект в UNICODE а ты свою строку в CreateProcess пишешь как char, а в юникоде строки определяются как widechar.
в винде существую 2 функции одна для юникода CreateProcessW, а другая для обычных строк CreateProcessA, а CreateProcess это всего лишь макрос.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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