передать телефон на программный телефон Windows по умолчанию во время его работы

Я разработал программный телефон для Windows, я знаю, как зарегистрировать его в качестве приложения по умолчанию, прочитав это вопрос, но я не знаю, как получить аргументы, отправленные из веб-приложения или другого приложения win, когда мой софтфон работает.

Стандартный код для вызова приложения из веб-приложения выглядит примерно так:

window.open("tel: 05525825");

person Babak Fakhriloo    schedule 25.03.2015    source источник


Ответы (2)


Если вы правильно настроите URL-ключи протокола, ваше приложение будет запущено с данными в командной строке (например, args[] в main())

Для передачи данных в уже запущенный экземпляр вашего приложения проще всего использовать StartupNextInstance событие, предоставленное VisualBasic.ApplicationServices, и повторно обработать новые входящие командные строки:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;

namespace Foo
{
    static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            var applicationBase = new ThisWindowsApplicationBase();
            applicationBase.StartupNextInstance += (sender, e) => { applicationBase.HandleCommandLine(e.CommandLine); };
            applicationBase.Run(args);
        }
    }

    class ThisWindowsApplicationBase : WindowsFormsApplicationBase
    {
        internal ThisWindowsApplicationBase()
            : base()
        {
            this.IsSingleInstance = true;
            this.MainForm = new Form1();

            this.HandleCommandLine(Environment.GetCommandLineArgs().Skip(1));
        }

        internal void HandleCommandLine(IEnumerable<string> commandLine)
        {
            this.MainForm.Text = "Processing: " + commandLine.FirstOrDefault();
        }
    }
}

Обратите внимание, что это не сработает при первом запуске.

person Alex K.    schedule 25.03.2015
comment
Спасибо, Алекс. Есть ли какой-нибудь учебник по предложенному вами решению? - person Babak Fakhriloo; 25.03.2015
comment
Спасибо. Поэтому мне нужно написать свой обработчик для события StartupNextInstance. - person Babak Fakhriloo; 25.03.2015

Если вы зарегистрировали свое приложение для схемы tel:, а команда — «yourapp.exe %1», вы можете прочитать их из аргументов командной строки, как описано в Как получить доступ к параметрам командной строки за пределами Main в C#:

string arguments = Environment.GetCommandLineArgs();
string phoneNumber = arguments[1];

Конечно, вам нужно выполнить некоторую проверку работоспособности, прежде чем прямо обращаться к элементу массива и использовать его.

person CodeCaster    schedule 25.03.2015
comment
Спасибо @codecas, я бы проверил. Но есть ли прослушиватель или обработчик событий для чтения Environment.GetCommandLineArgs();? - person Babak Fakhriloo; 25.03.2015