C# 被前景窗口卡住了

C# 被前景窗口卡住了,c#,windows,process,background-foreground,C#,Windows,Process,Background Foreground,这是针对windows桌面,而不是web。。。在C#中使用Visual Studio 2013。在Windows7中 您好,我正在从头开始重新创建“Windows语音识别器”。。。我工作得很好。。。 我需要做的是检查什么windows进程是打开的(如记事本,Firefox等),然后如果记事本是打开的,做一些事情。。。我自己也不需要这么做。。。像自动的。。。打开记事本。。。警报显示“你好记事本”。。。“我关闭记事本”一个动作说“关闭记事本”…我尝试了12948305380453个不同的东西,但我唯

这是针对windows桌面,而不是web。。。在C#中使用Visual Studio 2013。在Windows7中

您好,我正在从头开始重新创建“Windows语音识别器”。。。我工作得很好。。。 我需要做的是检查什么windows进程是打开的(如记事本,Firefox等),然后如果记事本是打开的,做一些事情。。。我自己也不需要这么做。。。像自动的。。。打开记事本。。。警报显示“你好记事本”。。。“我关闭记事本”一个动作说“关闭记事本”…我尝试了12948305380453个不同的东西,但我唯一完成的是它写了一个数字…当我关闭并重新打开记事本时…数字是不同的…我需要进程名…像windows任务管理器中的“Notepad.exe”“firefox.exe”

对不起,我没有任何代码发布,因为我实际上没有一个与这部分…谢谢你

程序(记事本)将手动打开,因此代码需要不断跟踪任务管理器进程。并在代码中的一个变量中给出结果(例如,字符串“PNAME”),以便我可以在其余代码中使用该变量

我只需要它告诉我Notepad.exe是否在上打开,而不是像我们一样打开(即True或False)

如果notepad.exe处于打开状态,请执行此操作 如果notepad.exe已关闭,则不执行任何操作

好的…代码相当大…所以我将尝试发布最相关的

我使用的“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 UI或其命令的语音识别引擎个人化(例如,如果我说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;
        }
}
如果我想使用另一个应用程序“ie记事本”,所有这些都可以在后台运行

但是,如果有一些命令我想在“记事本”是前台应用程序时激活,那么我就会被卡住

我知道这个理论

大概是这样的

(在我添加的所有代码之前)


为了在.net中查找并处理进程,您应该使用类 使用它,您可以列出正在运行的进程并获取每个进程的信息


该方法的示例似乎与您想要的差不多,只是您会不断地执行它

您使用的是什么技术?winforms?wpf?请使用拼写检查器。对不起,这是我第一次在这里写东西,不知道拼写检查器在哪里,如果您在这里写东西之前告诉我使用类似Word的东西…我真的是在说西班牙语不是英语…我懂英语但写得不好…对于技术…也不确定…我在visual studio中创建了一个项目并“创建表单”…但我正在使用它与其他程序交互,如记事本,而我的应用程序仍在后台运行(该部分工作正常)例如,Microsoft Word有一个拼写检查器。我试过了,但当我写“process”时,它会保持黑色,而不是蓝色…并用红色下划线…就像它不存在一样…您需要添加适当的名称空间:
使用System.Diagnostics
并在“process”中使用大写“P”是的,这很有帮助:)一般来说,你应该试着发布你正在做的事情的代码或示例,这样人们会给你更好的答案谢谢大家的回答。。。遗憾的是,我无法让它们中的任何一个正常工作,主要是因为我不知道如何或在哪里使用这个“Process.getprocesss()”我已经在第一篇文章中使用了“using System.Diganostics”
//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
        }