Windows 10

Microsoft Edgeを起動するC#コード

以前書いた記事「「ファイル名を指定して実行」からMicrosoft Edgeを起動する」を見ると分かる通り、Microsoft Edgeは実体となるexeファイルを実行する、通常の方法では起動できません。

Edgeのようなユニバーサル Windows プラットフォーム (UWP) アプリを起動するにはどうすれば良いか調べたところ「Windows 8 アプリのテストを自動化する」にその方法が載っていました。

アプリのアクティベーションは、IApplicationActivationManager インターフェイスを使うことで自動化できます。この API は、Visual Studio 2012 と同時に既定でインストールされる Windows SDK に含まれています。アプリの起動には IApplicationActivationManager::ActivateApplication (英語) メソッドを使います。

IApplicationActivationManager::ActivateApplicationメソッドを使えば良いみたいですね。

さっそくこのメソッドの呼び出し方について検索したところ、すぐに下記ページがヒットしました。

・com – IApplicationActivationManager::ActivateApplication in C#? – Stack Overflow
http://stackoverflow.com/questions/12925748/iapplicationactivationmanageractivateapplication-in-c

なるほど。VBAのWin32 API呼び出しみたいに、基本はヘッダーファイルを見て自分で書かないといけないわけですね・・・。

でも面倒くさいので、すでに回答者さんが書いているコードをほぼそのまま使うことにしました。

/*
  for reference:
    https://msdn.microsoft.com/en-us/library/hh706902.aspx
    http://stackoverflow.com/questions/12925748/iapplicationactivationmanageractivateapplication-in-c
    http://blogs.msdn.com/b/windowsappdev_ja/archive/2012/09/11/windows-8-automating-the-testing.aspx
*/
using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;

namespace ExecMSEdge
{
  class Program
  {
    private enum ACTIVATEOPTIONS : uint
    {
      AO_NONE = 0x00000000,
      AO_DESIGNMODE = 0x00000001,
      AO_NOERRORUI = 0x00000002,
      AO_NOSPLASHSCREEN = 0x00000004
    }
    
    [ComImport, Guid("2e941141-7f97-4756-ba1d-9decde894a3d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    interface IApplicationActivationManager
    {
      IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] ACTIVATEOPTIONS options, [Out] out UInt32 processId);
      IntPtr ActivateForFile([In] String appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] String verb, [Out] out UInt32 processId);
      IntPtr ActivateForProtocol([In] String appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out UInt32 processId);
    }
    
    [ComImport, Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")]
    class ApplicationActivationManager : IApplicationActivationManager
    {
      [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)/*, PreserveSig*/]
      public extern IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] ACTIVATEOPTIONS options, [Out] out UInt32 processId);
      [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
      public extern IntPtr ActivateForFile([In] String appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] String verb, [Out] out UInt32 processId);
      [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
      public extern IntPtr ActivateForProtocol([In] String appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out UInt32 processId);
    }
    
    public static void Main(string[] args)
    {
      const string edgeID = "Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge";
      
      uint pid;
      string url;
      
      if (args.Length > 0) {
        url = args[0];
      } else {
        url = "//www.ka-net.org/blog/";
      }
      ApplicationActivationManager aam = new ApplicationActivationManager();
      aam.ActivateApplication(edgeID, url, ACTIVATEOPTIONS.AO_NONE, out pid);
      Console.Write("ProcessId:" + pid);
    }
  }
}

ExecMicrosoft Edge_01

引数で指定しているEdgeのAppUserModelID(Application User Model ID)は“Windows 8 アプリのテストを自動化する”にある通り、Get-AppxPackage コマンドレットで取得することができます。

しかしながら、メモ帳とかペイントであればProcess.Startで一発なものを、UWPアプリの場合はこんなに面倒くさいとは・・・。
microsoft-edgeスキームを使って起動した方がよっぽど簡単そうです。

「microsoft-edge:」って何?前のページ

Selenium(C#)でEdgeをいろいろ操作してみた。次のページ

関連記事

  1. Windows 10

    [Windows 10]Creators UpdateのISOファイルを直接ダウンロードする方法

    下記記事の通り、本日(2017/4/5(米国時間))から「Window…

  2. Windows関連

    VivoTab RT TF600TにWindows RT 8.1をインストールしました。

    Windows ストアからWindows RT 8.1がダウンロードで…

  3. Windows 10

    Windows 10をクリーンインストールする。

    各種メディアでも話題になっていますが、先日ついにWindows 10が…

  4. Windows 10

    PowerShellでMicrosoft Edgeを操作する

    前回の記事でWebDriverを使ってMicrosoft Edgeを操…

  5. Windows 10

    Microsoft Edgeを操作するVBScript

    「Microsoft Edgeを操作するVBAマクロ(WebDrive…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP