1 #Region "Microsoft.VisualBasic::73eabd33bd813f254599a3b524614e9e, Microsoft.VisualBasic.Core\ApplicationServices\Terminal\STDIO__\Shell.vb"
2
3     Author:
4     
5           asuka (amethyst.asuka@gcmodeller.org)
6           xie (genetics@smrucc.org)
7           xieguigang (xie.guigang@live.com)
8     
9     Copyright (c) 2018 GPL3 Licensed
10     
11     
12     GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     This program is free software: you can redistribute it and/or modify
16     it under the terms of the GNU General Public License as published by
17     the Free Software Foundation, either version 3 of the License, or
18     (at your option) any later version.
19     
20     This program is distributed in the hope that it will be useful,
21     but WITHOUT ANY WARRANTY; without even the implied warranty of
22     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     GNU General Public License for more details.
24     
25     You should have received a copy of the GNU General Public License
26     along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     /********************************************************************************/
31
32     Summaries:
33
34         Module Shell
35     
36             FunctionGetConsoleWindow, SetConsoleCtrlHandler, Shell, ShowWindow
37     
38             Sub: HideConsoleWindow, ShowConsoleWindows
39     
40     
41     /********************************************************************************/
42
43 #End Region
44
45 Imports System.Text.RegularExpressions
46 Imports System.Runtime.InteropServices
47
48 Namespace Terminal.STDIO__
49
50     '     Created by SharpDevelop.
51     User: WORKGROUP
52     Date: 2015/2/26
53     Time: 0:13
54     
55     To change this template use Tools | Options | Coding | Edit Standard Headers.
56     
57
58     Public Module Shell
59
60         ''<summary>
61         ''You can create a console window In a Windows Forms project.  Project + properties, turn off "Enable application framework" 
62         ''And Set Startup Object To "Sub Main". 
63         ''
64         ''Modify the Application.Run() statement To create the proper startup form, If necessary.
65         ''</summary>
66         ''<returns></returns>
67         Public Declare Auto Function AllocConsole Lib "kernel32.dll" () As Boolean
68
69         <DllImport("user32.dll")>
70         Public Function ShowWindow(hWnd As IntPtr, nCmdShow As IntegerAs Boolean
71         End Function
72
73         <DllImport("kernel32")>
74         Public Function GetConsoleWindow() As IntPtr
75         End Function
76
77         <DllImport("Kernel32")>
78         Private Function SetConsoleCtrlHandler(handler As EventHandler, add As BooleanAs Boolean
79         End Function
80
81         Private ReadOnly hConsole As IntPtr = GetConsoleWindow()
82
83         Public Sub HideConsoleWindow()
84             If IntPtr.Zero <> hConsole Then
85                 Call ShowWindow(hConsole, 0)
86             End If
87         End Sub
88
89         ''<summary>
90         ''为WinForm应用程序分配一个终端窗口,这个函数一般是在Debug模式之下进行程序调试所使用的
91         ''</summary>
92         Public Sub ShowConsoleWindows()
93             If IntPtr.Zero <> hConsole Then
94                 Call ShowWindow(hConsole, 1)
95             End If
96         End Sub
97
98         ''<summary>
99         ''
100         ''</summary>
101         ''<param name="CommandLine"></param>
102         ''<param name="WindowStyle"></param>
103         ''<param name="WaitForExit">If NOT, then the function returns the associated process id value. Else returns the process exit code.</param>
104         ''<returns></returns>
105         ''<remarks></remarks>
106         Public Function Shell(CommandLine As StringOptional WindowStyle As System.Diagnostics.ProcessWindowStyle = ProcessWindowStyle.Normal, Optional WaitForExit As Boolean = FalseAs Integer
107             Dim Tokens = Regex.Split(CommandLine, Global.Microsoft.VisualBasic.CommandLine.SPLIT_REGX_EXPRESSION)
108             Dim EXE As String = Tokens.First
109             Dim Arguments As String = Mid$(CommandLine, Len(EXE) + 1)
110             Dim Process As System.Diagnostics.Process = New Process
111             Dim pInfo As System.Diagnostics.ProcessStartInfo = New ProcessStartInfo(EXE, Arguments)
112
113             Process.StartInfo = pInfo
114             Process.StartInfo.WindowStyle = WindowStyle
115
116             Call Process.Start()
117
118             If Not WaitForExit Then Return Process.Id
119
120             Call Process.WaitForExit()
121             Return Process.ExitCode
122         End Function
123     End Module
124 End Namespace