卡在前景窗口

本文关键字:窗口 | 更新日期: 2023-09-27 17:55:20

这是针对Windows桌面的,而不是Web...使用 Visual Studio 2013 的 C# 中。在 Windows 7 中。

您好,我正在从头开始重新创建"Windows 语音识别器"...SI工作真的很好...我需要做什么 si 让它检查哪些 Windows 进程已打开(即记事本、火狐等),然后如果记事本打开,请做一些事情......而不必自己调用该操作...像自动...打开记事本...警报显示"你好记事本"...我关闭记事本"一个操作说"关闭记事本"...我尝试12948305380453不同的东西,但我唯一擅长的是它写一个数字......当我关闭并重新打开记事本时...数字是不同的...我需要进程名称...就像Windows任务管理器中的"记事本.exe"Firefox.exe"一样......

抱歉,我没有任何代码要发布,因为我实际上没有这部分代码... 谢谢...

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

我只需要它告诉我记事本.exe是否打开不是(即真或假)来像

如果记事本.exe是打开的,请执行以下操作如果记事本.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 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记事本",所有这些都可以在后台工作

但是,如果有些命令我想在"记事本"是前台应用程序时处于活动状态......有我卡住的地方

我知道理论...

它会像这样

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

//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
        }

卡在前景窗口

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

Process.GetProcesses() 方法的示例似乎几乎是您想要的,除了你会不断地这样做。