Visual Studio との連携
Microsoft Visual Studio は、Microsoft が提供する 統合開発環境 (IDE) です。Microsoft Windows 用のコンピューター プログラム、Web サイト、Web アプリケーション、Web サービス、モバイル アプリケーションの開発などに使用されます。この章では、シンプルな Visual Studio C# コンソール アプリケーションで Ranorex Studio を使用する方法を説明します。Visual Studio C# コンソール アプリケーションを新規に作成する方法と、Windows 電卓を起動して自動化する方法を説明します。
メモ
この章で使用するサンプルは、Microsoft Visual Studio 2005 以降で動作します。
Visual Studio プロジェクトの新規作成
Microsoft Visual Studio を起動します。
ファイル > 新しいプロジェクト をクリックします。
.NET Framework 4.6.2 以上を選択し、使用するプログラミング言語を選択します。この例では、C# を使用します。
リストから、コンソール アプリケーション を選択します。
プロジェクト名を入力し、OK をクリックします。

Creating a new Console Application with Microsoft Visual Studio
Ranorex のコア アセンブリを参照に追加
プロジェクトのソリューション エクスプローラー内の 参照設定 フォルダーを右クリックして、参照の追加 ダイアログを開きます。I

左のメニューから 参照 を選択します。
Ranorex のインストール フォルダー の Bin (例: C:Program Files (x86)\Ranorex\Bin) を参照します。
Ranorex.Bootstrapper, Ranorex.Common, Ranorex.Core, Ranorex.Core.Resolver, および、すべての Ranorex.Plugin アセンブリを追加します。

Ranorex オートメーション コードの記述
using Ranorex;
using System;
using System.Runtime.CompilerServices;
using System.Threading;
Imports Ranorex
Imports System;
Imports System.Runtime.CompilerServices;
Imports System.Threading;
他の Ranorex コア機能を使用する前に、Ranorex.Core.Resolver を初期化することが重要です。このアセンブリは、実行時に必要となる他のアセンブリを検出します。
これをおこなうには、以下のコードを Program クラスの Main ルーチンに追加します。テスト オートメーション コードは、Run に記述します。この例では、Windows 電卓でシンプルな計算をおこないます。コードを追加したら、F5 を押下し、プロジェクトのビルドをおこないます。
static void Main(string[] args)
{
InitResolver();
RanorexInit();
run();
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static void InitResolver()
{
Ranorex.Core.Resolver.AssemblyLoader.Initialize();
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static void RanorexInit()
{
TestingBootstrapper.SetupCore();
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static int run()
{
int error = 0;
//Start calculator and wait for UI to be loaded
try
{
System.Diagnostics.Process pr = System.Diagnostics.Process.Start("calc.exe");
Thread.Sleep(2000);
//Get process name
string processName = GetActualCalculatorProcessName();
//Find Calculator | Windows 10
if (IsWindows10())
{
WindowsApp calculator = Host.Local.FindSingle("winapp[@processname='" + processName + "']");
Button button = calculator.FindSingle(".//button[@automationid='num2Button']");
button.Click();
button = calculator.FindSingle(".//button[@automationid='plusButton']");
button.Click();
button = calculator.FindSingle(".//button[@automationid='num3Button']");
button.Click();
button = calculator.FindSingle(".//button[@automationid='equalButton']");
button.Click();
//Close calculator
calculator.As().Close();
}
//Find Calculator | Windows 8.X or older
else
{
Form calculator = Host.Local.FindSingle("form[@processname='" + processName + "']");
calculator.EnsureVisible();
Button button = calculator.FindSingle(".//button[@controlid='132']");
button.Click();
button = calculator.FindSingle(".//button[@controlid='92']");
button.Click();
button = calculator.FindSingle(".//button[@controlid='133']");
button.Click();
button = calculator.FindSingle(".//button[@controlid='121']");
button.Click();
//Close calculator
calculator.Close();
}
}
catch (RanorexException e)
{
Console.WriteLine(e.ToString());
error = -1;
}
return error;
}
private static string GetActualCalculatorProcessName()
{
string processName = String.Empty;
var processes = System.Diagnostics.Process.GetProcesses();
foreach (var item in processes)
{
if (item.ProcessName.ToLowerInvariant().Contains("calc"))
{
processName = item.ProcessName;
break;
}
}
return processName;
}
private static bool IsWindows10()
{
var reg = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWAREMicrosoftWindows NTCurrentVersion");
string productName = (string)reg.GetValue("ProductName");
return productName.StartsWith("Windows 10");
}
以下は、Ranorex 8.0 以前の場合のコードです。
[STAThread]
static int Main(string[] args)
int error = 0;
try
{
System.Diagnostics.Process pr = System.Diagnostics.Process.Start("calc.exe");
Form form = Host.Local.FindSingle("form[@processname='"+pr.ProcessName+"']");
form.Activate();
Button button = form.FindSingle(".//button[@controlid='132']");
button.Click();
button = form.FindSingle(".//button[@controlid='92']");
button.Click();
button = form.FindSingle(".//button[@controlid='133']");
button.Click();
button = form.FindSingle(".//button[@controlid='121']");
button.Click();
}
catch (RanorexException e)
{
Console.WriteLine(e.ToString());
error = -1;
}
return error;
}
<stathread> _
Public Shared Function Main(args As String()) As Integer
Dim returnError As Integer = 0
Try
Dim pr As System.Diagnostics.Process = System.Diagnostics.Process.Start("calc.exe")
Dim form As Form = Host.Local.FindSingle(Of Ranorex.Form)("form[@processname='" & pr.ProcessName & "']")
form.Activate()
Dim button As Button = form.FindSingle(Of Ranorex.Button)(".//button[@controlid='132']")
button.Click()
button = form.FindSingle(Of Ranorex.Button)(".//button[@controlid='92']")
button.Click()
button = form.FindSingle(Of Ranorex.Button)(".//button[@controlid='133']")
button.Click()
button = form.FindSingle(Of Ranorex.Button)(".//button[@controlid='121']")
button.Click()
Catch e As RanorexException
Console.WriteLine(e.ToString())
returnError = -1
End Try
Return returnError