OSDN Git Service

#23615 曲順のソート機能を追加。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / Program.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Globalization;\r
4 using System.Text;\r
5 using System.Runtime.InteropServices;\r
6 using System.Threading;\r
7 using System.Diagnostics;\r
8 using System.Windows.Forms;\r
9 \r
10 namespace DTXMania\r
11 {\r
12         internal class Program\r
13         {\r
14                 #region [ 二重機動チェック、DLL存在チェック ]\r
15                 //-----------------------------\r
16                 private static Mutex mutex二重起動防止用;\r
17 \r
18                 private static bool tDLLの存在チェック( string strDll名, string str存在しないときに表示するエラー文字列jp, string str存在しないときに表示するエラー文字列en )\r
19                 {\r
20                         string str存在しないときに表示するエラー文字列 = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ?\r
21                                 str存在しないときに表示するエラー文字列jp : str存在しないときに表示するエラー文字列en;\r
22                         IntPtr hModule = LoadLibrary( strDll名 );\r
23                         if( hModule == IntPtr.Zero )\r
24                         {\r
25                                 MessageBox.Show( str存在しないときに表示するエラー文字列, "DTXMania runtime error", MessageBoxButtons.OK, MessageBoxIcon.Hand );\r
26                                 return false;\r
27                         }\r
28                         FreeLibrary( hModule );\r
29                         return true;\r
30                 }\r
31 \r
32                 #region [DllImport]\r
33                 [DllImport( "kernel32", CharSet = CharSet.Unicode, SetLastError = true )]\r
34                 internal static extern void FreeLibrary( IntPtr hModule );\r
35 \r
36                 [DllImport( "kernel32", CharSet = CharSet.Unicode, SetLastError = true )]\r
37                 internal static extern IntPtr LoadLibrary( string lpFileName );\r
38 \r
39 //              [DllImport("dwmapi.dll", PreserveSig = false)]\r
40                 //              public static extern int DwmEnableComposition(bool fEnable);\r
41                 #endregion\r
42                 //-----------------------------\r
43                 #endregion\r
44 \r
45                 [STAThread]\r
46                 private static void Main()\r
47                 {\r
48                         mutex二重起動防止用 = new Mutex( false, "DTXManiaMutex" );\r
49 \r
50                         if( mutex二重起動防止用.WaitOne( 0, false ) )\r
51                         {\r
52                                 string newLine = Environment.NewLine;\r
53                                 bool flag = false;\r
54 \r
55                                 #region [DLLの存在チェック]\r
56                                 if (!tDLLの存在チェック("SlimDX" + CDTXMania.SLIMDXDLL,\r
57                                         "SlimDX" + CDTXMania.SLIMDXDLL + ".dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
58                                         "SlimDX" + CDTXMania.SLIMDXDLL + ".dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
59                                         )) flag = true;\r
60                                 if (!tDLLの存在チェック("FDK.dll",\r
61                                         "FDK.dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
62                                         "FDK.dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
63                                         ) ) flag = true;\r
64                                 if( !tDLLの存在チェック( "xadec.dll",\r
65                                         "xadec.dll が存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
66                                         "xadec.dll is not found." + newLine + "Please download DTXMania again."\r
67                                         ) ) flag = true;\r
68                                 if( !tDLLの存在チェック( "SoundDecoder.dll",\r
69                                         "SoundDecoder.dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
70                                         "SoundDecoder.dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
71                                         ) ) flag = true;\r
72                                 if (!tDLLの存在チェック(CDTXMania.D3DXDLL,\r
73                                         CDTXMania.D3DXDLL + " が存在しません。" + newLine + "DirectX Redist フォルダの DXSETUP.exe を実行し、" + newLine + "必要な DirectX ランタイムをインストールしてください。",\r
74                                         CDTXMania.D3DXDLL + " is not found." + newLine + "Please execute DXSETUP.exe in \"DirectX Redist\" folder, to install DirectX runtimes required for DTXMania."\r
75                                         )) flag = true;\r
76                                 #endregion\r
77                                 if (!flag)\r
78                                 {\r
79 #if DEBUG && TEST_ENGLISH\r
80                                         Thread.CurrentThread.CurrentCulture = new CultureInfo( "en-US" );\r
81 #endif\r
82 \r
83                                         // turn off Aero Glass\r
84 //                                      try\r
85 //                                      {\r
86 //                                              DwmEnableComposition( false );\r
87 //                                      }\r
88 //                                      catch ( DllNotFoundException )\r
89 //                                      {\r
90 //                                              // DLLがなければXP以下とみなし何もしない\r
91 //                                      }\r
92 \r
93                                         // BEGIN #23670 2010.11.13 from: キャッチされない例外は放出せずに、ログに詳細を出力する。\r
94                                         // BEGIM #24606 2011.03.08 from: DEBUG 時は例外発生箇所を直接デバッグできるようにするため、例外をキャッチしないようにする。\r
95 #if !DEBUG\r
96                                         try\r
97 #endif\r
98                                         {\r
99                                                 using( var mania = new CDTXMania() )\r
100                                                         mania.Run();\r
101 \r
102                                                 Trace.WriteLine( "" );\r
103                                                 Trace.WriteLine( "遊んでくれてありがとう!" );\r
104                                         }\r
105 #if !DEBUG\r
106                                         catch( Exception e )\r
107                                         {\r
108                                                 Trace.WriteLine( "" );\r
109                                                 Trace.Write( e.ToString() );\r
110                                                 Trace.WriteLine( "" );\r
111                                                 Trace.WriteLine( "エラーだゴメン!(涙" );\r
112                                                 MessageBox.Show( e.ToString(), "DTXMania Error", MessageBoxButtons.OK, MessageBoxIcon.Error );  // #23670 2011.2.28 yyagi to show error dialog\r
113                                         }\r
114 #endif\r
115                                         // END #24606 2011.03.08 from\r
116                                         // END #23670 2010.11.13 from\r
117 \r
118                                         if( Trace.Listeners.Count > 1 )\r
119                                                 Trace.Listeners.RemoveAt( 1 );\r
120                                 }\r
121 \r
122                                 // BEGIN #24615 2011.03.09 from: Mutex.WaitOne() が true を返した場合は、Mutex のリリースが必要である。\r
123                                 \r
124                                 mutex二重起動防止用.ReleaseMutex();\r
125                                 mutex二重起動防止用 = null;\r
126                                 \r
127                                 // END #24615 2011.03.09 from\r
128                         }\r
129                 }\r
130         }\r
131 }\r