時間指定自動クリックプログラム

個人的に「指定した時刻になったら、画面上の指定した位置にカーソルが移動してクリックしていくようなプログラムが欲しい」と思ったため、空き時間に VB.Net で作成してみました。もしかしたら需要があるかもしれませんので、こういう機能について説明してみます。


画面上でクリックする機能については、Windows API に該当する機能があるため、それを使えば実装できます。まず VB.Net で新規プロジェクトを作成し、Form1 にテキストボックス、ボタン、ラベルを以下のように配置します。この例では最大5点まで設定可能としています。

テキストボックス、ボタン、ラベルの名前はそれぞれ以下のように設定します。(下図は、左端のテキストボックスは上から「TextBox_H1」「TextBox_H2」「TextBox_H3」「TextBox_H4」「TextBox_H5」という名前、2列目は「TextBox_M1」~「TextBox_M5」という名前にするという意味)

さらにツールボックスからフォームに Timer1 を追加し、Interval を1000に変更します。また、デフォルトではフォームのプロパティにある KeyPreview が False になっているので、ここを True に変えておきます。

フォームのコードを以下のように記述します。VB.Net にはかつての VB6 のようなコントロール配列がないため、疑似的にコントロール配列のような設定をしています。

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Integer, ByVal dx As Integer,
                                              ByVal dy As Integer, ByVal cButtons As Integer,
                                              ByVal dwExtraInfo As Integer)

Private Const MOUSEEVENTF_LEFTUP As Integer = &H4
Private Const MOUSEEVENTF_LEFTDOWN As Integer = &H2

Dim TextBox_H() As TextBox, TextBox_M() As TextBox, TextBox_S() As TextBox, TextBox_X() As TextBox, TextBox_Y() As TextBox
Dim N_Click As Integer, Click_Time(,) As Integer, Click_Position(,) As Integer
Dim Coord_SetMode As Integer

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown

    If e.KeyCode = Keys.Escape Then
        e.Handled = True
        Label_Mode.BackColor = Color.White
        Coord_SetMode = 0
    End If

End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    TextBox_H = New TextBox() {TextBox_H1, TextBox_H2, TextBox_H3, TextBox_H4, TextBox_H5}
    TextBox_M = New TextBox() {TextBox_M1, TextBox_M2, TextBox_M3, TextBox_M4, TextBox_M5}
    TextBox_S = New TextBox() {TextBox_S1, TextBox_S2, TextBox_S3, TextBox_S4, TextBox_S5}
    TextBox_X = New TextBox() {TextBox_X1, TextBox_X2, TextBox_X3, TextBox_X4, TextBox_X5}
    TextBox_Y = New TextBox() {TextBox_Y1, TextBox_Y2, TextBox_Y3, TextBox_Y4, TextBox_Y5}

    ReDim Click_Time(2, TextBox_H.Length)
    ReDim Click_Position(1, TextBox_H.Length)

    Button_Stop.Enabled = False
    Coord_SetMode = 0

End Sub

Private Sub Button_Start_Click(sender As Object, e As EventArgs) Handles Button_Start.Click

    N_Click = TextBox_H.Length
    For i = 1 To TextBox_H.Length
        If TextBox_H(i - 1).Text = "" Then
            N_Click = i - 1
            Exit For
        End If

        Click_Time(0, i - 1) = Val(TextBox_H(i - 1).Text)
        Click_Time(1, i - 1) = Val(TextBox_M(i - 1).Text)
        Click_Time(2, i - 1) = Val(TextBox_S(i - 1).Text)
        Click_Position(0, i - 1) = Val(TextBox_X(i - 1).Text)
        Click_Position(1, i - 1) = Val(TextBox_Y(i - 1).Text)
    Next i

    Button_Start.Enabled = False
    Button_Stop.Enabled = True
    Timer1.Enabled = True

End Sub

Private Sub Button_Stop_Click(sender As Object, e As EventArgs) Handles Button_Stop.Click

    Button_Start.Enabled = True
    Button_Stop.Enabled = False
    Timer1.Enabled = False

End Sub

Private Sub Label_Mode_Click(sender As Object, e As EventArgs) Handles Label_Mode.Click

    If Coord_SetMode = 0 Then
        Label_Mode.BackColor = Color.Cyan
        Coord_SetMode = 1
    Else
        Label_Mode.BackColor = Color.White
        Coord_SetMode = 0
    End If

End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

    Dim DateNow As Date = Date.Now
    Dim iHour As Integer = DateNow.Hour
    Dim iMinute As Integer = DateNow.Minute
    Dim iSecond As Integer = DateNow.Second

    For i = 1 To N_Click
        If iHour = Click_Time(0, i - 1) And iMinute = Click_Time(1, i - 1) And iSecond = Click_Time(2, i - 1) Then
            Cursor.Position = New Point(Click_Position(0, i - 1), Click_Position(1, i - 1))
            Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
            Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
            Exit For
        End If
    Next i

End Sub

Private Sub TextBox_X_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox_X1.KeyPress,
                                                                                 TextBox_X2.KeyPress,
                                                                                 TextBox_X3.KeyPress,
                                                                                 TextBox_X4.KeyPress,
                                                                                 TextBox_X5.KeyPress

    For i = 1 To TextBox_X.Length
        If sender.name = TextBox_X(i - 1).Name Then
            If e.KeyChar = ChrW(Keys.Enter) Then
                e.Handled = True
                If Coord_SetMode = 1 Then
                    Dim Mouse_X As Integer = Cursor.Position.X
                    Dim Mouse_Y As Integer = Cursor.Position.Y
                    TextBox_X(i - 1).Text = Mouse_X
                    TextBox_Y(i - 1).Text = Mouse_Y
                End If
            End If
            Exit For
        End If
    Next i

End Sub

これでプログラムが機能するようになります。使い方は以下の通りです。

まずは、画面上の座標値を設定するために Coord Set Mode をクリックして設定モードにします。設定モードのときは背景色が青に変わります。この状態で X の列をクリックします。

クリックしたい位置にカーソルを移動させ、Enter キーを押すとカーソルがある位置の座標が設定されます。

画面上の座標値は、左上が原点で X は右方向がプラス、Y は下方向がプラスになります。試しにカーソルを画面左上の端に移動させて Enter キーを押すと、X,Y にゼロが設定されることがわかるはずです。

クリックする位置は最大5点まで設定可能です。座標値の設定が終わったら、クリックしたい時刻を設定します。なお、Coord Set Mode をもう一度クリックするか、または Esc キーを押すと設定モードが解除されます。

この状態で Start ボタンを押すと、指定した時刻になったときにカーソルが指定位置へ移動してクリックします。

Stop ボタンで動作を止めることができます。


なぜこのようなプログラムを自作したのかというと、ブラウザ上でしか操作できない機能を夜中に実行したいと思ったためです。サーバーに直接アクセスして操作するのはリスクが高いうえ、夜中に起き出して作業するのは避けたいので、「だったら画面にブラウザを表示させておき、指定時刻になったらカーソルが移動してクリックしていくプログラムを作ればいいじゃないか」と考えました。

ここで紹介したプログラムはサンプルなので最大5点しか設定できませんが、実際に私が使っているのは以下のプログラムです。

細かくてなんだかわからないと思いますが、タブを切り替えることで曜日ごと(月曜~金曜)に設定できるようにして、点数を各曜日で最大60点に増やしています。さらにクリックするだけでなく文字列を送信できるようにして、設定した時刻と座標値の保存と呼び出しが可能になっています。これで夜中に起き出す必要がなく、安心して眠れるようになりました。


ここで紹介したコードを改良すれば、クリックできる回数を増やしたり曜日ごとに設定したりすることは可能です。改良は自由に行ってもらって構いませんが、「自分はプログラムが書けないので作成してほしい」という方がおられましたらご連絡ください。有償にはなりますが、ご希望通りのソフトウェアを作成いたします。

とりあえずサンプルのプログラムを使ってみたいという方は、以下のリンクからダウンロードしてください。

なお、このプログラムはあくまでサンプルとして作成したものなので、これを使った結果損害が出たとしても当社は責任を負いません。使用はあくまで自己責任でお願いします。


(2023.12 追記)

この時間指定自動クリックプログラムについて、意外と需要がありそうな気がしてきたので製品版を作成してみました。有償ソフトウェアとして公開していますので、興味がありましたら以下の記事を参照して下さい。

時間指定自動クリックプログラム製品版

かなり機能を追加し、データの保存と呼び出し、クリップボードへのコピー&ペーストが可能となっています。

時間指定自動クリックプログラム” に対して1件のコメントがあります。

コメントは受け付けていません。