質問編集履歴

4

ソースの編集。試したことの追加。

2018/05/09 11:00

投稿

urazumi
urazumi

スコア7

test CHANGED
File without changes
test CHANGED
@@ -16,139 +16,27 @@
16
16
 
17
17
  Program.cs
18
18
 
19
+
20
+
19
21
  ```C#
20
22
 
21
23
  using System;
22
24
 
23
- using System.Runtime.InteropServices;
24
-
25
25
  using System.Windows.Forms;
26
-
27
- using System.Drawing;
28
-
29
- using System.Text;
30
26
 
31
27
 
32
28
 
33
- namespace TTrainer
29
+ namespace MinimizeList
34
30
 
35
31
  {
36
32
 
37
- public class Program
33
+ static class Program
38
34
 
39
35
  {
40
36
 
41
- [DllImport("user32.dll")]
42
-
43
- static extern int ShowWindow(IntPtr hWnd, int command);
44
-
45
- [DllImport("user32.dll", EntryPoint = "GetWindowText", CharSet = CharSet.Auto)]
46
-
47
- public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
48
-
49
- [DllImport("user32.dll")]
50
-
51
- public static extern Boolean IsIconic(IntPtr hWnd);
37
+ public static Form1 form = new Form1();
52
-
53
- [DllImport("user32.dll")]
54
-
55
- private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, IntPtr lParam);
56
-
57
- // EnumWindowsから呼び出されるコールバック関数WNDENUMPROCのデリゲート
58
-
59
- private delegate bool WNDENUMPROC(IntPtr hWnd, IntPtr lParam);
60
-
61
- [DllImport("user32.dll", CharSet = CharSet.Auto)]
62
-
63
- static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
64
-
65
- [DllImport("user32.dll")]
66
-
67
- [return: MarshalAs(UnmanagedType.Bool)]
68
-
69
- static extern bool SetForegroundWindow(IntPtr hWnd);
70
38
 
71
39
 
72
-
73
- public static ContextMenuStrip rmenu = new ContextMenuStrip();
74
-
75
- public static ToolStripMenuItem rmenuItem = new ToolStripMenuItem();
76
-
77
- // ウィンドウを列挙するためのコールバックメソッド
78
-
79
- private static bool EnumerateWindow(IntPtr hWnd, IntPtr lParam)
80
-
81
- {
82
-
83
- // ウィンドウが最小化されているかかどうか調べる
84
-
85
- if (IsIconic(hWnd))
86
-
87
- {
88
-
89
- PrintCaptionAndProcess(hWnd);
90
-
91
- }
92
-
93
- return true;
94
-
95
- }
96
-
97
-
98
-
99
- static void PrintCaptionAndProcess(IntPtr hWnd)
100
-
101
- {
102
-
103
- StringBuilder caption = new StringBuilder(0x1000);
104
-
105
- GetWindowText(hWnd, caption, caption.Capacity);
106
-
107
- if (caption.Length != 0)
108
-
109
- {
110
-
111
- rmenuItem = new ToolStripMenuItem();
112
-
113
- rmenuItem.Text = caption.ToString();
114
-
115
-
116
-
117
- if (rmenuItem.Text != "PnpMgr" &&
118
-
119
- rmenuItem.Text != "DWM Notification Window")
120
-
121
- {
122
-
123
- rmenuItem.Click += new EventHandler(MenuItemClickHandler);
124
-
125
- rmenu.Items.Add(rmenuItem);
126
-
127
- }
128
-
129
- }
130
-
131
-
132
-
133
- }
134
-
135
-
136
-
137
- static void MenuItemClickHandler(object sender, EventArgs ej)
138
-
139
- {
140
-
141
- ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
142
-
143
- IntPtr hWnd = FindWindow(null, clickedItem.Text);
144
-
145
- ShowWindow(hWnd, 1);
146
-
147
- SetForegroundWindow(hWnd);
148
-
149
- }
150
-
151
-
152
40
 
153
41
  static void Khooked(object sender, KeyboardHookedEventArgs e)
154
42
 
@@ -170,23 +58,21 @@
170
58
 
171
59
  }
172
60
 
173
-
61
+
174
62
 
175
63
  public static void OpenMenu()
176
64
 
177
65
  {
178
66
 
179
- rmenu.Items.Clear();
67
+ form.contextMenuStrip1.Items.Clear();
180
68
 
181
- EnumWindows(EnumerateWindow, IntPtr.Zero);
69
+ form.contextMenuStrip1.Items.Add("キャンセル");
182
70
 
183
- rmenu.Items.Add("-");
71
+ form.contextMenuStrip1.Show(Cursor.Position, ToolStripDropDownDirection.BelowRight);
184
72
 
185
- rmenu.Items.Add("キャンセル");
73
+ form.contextMenuStrip1.ShowImageMargin = false;
186
74
 
187
- rmenu.Show(Cursor.Position, ToolStripDropDownDirection.BelowRight);
188
75
 
189
- rmenu.ShowImageMargin = false;
190
76
 
191
77
  }
192
78
 
@@ -198,107 +84,87 @@
198
84
 
199
85
  {
200
86
 
201
- Tasktray task = new Tasktray();
202
-
203
87
  KeyboardHook Khook = new KeyboardHook();
204
88
 
205
89
  Khook.KeyboardHooked += new KeyboardHookedEventHandler(Khooked);
206
90
 
207
- Application.Run();
91
+ Application.Run(form);
208
92
 
209
93
  }
210
94
 
211
95
  }
212
96
 
97
+ }
98
+
99
+ ```
100
+
101
+ Form1.cs
102
+
103
+ ```C#
104
+
105
+ using System;
106
+
107
+ using System.ComponentModel;
108
+
109
+ using System.Windows.Forms;
213
110
 
214
111
 
112
+
113
+ namespace MinimizeList
114
+
115
+ {
116
+
215
- class Tasktray : Form
117
+ public partial class Form1 : Form
216
118
 
217
119
  {
218
120
 
219
- NotifyIcon icon = new NotifyIcon();
121
+ public Form1()
220
122
 
221
- ContextMenuStrip menu = new ContextMenuStrip();
123
+ {
222
124
 
223
- ToolStripMenuItem menuItem = new ToolStripMenuItem();
125
+ InitializeComponent();
126
+
127
+ }
224
128
 
225
129
 
226
130
 
227
- public Tasktray()
131
+ private void Form1_Load(object sender, EventArgs e)
228
132
 
229
133
  {
230
134
 
231
135
  this.ShowInTaskbar = false;
232
136
 
233
- this.SetComponents();
137
+ this.Hide();
234
138
 
235
139
  }
236
140
 
237
141
 
238
142
 
239
- private void Close_Click(object sender, EventArgs e)
143
+ private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
240
144
 
241
145
  {
242
146
 
243
- icon.Visible = false;
244
147
 
245
- Application.Exit();
246
-
247
- }
248
-
249
- private void Mouse_Click(object sender, MouseEventArgs e)
250
-
251
- {
252
-
253
- if (e.Button == MouseButtons.Right)
254
-
255
- {
256
-
257
- menuItem.Text = "&終了";
258
-
259
- menu.Items.Add(menuItem);
260
-
261
- menuItem.Click += new EventHandler(Close_Click);
262
-
263
- menu.ShowImageMargin = false;
264
-
265
- icon.ContextMenuStrip = menu;
266
-
267
- }
268
-
269
- else
270
-
271
- {
272
-
273
- Program.OpenMenu();
274
-
275
- }
276
148
 
277
149
  }
278
150
 
279
151
 
280
152
 
281
- private void SetComponents()
153
+ private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
282
154
 
283
155
  {
284
156
 
285
- icon.Icon = new Icon("Icon1.ico");
286
157
 
287
- icon.Visible = true;
288
-
289
- icon.MouseClick += new MouseEventHandler(Mouse_Click);
290
158
 
291
159
  }
292
-
293
-
294
160
 
295
161
  }
296
162
 
297
163
  }
298
164
 
165
+ ```
299
166
 
300
167
 
301
- ```
302
168
 
303
169
  KeyboardHook.cs
304
170
 
@@ -306,10 +172,18 @@
306
172
 
307
173
  こちらのサイトのKeyboardHook3.cs
308
174
 
309
- ```
175
+
310
176
 
311
177
  ### 試したこと
312
178
 
313
179
 
314
180
 
315
181
  タスクトレイを左クリックした際にContextMenuStripが表示されるよう作ってみましたが、その時にもタスクバーは出てしまいました。
182
+
183
+ 現象の起きる最低限のプログラムを作成しました。(ソース修正しました。)
184
+
185
+ FormにnotifyIconとcontextMenuStripを追加してHideさせてみましたが、
186
+
187
+ タスクトレイを右クリックした時にはタスクバーに表示はされませんが、
188
+
189
+ RControlキーを押してマウスポインターの位置でContextMenuStripを出すとやはりタスクバーが出てしまいました。

3

アプリ説明の修正

2018/05/09 11:00

投稿

urazumi
urazumi

スコア7

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  タスクトレイのみで常駐するWindowsFormアプリケーションです。
2
2
 
3
- 任意のキーを押したらマウスポインターの位置にContextMenuStripが表示されるプログラムを作っています。その時にContextMenuStrip自身のタスクバーも表示されてしまいます。
3
+ RContrlキーを押したらマウスポインターの位置にContextMenuStripが表示されるプログラムを作っています。その時にContextMenuStrip自身のタスクバーも表示されてしまいます。
4
4
 
5
5
  そのタスクバー表示を非表示にする方法を教えて頂きたいです。
6
6
 

2

ソースの詳細追加。

2018/05/09 00:09

投稿

urazumi
urazumi

スコア7

test CHANGED
File without changes
test CHANGED
@@ -12,51 +12,301 @@
12
12
 
13
13
  Windows10 Home
14
14
 
15
+
16
+
17
+ Program.cs
18
+
19
+ ```C#
20
+
21
+ using System;
22
+
23
+ using System.Runtime.InteropServices;
24
+
25
+ using System.Windows.Forms;
26
+
27
+ using System.Drawing;
28
+
29
+ using System.Text;
30
+
31
+
32
+
33
+ namespace TTrainer
34
+
35
+ {
36
+
37
+ public class Program
38
+
39
+ {
40
+
41
+ [DllImport("user32.dll")]
42
+
43
+ static extern int ShowWindow(IntPtr hWnd, int command);
44
+
45
+ [DllImport("user32.dll", EntryPoint = "GetWindowText", CharSet = CharSet.Auto)]
46
+
47
+ public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
48
+
49
+ [DllImport("user32.dll")]
50
+
51
+ public static extern Boolean IsIconic(IntPtr hWnd);
52
+
53
+ [DllImport("user32.dll")]
54
+
55
+ private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, IntPtr lParam);
56
+
57
+ // EnumWindowsから呼び出されるコールバック関数WNDENUMPROCのデリゲート
58
+
59
+ private delegate bool WNDENUMPROC(IntPtr hWnd, IntPtr lParam);
60
+
61
+ [DllImport("user32.dll", CharSet = CharSet.Auto)]
62
+
63
+ static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
64
+
65
+ [DllImport("user32.dll")]
66
+
67
+ [return: MarshalAs(UnmanagedType.Bool)]
68
+
69
+ static extern bool SetForegroundWindow(IntPtr hWnd);
70
+
71
+
72
+
73
+ public static ContextMenuStrip rmenu = new ContextMenuStrip();
74
+
75
+ public static ToolStripMenuItem rmenuItem = new ToolStripMenuItem();
76
+
77
+ // ウィンドウを列挙するためのコールバックメソッド
78
+
79
+ private static bool EnumerateWindow(IntPtr hWnd, IntPtr lParam)
80
+
81
+ {
82
+
83
+ // ウィンドウが最小化されているかかどうか調べる
84
+
85
+ if (IsIconic(hWnd))
86
+
87
+ {
88
+
89
+ PrintCaptionAndProcess(hWnd);
90
+
91
+ }
92
+
93
+ return true;
94
+
95
+ }
96
+
97
+
98
+
99
+ static void PrintCaptionAndProcess(IntPtr hWnd)
100
+
101
+ {
102
+
103
+ StringBuilder caption = new StringBuilder(0x1000);
104
+
105
+ GetWindowText(hWnd, caption, caption.Capacity);
106
+
107
+ if (caption.Length != 0)
108
+
109
+ {
110
+
111
+ rmenuItem = new ToolStripMenuItem();
112
+
113
+ rmenuItem.Text = caption.ToString();
114
+
115
+
116
+
117
+ if (rmenuItem.Text != "PnpMgr" &&
118
+
119
+ rmenuItem.Text != "DWM Notification Window")
120
+
121
+ {
122
+
123
+ rmenuItem.Click += new EventHandler(MenuItemClickHandler);
124
+
125
+ rmenu.Items.Add(rmenuItem);
126
+
127
+ }
128
+
129
+ }
130
+
131
+
132
+
133
+ }
134
+
135
+
136
+
137
+ static void MenuItemClickHandler(object sender, EventArgs ej)
138
+
139
+ {
140
+
141
+ ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
142
+
143
+ IntPtr hWnd = FindWindow(null, clickedItem.Text);
144
+
145
+ ShowWindow(hWnd, 1);
146
+
147
+ SetForegroundWindow(hWnd);
148
+
149
+ }
150
+
151
+
152
+
153
+ static void Khooked(object sender, KeyboardHookedEventArgs e)
154
+
155
+ {
156
+
157
+ if (e.UpDown == KeyboardUpDown.Down)
158
+
159
+ {
160
+
161
+ if (e.KeyCode == Keys.RControlKey)
162
+
163
+ {
164
+
165
+ OpenMenu();
166
+
167
+ }
168
+
169
+ }
170
+
171
+ }
172
+
173
+
174
+
175
+ public static void OpenMenu()
176
+
177
+ {
178
+
179
+ rmenu.Items.Clear();
180
+
181
+ EnumWindows(EnumerateWindow, IntPtr.Zero);
182
+
183
+ rmenu.Items.Add("-");
184
+
185
+ rmenu.Items.Add("キャンセル");
186
+
187
+ rmenu.Show(Cursor.Position, ToolStripDropDownDirection.BelowRight);
188
+
189
+ rmenu.ShowImageMargin = false;
190
+
191
+ }
192
+
193
+
194
+
195
+ [STAThread]
196
+
197
+ static void Main()
198
+
199
+ {
200
+
201
+ Tasktray task = new Tasktray();
202
+
203
+ KeyboardHook Khook = new KeyboardHook();
204
+
205
+ Khook.KeyboardHooked += new KeyboardHookedEventHandler(Khooked);
206
+
207
+ Application.Run();
208
+
209
+ }
210
+
211
+ }
212
+
213
+
214
+
215
+ class Tasktray : Form
216
+
217
+ {
218
+
219
+ NotifyIcon icon = new NotifyIcon();
220
+
221
+ ContextMenuStrip menu = new ContextMenuStrip();
222
+
223
+ ToolStripMenuItem menuItem = new ToolStripMenuItem();
224
+
225
+
226
+
227
+ public Tasktray()
228
+
229
+ {
230
+
231
+ this.ShowInTaskbar = false;
232
+
233
+ this.SetComponents();
234
+
235
+ }
236
+
237
+
238
+
239
+ private void Close_Click(object sender, EventArgs e)
240
+
241
+ {
242
+
243
+ icon.Visible = false;
244
+
245
+ Application.Exit();
246
+
247
+ }
248
+
249
+ private void Mouse_Click(object sender, MouseEventArgs e)
250
+
251
+ {
252
+
253
+ if (e.Button == MouseButtons.Right)
254
+
255
+ {
256
+
257
+ menuItem.Text = "&終了";
258
+
259
+ menu.Items.Add(menuItem);
260
+
261
+ menuItem.Click += new EventHandler(Close_Click);
262
+
263
+ menu.ShowImageMargin = false;
264
+
265
+ icon.ContextMenuStrip = menu;
266
+
267
+ }
268
+
269
+ else
270
+
271
+ {
272
+
273
+ Program.OpenMenu();
274
+
275
+ }
276
+
277
+ }
278
+
279
+
280
+
281
+ private void SetComponents()
282
+
283
+ {
284
+
285
+ icon.Icon = new Icon("Icon1.ico");
286
+
287
+ icon.Visible = true;
288
+
289
+ icon.MouseClick += new MouseEventHandler(Mouse_Click);
290
+
291
+ }
292
+
293
+
294
+
295
+ }
296
+
297
+ }
298
+
299
+
300
+
15
301
  ```
16
302
 
303
+ KeyboardHook.cs
304
+
17
- static void Khooked(object sender, KeyboardHookedEventArgs e)
305
+ http://hongliang.seesaa.net/article/7539988.html
18
-
19
- {
306
+
20
-
21
- if (e.UpDown == KeyboardUpDown.Down)
307
+ こちらのサイトのKeyboardHook3.cs
22
-
308
+
23
- {
309
+ ```
24
-
25
- if (e.KeyCode == Keys.RControlKey)
26
-
27
- {
28
-
29
- OpenMenu();
30
-
31
- }
32
-
33
- }
34
-
35
- }
36
-
37
-
38
-
39
- public static void OpenMenu()
40
-
41
- {
42
-
43
- rmenu.Items.Clear();
44
-
45
- EnumWindows(EnumerateWindow, IntPtr.Zero);
46
-
47
- rmenu.Items.Add("-");
48
-
49
- rmenu.Items.Add("キャンセル");
50
-
51
- rmenu.Show(Cursor.Position, ToolStripDropDownDirection.BelowRight);
52
-
53
- rmenu.ShowImageMargin = false;
54
-
55
-
56
-
57
- }
58
-
59
-
60
310
 
61
311
  ### 試したこと
62
312
 

1

開発環境の記載追加。作成しているアプリの詳細追加。

2018/05/08 23:58

投稿

urazumi
urazumi

スコア7

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- タスクトレイのみで常駐します。
1
+ タスクトレイのみで常駐するWindowsFormアプリケーションです
2
2
 
3
3
  任意のキーを押したらマウスポインターの位置にContextMenuStripが表示されるプログラムを作っています。その時にContextMenuStrip自身のタスクバーも表示されてしまいます。
4
4
 
@@ -6,7 +6,11 @@
6
6
 
7
7
 
8
8
 
9
- C# Visual Studio 2017
9
+ C# Visual Studio Community 2017 v15.7.0
10
+
11
+ .NET v4.7.03056
12
+
13
+ Windows10 Home
10
14
 
11
15
  ```
12
16