C#自动切换Windows窗口程序,如何才能调出主窗口?

 
  1 namespace AutoChangeWindow

  2 {

  3     partial class Form1

  4     {

  5         /// <summary>

  6         /// 必需的设计器变量。

  7         /// </summary>

  8         private System.ComponentModel.IContainer components = null;

  9 

 10         /// <summary>

 11         /// 清理所有正在使用的资源。

 12         /// </summary>

 13         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>

 14         protected override void Dispose(bool disposing)

 15         {

 16             if (disposing && (components != null))

 17             {

 18                 components.Dispose();

 19             }

 20             base.Dispose(disposing);

 21         }

 22 

 23         #region Windows 窗体设计器生成的代码

 24 

 25         /// <summary>

 26         /// 设计器支持所需的方法 - 不要

 27         /// 使用代码编辑器修改此方法的内容。

 28         /// </summary>

 29         private void InitializeComponent()

 30         {

 31             this.btnGetProcessList = new System.Windows.Forms.Button();

 32             this.btnStart = new System.Windows.Forms.Button();

 33             this.txtWin1 = new System.Windows.Forms.TextBox();

 34             this.label1 = new System.Windows.Forms.Label();

 35             this.label2 = new System.Windows.Forms.Label();

 36             this.txtWin2 = new System.Windows.Forms.TextBox();

 37             this.txtWin3 = new System.Windows.Forms.TextBox();

 38             this.label3 = new System.Windows.Forms.Label();

 39             this.label4 = new System.Windows.Forms.Label();

 40             this.btnStop = new System.Windows.Forms.Button();

 41             this.label5 = new System.Windows.Forms.Label();

 42             this.label6 = new System.Windows.Forms.Label();

 43             this.label7 = new System.Windows.Forms.Label();

 44             this.txtSpan1 = new System.Windows.Forms.TextBox();

 45             this.txtSpan2 = new System.Windows.Forms.TextBox();

 46             this.txtSpan3 = new System.Windows.Forms.TextBox();

 47             this.label8 = new System.Windows.Forms.Label();

 48             this.label9 = new System.Windows.Forms.Label();

 49             this.label10 = new System.Windows.Forms.Label();

 50             this.SuspendLayout();

 51             // 

 52             // btnGetProcessList

 53             // 

 54             this.btnGetProcessList.Location = new System.Drawing.Point(-78, -16);

 55             this.btnGetProcessList.Name = "btnGetProcessList";

 56             this.btnGetProcessList.Size = new System.Drawing.Size(75, 23);

 57             this.btnGetProcessList.TabIndex = 10;

 58             this.btnGetProcessList.Text = "获取进程列表";

 59             this.btnGetProcessList.UseVisualStyleBackColor = true;

 60             // 

 61             // btnStart

 62             // 

 63             this.btnStart.Location = new System.Drawing.Point(60, 103);

 64             this.btnStart.Name = "btnStart";

 65             this.btnStart.Size = new System.Drawing.Size(75, 23);

 66             this.btnStart.TabIndex = 11;

 67             this.btnStart.Text = "启动";

 68             this.btnStart.UseVisualStyleBackColor = true;

 69             this.btnStart.Click += new System.EventHandler(this.btnStart_Click);

 70             // 

 71             // txtWin1

 72             // 

 73             this.txtWin1.Location = new System.Drawing.Point(60, 23);

 74             this.txtWin1.Name = "txtWin1";

 75             this.txtWin1.Size = new System.Drawing.Size(195, 21);

 76             this.txtWin1.TabIndex = 12;

 77             // 

 78             // label1

 79             // 

 80             this.label1.AutoSize = true;

 81             this.label1.Location = new System.Drawing.Point(13, 29);

 82             this.label1.Name = "label1";

 83             this.label1.Size = new System.Drawing.Size(47, 12);

 84             this.label1.TabIndex = 13;

 85             this.label1.Text = "窗口1:";

 86             // 

 87             // label2

 88             // 

 89             this.label2.AutoSize = true;

 90             this.label2.Location = new System.Drawing.Point(13, 53);

 91             this.label2.Name = "label2";

 92             this.label2.Size = new System.Drawing.Size(47, 12);

 93             this.label2.TabIndex = 14;

 94             this.label2.Text = "窗口2:";

 95             // 

 96             // txtWin2

 97             // 

 98             this.txtWin2.Location = new System.Drawing.Point(60, 47);

 99             this.txtWin2.Name = "txtWin2";

100             this.txtWin2.Size = new System.Drawing.Size(195, 21);

101             this.txtWin2.TabIndex = 15;

102             // 

103             // txtWin3

104             // 

105             this.txtWin3.Location = new System.Drawing.Point(60, 71);

106             this.txtWin3.Name = "txtWin3";

107             this.txtWin3.Size = new System.Drawing.Size(195, 21);

108             this.txtWin3.TabIndex = 17;

109             // 

110             // label3

111             // 

112             this.label3.AutoSize = true;

113             this.label3.Location = new System.Drawing.Point(13, 77);

114             this.label3.Name = "label3";

115             this.label3.Size = new System.Drawing.Size(47, 12);

116             this.label3.TabIndex = 16;

117             this.label3.Text = "窗口3:";

118             // 

119             // label4

120             // 

121             this.label4.AutoSize = true;

122             this.label4.Location = new System.Drawing.Point(58, 8);

123             this.label4.Name = "label4";

124             this.label4.Size = new System.Drawing.Size(77, 12);

125             this.label4.TabIndex = 18;

126             this.label4.Text = "填写窗口名称";

127             // 

128             // btnStop

129             // 

130             this.btnStop.Location = new System.Drawing.Point(156, 103);

131             this.btnStop.Name = "btnStop";

132             this.btnStop.Size = new System.Drawing.Size(75, 23);

133             this.btnStop.TabIndex = 19;

134             this.btnStop.Text = "停止";

135             this.btnStop.UseVisualStyleBackColor = true;

136             this.btnStop.Click += new System.EventHandler(this.btnStop_Click);

137             // 

138             // label5

139             // 

140             this.label5.AutoSize = true;

141             this.label5.Location = new System.Drawing.Point(262, 28);

142             this.label5.Name = "label5";

143             this.label5.Size = new System.Drawing.Size(29, 12);

144             this.label5.TabIndex = 20;

145             this.label5.Text = "间隔";

146             // 

147             // label6

148             // 

149             this.label6.AutoSize = true;

150             this.label6.Location = new System.Drawing.Point(262, 53);

151             this.label6.Name = "label6";

152             this.label6.Size = new System.Drawing.Size(29, 12);

153             this.label6.TabIndex = 21;

154             this.label6.Text = "间隔";

155             // 

156             // label7

157             // 

158             this.label7.AutoSize = true;

159             this.label7.Location = new System.Drawing.Point(262, 75);

160             this.label7.Name = "label7";

161             this.label7.Size = new System.Drawing.Size(29, 12);

162             this.label7.TabIndex = 22;

163             this.label7.Text = "间隔";

164             // 

165             // txtSpan1

166             // 

167             this.txtSpan1.Location = new System.Drawing.Point(298, 23);

168             this.txtSpan1.Name = "txtSpan1";

169             this.txtSpan1.Size = new System.Drawing.Size(37, 21);

170             this.txtSpan1.TabIndex = 23;

171             // 

172             // txtSpan2

173             // 

174             this.txtSpan2.Location = new System.Drawing.Point(298, 47);

175             this.txtSpan2.Name = "txtSpan2";

176             this.txtSpan2.Size = new System.Drawing.Size(37, 21);

177             this.txtSpan2.TabIndex = 24;

178             // 

179             // txtSpan3

180             // 

181             this.txtSpan3.Location = new System.Drawing.Point(298, 70);

182             this.txtSpan3.Name = "txtSpan3";

183             this.txtSpan3.Size = new System.Drawing.Size(37, 21);

184             this.txtSpan3.TabIndex = 25;

185             // 

186             // label8

187             // 

188             this.label8.AutoSize = true;

189             this.label8.Location = new System.Drawing.Point(341, 29);

190             this.label8.Name = "label8";

191             this.label8.Size = new System.Drawing.Size(17, 12);

192             this.label8.TabIndex = 26;

193             this.label8.Text = "";

194             // 

195             // label9

196             // 

197             this.label9.AutoSize = true;

198             this.label9.Location = new System.Drawing.Point(341, 52);

199             this.label9.Name = "label9";

200             this.label9.Size = new System.Drawing.Size(17, 12);

201             this.label9.TabIndex = 27;

202             this.label9.Text = "";

203             // 

204             // label10

205             // 

206             this.label10.AutoSize = true;

207             this.label10.Location = new System.Drawing.Point(341, 75);

208             this.label10.Name = "label10";

209             this.label10.Size = new System.Drawing.Size(17, 12);

210             this.label10.TabIndex = 28;

211             this.label10.Text = "";

212             // 

213             // Form1

214             // 

215             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);

216             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

217             this.ClientSize = new System.Drawing.Size(490, 175);

218             this.Controls.Add(this.label10);

219             this.Controls.Add(this.label9);

220             this.Controls.Add(this.label8);

221             this.Controls.Add(this.txtSpan3);

222             this.Controls.Add(this.txtSpan2);

223             this.Controls.Add(this.txtSpan1);

224             this.Controls.Add(this.label7);

225             this.Controls.Add(this.label6);

226             this.Controls.Add(this.label5);

227             this.Controls.Add(this.btnStop);

228             this.Controls.Add(this.label4);

229             this.Controls.Add(this.txtWin3);

230             this.Controls.Add(this.label3);

231             this.Controls.Add(this.txtWin2);

232             this.Controls.Add(this.label2);

233             this.Controls.Add(this.label1);

234             this.Controls.Add(this.txtWin1);

235             this.Controls.Add(this.btnStart);

236             this.Controls.Add(this.btnGetProcessList);

237             this.Name = "Form1";

238             this.Text = "窗口自动切换";

239             this.Load += new System.EventHandler(this.Form1_Load);

240             this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);

241             this.ResumeLayout(false);

242             this.PerformLayout();

243 

244         }

245 

246         #endregion

247 

248         private System.Windows.Forms.Button btnGetProcessList;

249         private System.Windows.Forms.Button btnStart;

250         private System.Windows.Forms.TextBox txtWin1;

251         private System.Windows.Forms.Label label1;

252         private System.Windows.Forms.Label label2;

253         private System.Windows.Forms.TextBox txtWin2;

254         private System.Windows.Forms.TextBox txtWin3;

255         private System.Windows.Forms.Label label3;

256         private System.Windows.Forms.Label label4;

257         private System.Windows.Forms.Button btnStop;

258         private System.Windows.Forms.Label label5;

259         private System.Windows.Forms.Label label6;

260         private System.Windows.Forms.Label label7;

261         private System.Windows.Forms.TextBox txtSpan1;

262         private System.Windows.Forms.TextBox txtSpan2;

263         private System.Windows.Forms.TextBox txtSpan3;

264         private System.Windows.Forms.Label label8;

265         private System.Windows.Forms.Label label9;

266         private System.Windows.Forms.Label label10;

267     }

268 }
View Code
  1 using System;

  2 using System.Windows.Forms;

  3 using System.Diagnostics;

  4 using System.Runtime.InteropServices;

  5 using System.Threading;

  6 

  7 namespace AutoChangeWindow

  8 {

  9 

 10     public partial class Form1 : Form

 11     {

 12         public Form1()

 13         {

 14             InitializeComponent();

 15 

 16            

 17             this.txtWin1.Text = "计算器";

 18             this.txtWin2.Text = "无标题 - 记事本";

 19             this.txtWin3.Text = "窗口自动切换";

 20 

 21             this.txtSpan1.Text = this.txtSpan2.Text = this.txtSpan3.Text = "10";

 22 

 23 

 24         }

 25 

 26         #region API

 27 

 28 

 29         [DllImport("user32.dll")]

 30         private static extern bool SetForegroundWindow(IntPtr hWnd);

 31         [DllImport("user32.dll")]

 32         private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

 33 

 34         [DllImport("user32.dll")]

 35         private static extern IntPtr GetForegroundWindow();

 36         [DllImport("kernel32.dll")]

 37         private static extern double GetCurrentThreadId();

 38 

 39         [DllImport("user32.dll")]

 40         private static extern double GetWindowThreadProcessId(IntPtr hWnd, string lpdwProcessId);

 41         [DllImport("user32.dll")]

 42         private static extern bool AttachThreadInput(double idAttach, double idAttachTo, bool fAttach);

 43 

 44         [DllImport("user32.dll", EntryPoint = "ShowWindow", SetLastError = true)]

 45         static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow);

 46 

 47         [DllImport("user32.dll", EntryPoint = "SetWindowPos")]

 48         static extern bool SetWindowPos(

 49         IntPtr hWnd,

 50         IntPtr hWndInsertAfter,

 51         int X,

 52         int Y,

 53         int cx,

 54         int cy,

 55         uint uFlags

 56         );

 57         static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);

 58         static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);

 59         static readonly IntPtr HWND_TOP = new IntPtr(0);

 60         const UInt32 SWP_NOSIZE = 0x0001;

 61         const UInt32 SWP_NOMOVE = 0x0002;

 62         const UInt32 SWP_NOZORDER = 0x0004;

 63         const UInt32 SWP_NOREDRAW = 0x0008;

 64         const UInt32 SWP_NOACTIVATE = 0x0010;

 65         const UInt32 SWP_FRAMECHANGED = 0x0020;

 66         const UInt32 SWP_SHOWWINDOW = 0x0040;

 67         const UInt32 SWP_HIDEWINDOW = 0x0080;

 68         const UInt32 SWP_NOCOPYBITS = 0x0100;

 69         const UInt32 SWP_NOOWNERZORDER = 0x0200;

 70         const UInt32 SWP_NOSENDCHANGING = 0x0400;

 71         const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;

 72 

 73         const UInt32 SW_HIDE = 0;             // ' {隐藏}Private Const SW_ShowNormal = 1         ' {用最近的大小和位置显示, 激活}/

 74         const UInt32 SW_NORMAL = 1;          // ' {同 SW_ShowNORMAL}Private Const SW_ShowMinimized = 2      ' {最小化, 激活}

 75         const UInt32 SW_ShowMaximized = 3;    // ' {最大化, 激活}Private Const SW_Maximize = 3           ' {同 SW_ShowMaximized}

 76         const UInt32 SW_ShowNOACTIVATE = 4;   // ' {用最近的大小和位置显示, 不激活}Private Const SW_Show = 5               ' {同 SW_ShowNORMAL}

 77         const UInt32 SW_Minimize = 6;       // ' {最小化, 不激活}Private Const SW_ShowMinNOACTIVE = 7    ' {同 SW_Minimize}

 78         const UInt32 SW_ShowNA = 8;          // ' {同 SW_ShowNOACTIVATE}Private Const SW_RESTORE = 9            ' {同 SW_ShowNORMAL}

 79         const UInt32 SW_ShowDEFAULT = 10;    // ' {同 SW_ShowNORMAL}Private Const SW_Max = 10               ' {同 SW_ShowNORMAL}

 80         

 81         #endregion

 82 

 83         private void Form1_Load(object sender, EventArgs e)

 84         {

 85 

 86         }

 87 

 88 

 89         int n = 1;

 90 

 91         protected void ExecChangeWindow()

 92         {

 93             do

 94             {

 95                 IntPtr hWnd = FindWindow(null, "计算器");

 96                 double dwForeID;

 97                 double dwCurID;

 98 

 99                 IntPtr hForeWnd = GetForegroundWindow();

100                 dwCurID = GetCurrentThreadId();

101                 dwForeID = GetWindowThreadProcessId(hForeWnd, null);

102                 AttachThreadInput(dwCurID, dwForeID, true);

103                 ShowWindow(hWnd, SW_ShowMaximized);

104                 SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

105                 SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

106                 SetForegroundWindow(hWnd);

107                 AttachThreadInput(dwCurID, dwForeID, false);

108                 int span1 = int.Parse("10");

109                 Thread.Sleep(span1 * 1000);

110 

111                 hWnd = FindWindow(null, "无标题 - 记事本");

112 

113                 hForeWnd = GetForegroundWindow();

114                 dwCurID = GetCurrentThreadId();

115                 dwForeID = GetWindowThreadProcessId(hForeWnd, null);

116                 AttachThreadInput(dwCurID, dwForeID, true);

117                 ShowWindow(hWnd, SW_ShowMaximized);

118                 SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

119                 SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

120                 SetForegroundWindow(hWnd);

121                 AttachThreadInput(dwCurID, dwForeID, false);

122 

123                 span1 = int.Parse("10");

124 

125                Thread.Sleep(span1 * 1000);

126 

127 

128 

129                //hWnd = FindWindow(null, "窗口自动切换");

130 

131                //hForeWnd = GetForegroundWindow();

132                //dwCurID = GetCurrentThreadId();

133                //dwForeID = GetWindowThreadProcessId(hForeWnd, null);

134                //AttachThreadInput(dwCurID, dwForeID, true);

135                //ShowWindow(hWnd, SW_ShowMaximized);

136                //SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

137                //SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

138                //SetForegroundWindow(hWnd);

139                //AttachThreadInput(dwCurID, dwForeID, false);

140 

141                //span1 = int.Parse("10");

142 

143                //Thread.Sleep(span1 * 1000);

144 

145             }

146             while (n > 0);

147         }

148 

149 

150         private void btnStart_Click(object sender, EventArgs e)

151         {

152 

153 

154             Thread thread = new Thread(new ThreadStart(ExecChangeWindow));

155             

156           //  ThreadPool.QueueUserWorkItem(new WaitCallback(ExecChangeWindow));

157 

158         }

159 

160         private void btnStop_Click(object sender, EventArgs e)

161         {

162      

163             n = 0;

164         }

165 

166         private void Form1_KeyDown(object sender, KeyEventArgs e)

167         {

168             if (e.KeyCode == Keys.F12)

169             {

170                 

171             }

172         }

173 

174 

175 

176 

177 

178 

179     }

180 }
View Code


求教:为何我的主窗口切不到最上面,一直显示“无法响应”,我猜的原因是Thread.Sleep()导致的。

 

请问我该如何做,可以切到主窗口并能执行“停止”动作呢?

你可能感兴趣的:(windows)