将电话传递给默认的 windows 软电话,而其 运行

pass telephone to default windows softphone while its running

我为 windows 开发了一个软电话,我知道如何通过阅读此 question 将其注册为默认的 tell 应用程序,但我不知道如何 get 从网络应用程序或另一个 win 应用程序发送的参数,而我的软电话是 运行。

从网络应用调用 tell 应用的标准代码是这样的:

window.open("tel: 05525825");

如果您已经为方案 tel: 注册了您的应用程序并且命令是 "yourapp.exe %1",那么您可以从命令行参数中读取它们,如 How to access command line parameters outside of Main in C# 中所述:

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

当然,在直接访问和使用数组元素之前,您需要进行一些健全性检查。

如果您正确设置协议 URL 密钥,您的应用程序将 运行 与命令行中的数据(例如 args[]main() 中)

要将数据传递给应用程序的 已经 运行 宁 实例,最简单的方法是使用 [=14= 提供的 StartupNextInstance 事件] 并重新处理新的命令行:

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();
        }
    }
}

请注意,这不会在第一个 运行 时触发。