这适用于Windows桌面,而不是Web ...使用Visual Studio 2013在C#中。在Windows 7中。
你好,我正在重建一个" Windows语音识别器"从零开始... si工作得很好...... 我需要做什么来检查哪些Windows进程是打开的(即记事本,Firefox等)然后IF记事本是打开的,做一些事情......而不必自己调用该动作...像自动...打开记事本......警报说" Hello Notepad" ...我关闭记事本"一个动作说"关闭记事本" ...我尝试12948305380453不同的东西,但我唯一能完成的是它写了一个数字...当我关闭并重新打开记事本时...是不同的...我需要过程名称...喜欢" notepad.exe" " firefox.exe"来自Windows任务管理器......
抱歉,我没有任何代码可以发布,因为我没有这个部分有一个...谢谢......
程序(记事本)将手动打开,因此代码需要不断跟踪任务管理器进程。并在代码中的变量中给出结果(例如,字符串" PNAME",所以我可以在我的其余代码中使用该变量。
我只需要告诉我Notepad.exe是否打开(即True或False)就像
一样如果notepad.exe已打开,请执行此操作 如果notepad.exe已关闭则不执行任何操作
好的...代码ir相当大......所以我会尝试发布最相关的代码......
" usign"我正在使用...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Speech;
using System.Speech.Synthesis;
using System.Speech.Recognition;
using System.Text;
using System.Windows.Forms;
using System.Threading;
我已经初衷化了一个不使用Windows用户界面或它的命令的语音识别工具(即如果我说Open Firefox"它什么也没做,因为它不在他的语法中)
然后我加载了我自己的语法
private Grammar CreateCustomGrammar()
{
GrammarBuilder GeneralCommands = new GrammarBuilder();
GeneralCommands.Append(new Choices("cut", "copy", "paste", "Read Clipboard", "help", "Close Recognition", "Turn Dictation On", "Read That"));
return new Grammar(GeneralCommands);
recognizer.LoadGrammar(GeneralCommands);
}
并添加了一个切换到语法中的每个单词,以便它知道该做什么
private void SpeechToAction(string text)
{
DetermineText(text);
switch (text)
{
case "cut":
//cut();
speed();
break;
case "copy":
copy();
break;
case "paste":
paste();
break;
case "Read Clipboard":
readClipboard();
break;
case "Read That":
readThat();
break;
case "Turn Dictation Off":
TurnDictationOff();
break;
case "help":
help();
break;
case "Close Recognition":
Exit();
break;
}
}
如果我想使用其他应用程序"即Notepad"
,所有这些都在后台运行但是如果有"记事本"那么我想要活跃的命令是FOR FORROUND应用程序...有我卡住的地方
我知道理论......
它会是这样的
(在我添加的所有代码之前)
//here is the tricky part
IF //notepad is the foreground and var notepadOK == 1
{
private Grammar NEWNAME()
{
GrammarBuilder NEWNAME = new GrammarBuilder();
GeneralCommands.Append(new Choices("Hole notepad", "save"));
return new Grammar(NEWNAME);
var notepadOK = 0
}
}
IF //notepad is NOT in the foreground and notepadOK == 0
{
// unload Notepad Grammar (i remember how to do this part, just cant find //it in the code
}
答案 0 :(得分:1)
为了查找和处理.net中的进程,您应该使用Process类 使用它,您可以列出正在运行的进程并获取有关每个进程的信息
Process.GetProcesses()方法的示例似乎几乎是您想要的,除非您连续执行此操作