Amit Saini Ответов: 0

Управление приложением из другого приложения для голосовых команд


Привет всем ,мой мотив состоит в том, чтобы управлять visual studio с помощью голосовых команд с помощью microsoft speech services.

Я хочу управлять visual studio из моего другого приложения window form на c#. У меня есть небольшой успех, но есть некоторые проблемы в SendKeys для приложения.


Как я уже открыл два экземпляра visual studio. когда я запускаю свою программу из visual studio , она работает нормально. я даю команду Ctrl+N (^n), используя клавиши отправки для добавления нового диалогового окна файла. При запуске моей программы элемент управления переходит в другой экземпляр и открывает диалоговое окно добавить новый файл . это хорошо работает .

Но когда я запускаю exe непосредственно из папки bin, он не отправляет ключи в экземпляр Visual studio. Exe хорошо находит окно visual studio, но не открывает диалоговое окно файла. Существует некоторая проблема для метода setForgroundWindow(handel).

Что я уже пробовал:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace ControlVs
{
    public partial class Form1 : Form
    {
        IntPtr handle = new IntPtr(0);

        [DllImport("User32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]

        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]

        [return: MarshalAs(UnmanagedType.Bool)]

        internal static extern bool SetForegroundWindow(IntPtr hWnd);

        [DllImport("user32.dll")]
        private static extern Boolean ShowWindow(IntPtr hWnd, Int32 nCmdShow);
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            handle = FindWindow(@"HwndWrapper[DefaultDomain;;f515415e-f7ae-41b2-b5fd-11635f9b28a9]", null);
            ShowWindow(handle, 5);
            label1.Text = Convert.ToString(handle);
            if (SetForegroundWindow(handle))

            {
                System.Threading.Thread.Sleep(1000);
                /*

                 * Send "Hello World!" to the active windows.

                 * Then send TAB key to skip to the button.

                  * Send ENTER key means press the button there.

                  */
                //   SendKeys.Send(@"^{v}");
                SendKeys.SendWait(@"^{n}");
               // SendKeys.SendWait("{H}{e}{l 2}{o} {W}{o}{r}{l}{d}{!}");

                //   SendKeys.SendWait("{TAB}");

                //SendKeys.SendWait("{ENTER}");

            }
        }
    }
}




namespace ControlVs
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(108, 97);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(382, 106);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(18, 13);
            this.label1.TabIndex = 1;
            this.label1.Text = "HI";
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(800, 450);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Label label1;
    }
}

Amit Saini

FindWindow(@"HwndWrapper[DefaultDomain;;f515415e-f7ae-41b2-b5fd-11635f9b28a9]", null);

это мое имя класса экземпляра visual studio . вы можете найти имя класса с помощью spy++

BillWoodruff

Вы проверили различные доступные инструменты:

https://www.google.com/search?sxsrf=ALeKk032jjOHSUfDqYUQowT74OMIBa2NRA%3A1596374858101&ei=Sr8mX7vYBcH79QPBhJroBQ&q=c%23+voice+control+visual+studio&oq=c%23+voice+control+visual+studio&gs_lcp=CgZwc3ktYWIQAzIICCEQFhAdEB4yCAghebyqhraemggiiraweb0qhjiicceqfhadeb4ycaghebyqhraemggiiraweb0qhjiicceqfhadeb46bagaeec6bggaeacqhjoicaaqbxafeb46cagaeagqbxaeogyiabaieb46bagheapq3ombwktpawdz_gfoanabeacaac0biahkcpibbje1ljaumzgbakabaaobb2d3cy13axraaqe&sclient=psy-ab&ved=0ahUKEwi7peHiz_zqAhXBfX0KHUGCBl0q4dudcaw&uact=5

Amit Saini

Да, я пробовал эти инструменты голосовых команд. Он основан на библиотеке распознавания речи windows, а не на речевом api Microsoft. Поэтому он не понимает так хорошо, как когнитивные службы для понимания произношения моего голоса.

Amit Saini

Я немного близок к своему проекту. Я использовал когнитивные сервисы Microsoft. Использовать его.Но проблема заключается в setForgroundWindow. Я думаю, что мне нужно добавить когнитивные сервисы Microsoft в текущий рабочий проект для управления разработкой для работы над проектами компании, а не с помощью другого приложения. я сохраню две копии с голосовыми командами проектов и без них.

Теперь мне придется основать автоматизированный браузер, чтобы я мог писать код и искать в google с помощью голосовых команд, чтобы мне не нужно было сидеть на стульях в течение 8 часов для программирования.

Gerry Schmitz

Таргетируйте приложение, предназначенное для автоматизации. Азбука Морзе не требуется.

0 Ответов