Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание процесса. 
:(
    Опции темы
H0Jlb
Дата 15.5.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот сама программа. Ошибок нет, но и нечего не происходит.

Код

#pragma endregion
    private: HANDLE handle;
    private:char* StringToChar(String^ str1)
    {
        char *ch;
        pin_ptr<const wchar_t> wch = PtrToStringChars(str1);
        size_t convertedChars = 0; 
        size_t  sizeInBytes = ((str1->Length + 1) * 2); 
        ch = (char *)malloc(sizeInBytes); 
        wcstombs_s(&convertedChars, ch, sizeInBytes, wch, sizeInBytes);
        return ch;
    }
    private: System::Void textBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
             }
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(STARTUPINFO));
    si.cb=sizeof(STARTUPINFO);
    String^  str = textBox1->Text;
    //TCHAR szCom [] =(LPWSTR) StringToChar (str);
    
    
    CreateProcess(NULL,(LPWSTR) StringToChar (str),NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi);
    handle = pi.hProcess;
             }
    
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
            TerminateProcess(handle,NULL);

             }
    };
}


Добавлено через 12 минут и 54 секунды
Вот так работает.
Код

#pragma endregion
    private: HANDLE handle;
    private:char* StringToChar(String^ str1)
    {
        char *ch;
        pin_ptr<const wchar_t> wch = PtrToStringChars(str1);
        size_t convertedChars = 0; 
        size_t  sizeInBytes = ((str1->Length + 1) * 2); 
        ch = (char *)malloc(sizeInBytes); 
        wcstombs_s(&convertedChars, ch, sizeInBytes, wch, sizeInBytes);
        return ch;
    }
    private: System::Void textBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
             }
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(STARTUPINFO));
    si.cb=sizeof(STARTUPINFO);
    //String^  str = textBox1->Text;
    //TCHAR szCom [] =(LPWSTR) StringToChar (str);
    [U]TCHAR szCom []= TEXT ("NOTEPAD");
    
    CreateProcess(NULL,szCom,NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi);
[/U]
    handle = pi.hProcess;
             }
    
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
            TerminateProcess(handle,NULL);

             }
    };
}



Но я хочу сам указывать процесс.
PM MAIL   Вверх
GoldFinch
Дата 15.5.2010, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



H0Jlb, используй CreateProcessA
StringToChar возвращает char*
а у тебя CreateProcessW, ему надо LPWSTR, т.е. whar_t
PM MAIL ICQ   Вверх
H0Jlb
Дата 15.5.2010, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я прочитал про CreateProcessA, примерно понял чем отличается. Но как исправить тоесть ну впишу я а остальное так же оставить?
PM MAIL   Вверх
GoldFinch
Дата 15.5.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Код

CreateProcessA(NULL, StringToChar(str),NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi);

PM MAIL ICQ   Вверх
H0Jlb
Дата 15.5.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ошибка    1    error C2664: CreateProcessA: невозможно преобразовать параметр 9 из 'STARTUPINFO *' в 'LPSTARTUPINFOA'    c:\users\gss-belui_mag\documents\visual studio 2008\projects\lb3\lb3\Form1.h    137    lb3

PM MAIL   Вверх
GoldFinch
Дата 15.5.2010, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



H0Jlb, 
либо используй StringToChar и ANSI варианты структур и функций (STARTUPINFOA),
либо отключи юникод в настройках проекта,
либо используй не StringToChar, а что-то другое, то что возвращает wchar_t*
PM MAIL ICQ   Вверх
H0Jlb
Дата 16.5.2010, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile   smile  smile 
PM MAIL   Вверх
xTr1m
Дата 18.5.2010, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может поможет (это вместо stringtochar)
Код

LPWSTR GetWCHAR(CString str)
{
    LPWSTR lpszW = new WCHAR[str.GetLength()+1]; //where sText is the CString variable.
    LPTSTR lpstr = str.GetBuffer(str.GetLength());
    int nLen = MultiByteToWideChar(CP_ACP,0,lpstr,-1,NULL,NULL);
    MultiByteToWideChar(CP_ACP,0,lpstr,-1,lpszW,nLen);

    return lpszW;
} 

не забываем потом ручками удалять.

Это сообщение отредактировал(а) xTr1m - 18.5.2010, 17:35
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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