時間指定自動クリックプログラム
個人的に「指定した時刻になったら、画面上の指定した位置にカーソルが移動してクリックしていくようなプログラムが欲しい」と思ったため、空き時間に 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件のコメントがあります。
コメントは受け付けていません。