マウスカーソルを任意の画像に変更する VB

拡張子PNG画像をカーソルにする方法をネット探してもいいのがなかなか見つからないので適当にメモ...




osu!スキン中のカーソルを使わせて頂きました

最小限の処理ですが、十分使えると思います。方法としては、カーソル自体を画像にするのではなくカーソルを非表示にしてから、カーソルの座標上に画像を表示したPictureBoxを表示するというものです。(結構無理矢理な気がしますが気にしない気にしない(;・∀・)w


準備:
ツールボックスからTimerコントロールとPictureBoxコントロールを出します。
TimerのInterval(間隔)は10前後にしておくのが適当だと思います。フレームレートにすると100前後になるはずだから十分だろう...
PictureBoxの背景をTransparent(透明)にしておきます。


コード:

'変数を宣言
Dim CursorX As Integer
Dim CursorY As Integer


Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'タイマーを有効にする
Timer1.Enabled = True
'カーソルを非表示する場合
'Cursor.Hide()
'PictureBoxの大きさを画像に合わせる設定にする。
PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
'ピクチャーボックスにカーソルを表示
PictureBox1.Image = Image.FromFile("Cursor.png")
'画像読み込み後のPictureBoxのサイズを取得
CursorX = Me.PictureBox1.Width
CursorY = Me.PictureBox1.Height

End Sub


Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
'マウスカーソルの位置を取得
Dim Coordinate As Point = Me.PointToClient(Windows.Forms.Cursor.Position)
' PictureBox1をカーソルの位置に動かす。カーソルの真ん中に画像が表示されるよう、カーソルを表示しているPictureBoxのサイズの二分の一をX,Yそれぞれ引く
Me.PictureBox1.Location = New Point(Coordinate.X - (CursorX / 2), Coordinate.Y - (CursorY / 2))
End Sub


余談:
MouseMoveコントロールを使った方がいい気がしますが、重いせいかうまく動かないのでTimerコントロールを使用しています。

コード自体は最小限の処理なので適当に改造していただければ...( ゚д゚)ハッ!

暇がある時にC#のコードも追加しようと思います。

では!