1 #Region "Microsoft.VisualBasic::9739a2dfdefc02b9fe20ca81f03b878d, 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     '
51     ' * Created by SharpDevelop.
52     ' * User: WORKGROUP
53     ' * Date: 2015/2/26
54     ' * Time: 0:13
55     ' * 
56     ' * To change this template use Tools | Options | Coding | Edit Standard Headers.
57     
58
59     Public Module Shell
60
61         ''' <summary>
62         ''' You can create a console window In a Windows Forms project.  Project + properties, turn off "Enable application framework" 
63         ''' And Set Startup Object To "Sub Main". 
64         ''' 
65         ''' Modify the Application.Run() statement To create the proper startup form, If necessary.
66         ''' </summary>
67         ''' <returns></returns>
68         Public Declare Auto Function AllocConsole Lib "kernel32.dll" () As Boolean
69
70         <DllImport("user32.dll")>
71         Public Function ShowWindow(hWnd As IntPtr, nCmdShow As IntegerAs Boolean
72         End Function
73
74         <DllImport("kernel32")>
75         Public Function GetConsoleWindow() As IntPtr
76         End Function
77
78         <DllImport("Kernel32")>
79         Private Function SetConsoleCtrlHandler(handler As EventHandler, add As BooleanAs Boolean
80         End Function
81
82         Private ReadOnly hConsole As IntPtr = GetConsoleWindow()
83
84         Public Sub HideConsoleWindow()
85             If IntPtr.Zero <> hConsole Then
86                 Call ShowWindow(hConsole, 0)
87             End If
88         End Sub
89
90         ''' <summary>
91         ''' 为WinForm应用程序分配一个终端窗口,这个函数一般是在Debug模式之下进行程序调试所使用的
92         ''' </summary>
93         Public Sub ShowConsoleWindows()
94             If IntPtr.Zero <> hConsole Then
95                 Call ShowWindow(hConsole, 1)
96             End If
97         End Sub
98
99         ''' <summary>
100         ''' 
101         ''' </summary>
102         ''' <param name="CommandLine"></param>
103         ''' <param name="WindowStyle"></param>
104         ''' <param name="WaitForExit">If NOT, then the function returns the associated process id value. Else returns the process exit code.</param>
105         ''' <returns></returns>
106         ''' <remarks></remarks>
107         Public Function Shell(CommandLine As StringOptional WindowStyle As System.Diagnostics.ProcessWindowStyle = ProcessWindowStyle.Normal, Optional WaitForExit As Boolean = FalseAs Integer
108             Dim Tokens = Regex.Split(CommandLine, Global.Microsoft.VisualBasic.CommandLine.SPLIT_REGX_EXPRESSION)
109             Dim EXE As String = Tokens.First
110             Dim Arguments As String = Mid$(CommandLine, Len(EXE) + 1)
111             Dim Process As System.Diagnostics.Process = New Process
112             Dim pInfo As System.Diagnostics.ProcessStartInfo = New ProcessStartInfo(EXE, Arguments)
113
114             Process.StartInfo = pInfo
115             Process.StartInfo.WindowStyle = WindowStyle
116
117             Call Process.Start()
118
119             If Not WaitForExit Then Return Process.Id
120
121             Call Process.WaitForExit()
122             Return Process.ExitCode
123         End Function
124     End Module
125 End Namespace