【VisualStudio】キーボードマクロの作り方 C#

VisualStudio

前回はプロジェクトの作り方について学びましたね。

今回はキーボードやを自動的に押す方法を紹介したいと思います。

using Systemの追加

前回と同じようにC#のWindowsフォーム アプリケーション(.NET Framework)を使っていきたいと思います。

作り方が分からない方は前回のこちらを見てください

まずは右側ソリューションエクスプローラーの中にある参照を右クリックして下さい。

参照の追加をクリックしてください。

右下の参照をクリックしてください。

その中にあるWindowsBase.dllを選択して追加を押してください

そしてもう1つPresentationCore.dllも同じように追加しましょう。

ちなみにこの2つを参照しないと下のSystemを追加しても動作しません。

using System.Windows.Input;

先程の2つを追加出来たら次はusing System一覧の最後にusing System.Windows.Input;と入力しましょう。

これを追加することによってこれらの関数が使えるようになります。

イベントの追加

private void Form1_Loadにループ処理を書くとフォームが開かれなくなるので新しくイベントを追加します。

デザイン画面を開いて右下のプロパティにあるShownをダブルクリックしてください。

このイベントはフォームが開かれたらスクリプトが動作するという感じなのでここに書けばフォームが開かれない事はなくなります。

使用する関数

Keyboard.IsKeyDown

WPFの中でも今回使用するのはKeyboard.IsKeyDownです。

前回はe.KeyCodeを使用しました。あれでも良いのですが今回は何となくこちらを使います。

if (Keyboard.IsKeyDown(Key.Space)) 
{

}

書き方としてはこのような感じです。Key.の後を書き換えれば他のキーに変更することが出来ます。

while(true)

こちらのコードは常に実行させたい時に使う感じです。forループとは異なりバックグラウンドの処理も取得できるのでバックグラウンドでキーを押したことを取得するためにWhileを使っています。

while (true)
{

}

書き方はこのような感じです。whileの中に先ほどのif (Keyboard.IsKeyDown(Key.Space))を入力すればバックグラウンドでもキー入力を取得できます。

for(int i = 0; i < 1;)

これは最後にi++を付けないのでiの値が増えません。つまり1より大きくなることはありません。ですので無限ループの処理になります。

for(int i = 0; i < 1;)
{

}

書き方はこのような感じになります。止め方は色々ありますが今回は次の方法を使います。

break

こちらはfor処理やwhile処理を止める時に使います。ちなみにこちらのbreakを書いた後ろの処理は実行されないので注意してください。

break;

書き方としては特になくfor内やwhile内に書いておけば大丈夫です。

SendKeys.Send

こちらは文字を入力する時に使います。文字を入力する以外にもキーを押したときと同じ動きをしてくれるのでキーマクロにも使えます。

SendKeys.Send("A");

書き方としてはこのように括弧ないに半角のダブルクオーテーションを使いその中に文字を打ち込めば普通に文字として入力も出来ます。

Application.DoEvents()

こちらはループ処理中にソフトが応答なしになるのを防ぐプログラムです。これを書かないとソフトが応答なしになりループを止めることが出来なくなります。なので必ず書きましょう。

Application.DoEvents();

書き方としてはfor内やwhile内に毎回書く必要があります。

実際にスクリプトを書く

while(true)
{
    Application.DoEvents();
    if (Keyboard.IsKeyDown(Key.A))
    {
        for (int i = 0; i < 1;)
        {
            Application.DoEvents();
            SendKeys.Send("A");
            if (Keyboard.IsKeyDown(Key.B))
            {
                break;
            }
        }
    }
}

コードとしてはこのような感じになります。

まずwhile(true)でずっと処理を回します。

その下のApplication.DoEvents();で応答なしを防ぎます。

そしてif (Keyboard.IsKeyDown(Key.A))でAキーの入力を待ちます。

Aキーが入力されたらApplication.DoEvents();で応答なしを防ぎSendKeys.Sendで文字を入力します。

2つ目のif (Keyboard.IsKeyDown(Key.B))ではBキーの入力待ちです。

Bキーが入力されたらbreak;でforループを止めてAキーの入力待ちに戻ります。

内容としてはこのような感じです。

タイトルとURLをコピーしました