回答編集履歴

1

見直しキャンペーン中

2023/07/25 13:28

投稿

TN8001
TN8001

スコア9855

test CHANGED
@@ -1,131 +1,66 @@
1
1
  > 右クリックを押している状態で左クリックを押す
2
2
 
3
-
4
-
5
3
  ここの解釈ですが順番「右→左」・「左→右」にこだわらないのであれば、マウスフック等を使わずに簡単に実現可能です。
6
-
7
4
  つまり「ある時点で両方押されていればカーソル移動する」で十分な場合です。
8
-
9
5
  それではダメだということであれば、以降見る必要はありません。
10
-
11
-
12
6
 
13
7
  ---
14
8
 
15
-
16
-
17
9
  クリックは自ウィンドウ外では取得できませんが、ボタンが押されているかはカーソル位置によらず取得できます。
18
-
19
10
  ONボタンでタイマー開始し、タイマー中でボタン状態を取得、両方押されていればカーソル移動の流れです。
20
11
 
21
-
22
-
23
12
  * `TrackBar` 2つ
24
-
25
13
  * `Button` 2つ
26
-
27
14
  * `Timer` 1つ
28
-
29
15
  * `Label` 必要なだけ
30
16
 
31
-
32
-
33
17
  をフォームに置きます。
34
-
35
18
  `TrackBar`の`Maximum`・`Minimum`・`TickFrequency`・`TickStyle`各プロパティを好みに調整します。
36
-
37
19
  `Button.Click`・`Timer.Tick`イベントを作成します。
38
20
 
39
-
40
-
41
21
  とりあえずこのようにしました。
42
-
43
22
  ![アプリ画像](a32899804818d6bbf83e7ecac7e20084.png)
44
23
 
45
-
46
-
47
24
  C#コードは雑ですがこのような感じです。
48
-
49
- ```C#
25
+ ```cs
50
-
51
26
  using System;
52
-
53
27
  using System.Drawing;
54
-
55
28
  using System.Windows.Forms;
56
29
 
57
-
58
-
59
30
  namespace Questions306937
60
-
61
31
  {
62
-
63
32
  public partial class Form1 : Form
64
-
65
33
  {
66
-
67
34
  public Form1() => InitializeComponent();
68
35
 
69
-
70
-
71
36
  private void timer1_Tick(object sender, EventArgs e)
72
-
73
37
  {
74
-
75
38
  // 今マウスボタンが左右とも押されていれば...
76
-
77
39
  if (Control.MouseButtons == (MouseButtons.Left | MouseButtons.Right))
78
-
79
40
  {
80
-
81
41
  // タイマーは0.1秒間隔 1秒で指定PX移動のつもり(誤差が出る&10以下だと動かない)
82
-
83
42
  var x = trackBar1.Value / 10;
84
-
85
43
  var y = trackBar2.Value / 10;
86
44
 
87
-
88
-
89
45
  // カーソル位置を更新
90
-
91
46
  Cursor.Position = new Point(Cursor.Position.X + x, Cursor.Position.Y + y);
92
-
93
47
  }
94
-
95
48
  }
96
49
 
97
-
98
-
99
50
  // ONボタンでタイマー開始
100
-
101
51
  private void button1_Click(object sender, EventArgs e) => timer1.Start();
102
52
 
103
-
104
-
105
53
  // OFFボタンでタイマー停止
106
-
107
54
  private void button2_Click(object sender, EventArgs e) => timer1.Stop();
108
-
109
55
  }
110
-
111
56
  }
112
-
113
57
  ```
114
-
115
-
116
58
 
117
59
  「誤差が出る&10以下だと動かない」問題は、気になるようなら別の計算方法を考えてください。
118
60
 
119
-
120
-
121
61
  参考
122
-
123
62
  [TrackBar クラス (System.Windows.Forms) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.trackbar)
124
-
125
-
126
63
 
127
64
  [Control.MouseButtons プロパティ (System.Windows.Forms) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.mousebuttons)
128
65
 
129
-
130
-
131
66
  [Cursor.Position プロパティ (System.Windows.Forms) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.cursor.position)