Hedi Hadi Ответов: 1

Как получить пользовательские данные протокола внутри winform


Привет, я пытаюсь получить пользовательское значение протокола внутри моей winform,

я использовал этот код для регистрации ключей
using (var key = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Classes\\" + "sample"))
 {
     string applicationLocation = typeof(App).Assembly.Location;

     key.SetValue("", "URL:" + "CUSTOMPROTOCOL");
     key.SetValue("URL Protocol", "");

     using (var defaultIcon = key.CreateSubKey("DefaultIcon"))
     {
         defaultIcon.SetValue("", applicationLocation + ",1");
     }

     using (var commandKey = key.CreateSubKey(@"shell\open\command"))
     {
         commandKey.SetValue("", "\"" + applicationLocation + "\" \"%1\"");
     }
 }


и у меня есть этот код, чтобы получить пользовательское значение протокола
<pre>static void Main(string[] args)
{
    if(args.Length > 0)
    {
        if (Uri.TryCreate(args[0], UriKind.Absolute, out var uri) &&
            string.Equals(uri.Scheme, UriScheme, StringComparison.OrdinalIgnoreCase))
        {
            // TODO do something with the uri
        }
    }
}


но его можно использовать только с консолью,
есть ли в любом случае, чтобы получить значение внутри winform? или я могу использовать program.cs, чтобы получить значение и вставить его в свою winform?

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

я попытался использовать program.cs, чтобы получить значение, но я не мог сделать публичную строку, чтобы получить значение из моей winform

1 Ответов

Рейтинг:
8

phil.o

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

class Program
{
   void Main(string[] args) {
      // ...
      Application.Run(new WinForm(args[0]));
   }
}

Конечно, это предполагает, что вы также даете WinForm класс (или как вы его там назвали) соответствующего конструктора:
class WinForm : Form
{
   // ...
   public WinForm(string arg) {
      // Here you get the first argument which was passed to the <code>Program</code> class in the first place.
   }
}

Надеюсь, это поможет. Любезно.


Hedi Hadi

спасибо, это работает просто отлично!

я люблю тебя xD

phil.o

Добро пожаловать.
Спасибо, что приняли мое решение.