我想按一个按钮,当按钮被激活时,关闭我想要的应用程序。例如,如果我打开记事本,我想按一个按钮并关闭记事本。但由于某些原因,我无法使用kill
或close
命令,因为它用红色表示它。我正在用C#构建这个应用程序。这是代码。
public EventHandler<SpeechRecognizedEventArgs> sRecognized { get; set; }
public Form1()
{
InitializeComponent();
}
void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text == "alice present")
{
SoundPlayer sndPlayer = new SoundPlayer(Ai.Properties.Resources.My_name_is_A_L_I_C_E);
sndPlayer.Play();
}
if (e.Result.Text == "open notepad")
{
Process notepad = Process.Start("notepad.exe");
}
if (e.Result.Text == "close notepad")
{
BtnN.PerformClick();
}
}
private void BtnN_Click(object sender, EventArgs e)
{
Process notepad = Process.Kill("notepad.exe");
}
答案 0 :(得分:0)
让它变得非常简单。创建一个Process
字段并在任何地方使用它:
private Process pNotepad; //Process field
void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text == "alice present")
{
SoundPlayer sndPlayer = new SoundPlayer(Ai.Properties.Resources.My_name_is_A_L_I_C_E);
sndPlayer.Play();
}
if (e.Result.Text == "open notepad")
{
//starting Process "notepad"
pNotepad = new Process();
pNotepad.StartInfo.FileName = "notepad.exe";
pNotepad.Start();
}
if (e.Result.Text == "close notepad")
{
BtnN.PerformClick();
}
}
private void BtnN_Click(object sender, EventArgs e)
{
//kill process if it is running
if(pNotepad != null && pNotepad.HasExited == false)
pNotepad.Kill();
}
答案 1 :(得分:-1)
正如评论中提到的那样,Process.Kill
是实例方法,而不是静态方法,因此您需要拥有Process
类的实例才能调用Kill
方法。
您还应该考虑进程名称不是进程的唯一标识符,因为可以有多个具有相同名称的进程。
之后,如果您想要基于名称的所有进程,可以使用以下代码。
public static void KillProcess(string processName)
{
var process = Process.GetProcessesByName(processName);
foreach (var proc in process)
proc.Kill();
}
当您自己创建新流程时,可以将该流程ID存储在静态变量
中 ...
public static int OpenedProcessId;
...
Process notepad = Process.Start("notepad.exe");
OpenedProcessId = process.Id;
...
(这是唯一标识符)并使用它来使用以下代码终止该特定进程。
public static bool KillProcess(int processId)
{
try
{
var process = Process.GetProcessById(processId);
process.Kill();
return true;
}
catch (Exception ex) { return false; }
}