@ed_milson
Я

Передать дочернему процессу CTRL-C в C/C++?

STARTUPINFO cif;
	ZeroMemory(&cif,sizeof(STARTUPINFO));
	PROCESS_INFORMATION pi;
	//AllocConsole();
	CreateProcess("c:\\windows\\system32\\defrag.exe","foo D:",
	NULL,NULL,TRUE,(CREATE_NEW_PROCESS_GROUP,CREATE_NEW_CONSOLE),NULL,NULL,&cif,&pi);
	GenerateConsoleCtrlEvent (CTRL_C_EVENT, pi.dwProcessId);

Не работает.
  • Вопрос задан
  • 309 просмотров
Пригласить эксперта
Ответы на вопрос 1
Nipheris
@Nipheris Куратор тега C++
a,b в языке С/С++ вычисляется как b. Вы взяли две константы через запятую в скобки, после чего они начали восприниматься как операция "запятая", результатом которой является второй аргумент. Т.е. если написать a = (67, 23), то в переменную a попадет значение 23. В вашем случае в функцию будет только передан флаг CREATE_NEW_CONSOLE, а вам, судя по мсдн-у, нужно оба, чтобы создать новую группу процессов. Соедините флаги так, как надо было изначально - через операцию логического или, т.е. "|" - и все должно работать. Вместо того, что в скобках, будет так:
CREATE_NEW_PROCESS_GROUP | CREATE_NEW_CONSOLE

Edit: Хотя нет, для групп процессов CTRL-C вроде как не поддерживается, попробуйте CTRL-BREAK. И флаги эти взаимоисключающие, судя по докам. CREATE_NEW_PROCESS_GROUP: This flag is ignored if specified with CREATE_NEW_CONSOLE.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы