【C#】マイクラのプロセス名がMinecraftではなかった話
マイクラ自動化をするにあたり、プロセスに干渉して自動操作みたいなことができないかを試したくて、プロセス名を取得してみたら意外な結果を得られました。
実行環境
- .NET Core 3.1 コンソールアプリケーション
- Minecraft 1.12.2
1. プロセスの取得
プロセスは簡単に言えば「実行中のプログラム」のことです。メモ帳でもペイントでも、何かしらのアプリを起動していると、それらはシステムによって「プロセス」と認識されます。
マイクラ自動化をするにあたり、どうせならプレイヤーの動きも自動化してみたいと思いました。そのためには起動中のプロセスにアクセスしてコマンド、あるいはキー入力をしないといけません。そこで、まずはプロセス名を調べる必要があります。
プロセスを取得するには Process
クラスを使用します。このクラスはコンストラクタを持っているので初期化してそのまま使えます。ちなみに、この子は配列で扱います。
マイクラのプロセス名は minecraft
とかだと思いますが、どんな名前かは分からないので、まずはすべてのプロセスを確認してみます。すべてのプロセスにアクセスするには GetProcesses
メソッドを用います。あとは配列の中をみんな大好き foreach でぶん回します。
public static void Processes() { Process[] processes = Process.GetProcesses(); foreach (var process in processes) { Console.WriteLine($"{process.Id}:{process.ProcessName}"); } }
とりあえずこれでプロセスIDとプロセス名を取得してみます。
あんれぇ~?Minecraft が見つからないですなぁ...。launcherは見つかりましたが、タスクマネージャーを見る限り違うようです。
マイクラにはメモリを大量に与えているので、メモリ量で並び替えて探してみると...。
ん? javaw のメモリ使用量がエグいような...???
2. "javaw.exe" は何者なのか?
Javaをベースに動いているのと、メモリ使用量がエグいという点から javaw
がマインクラフトのプロセス名なのではと推測しました。プロセス名を指定して詳細情報を得るための方法があります。
プロセス名を指定して情報を得るには GetProcessesByName
メソッドを使用します。引数にはプロセス名を入れることでプロパティを参照することができます。配列で宣言する必要がありますが、今回はプロセス名 javaw
が1つしかないので配列 [0] を参照します。
メソッドの詳細はドキュメントを参照してみてください。
public static void GetMinecraftProcess() { //マイクラのプロセス名が "javaw" かもしれないので詳細を得る Process[] process = Process.GetProcessesByName("javaw"); Console.WriteLine($"プロセスID : {process[0].Id}"); Console.WriteLine($"プロセス名 : {process[0].ProcessName}"); Console.WriteLine($"ウィンドウタイトル : {process[0].MainWindowTitle}"); Console.WriteLine($"メインモジュール : {process[0].MainModule}"); Console.WriteLine($"プロセスの優先順位 : {process[0].BasePriority}"); Console.WriteLine($"順位の種類 : {process[0].PriorityClass}"); Console.WriteLine($"メモリ割り当てサイズ : {process[0].PagedMemorySize64}"); Console.WriteLine($"仮想メモリサイズ : {process[0].VirtualMemorySize64}"); }
3. 結論
まずは実行結果です。
ビンゴ!!
ということで、マインクラフトのプロセス名は javaw
でした!
いろいろ気になって java のアプリについて調べてみました。
java
はコンソールアプリケーションで使用するための実行ファイルだそうです。また、 javaw
はウィンドウアプリケーションで使用するための実行ファイルでした。つまり、マインクラフトは javaw
という実行形式で実行されているため、プロセス名が javaw
だったと言えます。
4. おわりに
プロセス名 = アプリ名ではなかったことを知れたのは大きな収穫でした。まさか javaw という名前で動いているとは思いませんでした。意外な結果で面白かったです。今回得られたことをマイクラ自動化で活かせると良いと思いました。
参考サイト
参考にさせていただいたサイトです。ありがとうございます。