Как в VB.net послать Ctrl+C определённому процессу?
Написал GUI где выставляю настройки, запускаю консольную программу с этими настройками через CMD.
Проблема в том, что я хочу нажатием кнопки в GUI остановить консольную программу, это делается обычно через "Ctrl+C".
- пробовал просто убить процесс, но тогда файл с которым работала программа поврежденный.
- думал найти CMD в которой запускал программу в процессах и остановить там, однако все окна CMD в процессах называются одинаково.
Может у вас есть идей, как послать Ctrl+C на прямую в консольную программу?
(по возможности пишите сразу с кодом, я новенький в этом и могу не понять на словах :) )
с cmd.exe лучше не связываться вообще никогда - и конечно же манипулировать
(прерывать ) дочерние процессы сигналами не удастся
- это вы вообще не ту операционную систему выбрали если всерьез собираетесь это делать
В WinAPI есть функция GenerateConsoleCtrlEvent она отправляет в консоль Ctrl-C. Вам осталось только найти identifier of the process group по идентификатору процесса.
Раз уж консольная программа написана Вами, то решение может быть проще. Программы могут общаться между собой по pipe. Т.е. вы можете реализовать это и GUI будет просто отправлять консоли команду, а она будет корректно закрываться.
Как правильно выше заметили, эмуляцию клавиатуры лучше не использовать.
thinkkaka, Тогда Вам желательно использовать WinAPI
1. Определяете handle окна консольной программы по его названию;
Public Declare Auto Function FindWindow Lib "user32.dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
2. Делаете это окно OnTop;
Public Declare Function SetForegroundWindow Lib "user32.dll" (hWnd As IntPtr) As Boolean
3. Отправляете нужную комбинацию клавиш этому окну.
Public Sub keybd_event(bVk As Keys, bScan As Byte, dwFlags As UInt32, dwExtraInfo As IntPtr)
End Sub
По применению каждого WinAPI - гуглите, спрашивайте. Чем смогу - помогу.
thinkkaka,
' Вывод окна из минимизированного значения
Public Declare Function ShowWindow Lib "user32.dll" (hWnd As IntPtr, showWindowCommand As Integer) As Boolean