質問編集履歴

2

コード記載ミスにより

2021/03/19 05:10

投稿

ykondo
ykondo

スコア3

test CHANGED
File without changes
test CHANGED
@@ -218,12 +218,6 @@
218
218
 
219
219
 
220
220
 
221
- SendMessage(SubMenuhWnd, WM_LBUTTONDOWN, MK_LBUTTON, "0");
222
-
223
- SendMessage(SubMenuhWnd, WM_LBUTTONUP, 0x00000000, "0");
224
-
225
-
226
-
227
221
  // 以下に1⃣のコードを書きたい。
228
222
 
229
223
 

1

radian様のご指摘に基づきまして、修正致しました。

2021/03/19 05:10

投稿

ykondo
ykondo

スコア3

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,11 @@
6
6
 
7
7
 
8
8
 
9
- ① Process.Startを使用しても、Errorが起こり、立ち上がらない。
9
+ ① Process.Startを使用しても、起動Errorが起こり、立ち上がらない。
10
+
11
+
12
+
13
+ エラー内容 TOS_ERROR CreateProcess returned 5(アクセスが拒否されました。)
10
14
 
11
15
 
12
16
 
@@ -14,6 +18,10 @@
14
18
 
15
19
 
16
20
 
21
+ Eding-CNC側の方で、【 server priority not REALTIME, Please start as administrator 】という警告が出てしまいます。
22
+
23
+
24
+
17
25
  ③ 新しいタスクの実行(N)で、「このタスクに管理者特権を付与して作成します。」にチェックを入れて起動すると、きちんと起動する。
18
26
 
19
27
 
@@ -46,52 +54,290 @@
46
54
 
47
55
 
48
56
 
49
- ProcessStartInfo pInfo = new ProcessStartInfo();
50
-
51
- pInfo.FileName = "taskmgr";
57
+ 開発環境 Windows10 VisualStudio2019
58
+
52
-
59
+ プロジェクトの種類 WindowsForms
60
+
53
- //pInfo.Verb = "RunAs";
61
+ フレームワークの種類 .NET Framework4.7.2
62
+
63
+
64
+
54
-
65
+ ```using System;
66
+
55
- pInfo.UseShellExecute = true;
67
+ using System.Collections.Generic;
68
+
56
-
69
+ using System.ComponentModel;
70
+
71
+ using System.Data;
72
+
57
- Process.Start(pInfo);
73
+ using System.Drawing;
74
+
58
-
75
+ using System.Linq;
76
+
59
-
77
+ using System.Text;
60
-
78
+
61
- System.Threading.Thread.Sleep(100);
79
+ using System.Threading.Tasks;
62
-
63
-
64
-
65
- IntPtr hWnd = FindWindow("TaskManagerWindow", "タスク マネージャー");
80
+
66
-
67
- if (hWnd != IntPtr.Zero)
81
+ using System.Windows.Forms;
82
+
83
+ using System.Diagnostics;
84
+
85
+ using System.Runtime.InteropServices;
86
+
87
+
88
+
89
+ namespace ExternalProgramLoadTest
68
90
 
69
91
  {
70
92
 
71
- //メニューハンドルをゲット
72
-
73
- int MenuhWnd = GetMenu(hWnd.ToInt32());
93
+ public partial class Form1 : Form
74
-
75
-
76
-
77
- if (MenuhWnd != 0)
78
94
 
79
95
  {
80
96
 
81
- //サブメニューのハンドルをゲット 第2引数はインデックス番号
82
-
83
- IntPtr SubMenuhWnd = GetSubMenu((IntPtr)MenuhWnd, 0);
84
-
85
-
86
-
87
- ここから、わかりません。
88
-
89
-
90
-
91
-    1⃣【ファイル】のサブメニューにある【新しいタスクの実行(N)】を選択
92
-
93
-      して、『新しいタスクの作成ダイアログ』を開く
94
-
95
- }
97
+ [DllImport("user32.dll", CharSet = CharSet.Auto)]
98
+
99
+ static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
100
+
101
+
102
+
103
+ [DllImport("user32.dll", CharSet = CharSet.Auto)]
104
+
105
+ static extern IntPtr FindWindowEx(IntPtr hWndParent, IntPtr hWndChildAfter, string lpClassName, string lpWindowName);
106
+
107
+
108
+
109
+ [DllImport("User32.dll")]
110
+
111
+ public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
112
+
113
+
114
+
115
+ [DllImport("user32.dll")]
116
+
117
+ static extern int GetMenu(int hWnd);
118
+
119
+
120
+
121
+ [DllImport("user32.dll")]
122
+
123
+ static extern IntPtr GetSubMenu(IntPtr hMenu, int nPos);
124
+
125
+
126
+
127
+ [DllImport("user32.dll")]
128
+
129
+ static extern bool SetForegroundWindow(IntPtr hWnd);
130
+
131
+
132
+
133
+ [DllImport("user32.dll")]
134
+
135
+ static extern int TrackPopupMenu(IntPtr hMenu, int uFlags, int x, int y, int nReserved, IntPtr hWnd, IntPtr prcRect);
136
+
137
+
138
+
139
+ private const int WM_SETTEXT = 0x000c;
140
+
141
+
142
+
143
+ private const int WM_LBUTTONDOWN = 0x201;
144
+
145
+ private const int WM_LBUTTONUP = 0x202;
146
+
147
+ private const int MK_LBUTTON = 0x0001;
148
+
149
+
150
+
151
+ private const int WM_COMMAND = 0x0111;
152
+
153
+
154
+
155
+ private const int TPM_LEFTBUTTON = 0;
156
+
157
+ private const int TPM_RETURNCMD = 0x100;
158
+
159
+
160
+
161
+ public Form1()
162
+
163
+ {
164
+
165
+ InitializeComponent();
166
+
167
+ }
168
+
169
+
170
+
171
+ private void button1_Click(object sender, EventArgs e)
172
+
173
+ {
174
+
175
+ ProcessStartInfo pInfo = new ProcessStartInfo();
176
+
177
+ pInfo.FileName = "taskmgr";
178
+
179
+ //pInfo.Verb = "RunAs";
180
+
181
+ pInfo.UseShellExecute = true;
182
+
183
+ Process.Start(pInfo);
184
+
185
+
186
+
187
+ System.Threading.Thread.Sleep(1000);
188
+
189
+
190
+
191
+ IntPtr hWnd = FindWindow("TaskManagerWindow", "タスク マネージャー");
192
+
193
+ textBox1.AppendText(Convert.ToString(hWnd.ToInt32(), 16) + "\r" + "\n");
194
+
195
+
196
+
197
+ if (hWnd != IntPtr.Zero)
198
+
199
+ {
200
+
201
+ //メニューハンドル取得
202
+
203
+ int MenuhWnd = GetMenu(hWnd.ToInt32());
204
+
205
+ textBox1.AppendText(Convert.ToString(MenuhWnd, 16) + "\r" + "\n");
206
+
207
+
208
+
209
+ if (MenuhWnd != 0)
210
+
211
+ {
212
+
213
+ //サブメニューのハンドルを取得 第2引数はインデックス番号を指定
214
+
215
+ IntPtr SubMenuhWnd = GetSubMenu((IntPtr)MenuhWnd, 0);
216
+
217
+ textBox1.AppendText(Convert.ToString(SubMenuhWnd.ToInt32(), 16) + "\r" + "\n");
218
+
219
+
220
+
221
+ SendMessage(SubMenuhWnd, WM_LBUTTONDOWN, MK_LBUTTON, "0");
222
+
223
+ SendMessage(SubMenuhWnd, WM_LBUTTONUP, 0x00000000, "0");
224
+
225
+
226
+
227
+ // 以下に1⃣のコードを書きたい。
228
+
229
+
230
+
231
+ /*
232
+
233
+ //自分自身を最前面へ
234
+
235
+ SetForegroundWindow((IntPtr)this.Handle);
236
+
237
+
238
+
239
+ //選択したメニュー項目のIDを取得
240
+
241
+ int intID = TrackPopupMenu(SubMenuhWnd, TPM_LEFTBUTTON | TPM_RETURNCMD,
242
+
243
+ this.Left, this.Top, 0, (IntPtr)this.Handle, (IntPtr)0);
244
+
245
+ textBox1.AppendText(intID.ToString() + "\r" + "\n");
246
+
247
+
248
+
249
+ //メッセージ送信
250
+
251
+ int ret = SendMessage(hWnd, WM_COMMAND, intID, null);
252
+
253
+ //textBox1.AppendText(ret.ToString() + "\r" + "\n");
254
+
255
+ */
256
+
257
+ }
258
+
259
+ else
260
+
261
+ {
262
+
263
+ MessageBox.Show("メニューハンドル取得失敗!");
264
+
265
+ }
266
+
267
+ }
268
+
269
+ else
270
+
271
+ {
272
+
273
+ MessageBox.Show("タスクマネージャーが見つかりませんでした。");
274
+
275
+ }
276
+
277
+
278
+
279
+
280
+
281
+ hWnd = FindWindow("#32770", "新しいタスクの作成");
282
+
283
+ textBox1.AppendText(Convert.ToString(hWnd.ToInt32(), 16) + "\r" + "\n");
284
+
285
+
286
+
287
+ if (hWnd != IntPtr.Zero)
288
+
289
+ {
290
+
291
+ IntPtr hWnd_Edit = FindWindowEx(hWnd, IntPtr.Zero, "ComboBox", null);
292
+
293
+ IntPtr hWnd_Admin = FindWindowEx(hWnd, IntPtr.Zero, "Button", "このタスクに管理者特権を付与して作成します。");
294
+
295
+ IntPtr hWnd_Button = FindWindowEx(hWnd, IntPtr.Zero, "Button", "OK");
296
+
297
+
298
+
299
+ textBox1.AppendText(Convert.ToString(hWnd_Edit.ToInt32(), 16) + "\r" + "\n");
300
+
301
+ textBox1.AppendText(Convert.ToString(hWnd_Admin.ToInt32(), 16) + "\r" + "\n");
302
+
303
+ textBox1.AppendText(Convert.ToString(hWnd_Button.ToInt32(), 16) + "\r" + "\n");
304
+
305
+
306
+
307
+ SendMessage(hWnd_Edit, WM_SETTEXT, 0, @"C:\CNC4.03\cnc.exe -verb runas");
308
+
309
+ System.Threading.Thread.Sleep(100);
310
+
311
+
312
+
313
+ SendMessage(hWnd_Admin, WM_LBUTTONDOWN, MK_LBUTTON, null);
314
+
315
+ SendMessage(hWnd_Admin, WM_LBUTTONUP, 0x00000000, null);
316
+
317
+ System.Threading.Thread.Sleep(100);
318
+
319
+
320
+
321
+ SendMessage(hWnd_Button, WM_LBUTTONDOWN, MK_LBUTTON, null);
322
+
323
+ SendMessage(hWnd_Button, WM_LBUTTONUP, 0x00000000, null);
324
+
325
+ }
326
+
327
+ else
328
+
329
+ {
330
+
331
+ MessageBox.Show("新しいタスクの作成ダイアログが見つかりませんでした。");
332
+
333
+ }
334
+
335
+ }
336
+
337
+ }
96
338
 
97
339
  }
340
+
341
+ コード
342
+
343
+ ```