OSDN Git Service

DeviceConstantConverter.KeyToKeys[], DeviceConstantConverter.DIKtoKey[] を実装。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / CDTXMania.cs
index bd573f1..4ddd7fc 100644 (file)
@@ -5,24 +5,25 @@ using System.Text;
 using System.Windows.Forms;\r
 using System.Drawing;\r
 using System.Diagnostics;\r
-using System.Runtime.InteropServices;\r
 using System.IO;\r
 using System.Threading;\r
-using System.Runtime.Serialization.Formatters.Binary;\r
-using SlimDX;\r
-using SlimDX.Direct3D9;\r
+using SharpDX;\r
+using SharpDX.Direct3D9;\r
 using FDK;\r
 using SampleFramework;\r
 using System.Runtime.Serialization;\r
 using System.Xml;\r
 \r
+using Point = System.Drawing.Point;\r
+using Color = System.Drawing.Color;\r
+\r
 namespace DTXMania\r
 {\r
        internal class CDTXMania : Game\r
        {\r
                // プロパティ\r
                #region [ properties ]\r
-               public static readonly string VERSION = "105(160214)";\r
+               public static readonly string VERSION = "108+(170506)";\r
                public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";\r
                public static readonly string D3DXDLL = "d3dx9_43.dll";     // June 2010\r
                                                                                                                                                                                                                                                                //public static readonly string D3DXDLL = "d3dx9_42.dll";       // February 2010\r
@@ -39,6 +40,7 @@ namespace DTXMania
                public C文字コンソール act文字コンソール { get; private set; }\r
                public bool bコンパクトモード { get; private set; }\r
                public CConfigXml ConfigIni;\r
+               public CResources Resources;\r
 \r
                public CDTX DTX\r
                {\r
@@ -194,6 +196,20 @@ namespace DTXMania
                        // END #23629 2010.11.13 from\r
                        #endregion\r
 \r
+                       #region [ 言語リソースの初期化 ]\r
+                       Trace.TraceInformation( "言語リソースの初期化を行います。" );\r
+                       Trace.Indent();\r
+                       try\r
+                       {\r
+                               Resources = new CResources();\r
+                               Resources.LoadResources( "" );\r
+                               Trace.TraceInformation( "言語リソースの初期化を完了しました。" );\r
+                       }\r
+                       finally\r
+                       {\r
+                               Trace.Unindent();\r
+                       }\r
+                       #endregion\r
 \r
                        #region [ Config.ini の読込み ]\r
                        ConfigIni = new CConfigXml();\r
@@ -203,8 +219,20 @@ namespace DTXMania
                        // 2012.8.22 Config.iniが無いときに初期値が適用されるよう、この設定行をifブロック外に移動\r
                        #endregion\r
 \r
+\r
                        #region[座標値読み込み]\r
                        Coordinates = new Coordinates.CCoordinates();\r
+                       UpdateCoordinates();\r
+                       //Coordinates = (DTXMania.Coordinates.CCoordinates) CDTXMania.DeserializeXML( strEXEのあるフォルダ + "Coordinates.xml", typeof( DTXMania.Coordinates.CCoordinates ) );\r
+                       //if ( Coordinates == null )\r
+                       //{\r
+                       //      if ( File.Exists( strEXEのあるフォルダ + "Coordinates.xml" ) )\r
+                       //      {\r
+                       //              Trace.TraceInformation( "Coordinates.xmlファイルは存在します。" );\r
+                       //      }\r
+                       //      Trace.TraceInformation( "Coordiantes.xmlファイルの読み込みができませんでした。無視して進めます。" );\r
+                       //      Coordinates = new Coordinates.CCoordinates();\r
+                       //}\r
                        #endregion\r
 \r
                        #region [ ログ出力開始 ]\r
@@ -236,6 +264,17 @@ namespace DTXMania
                        Trace.TraceInformation("ProcessorCount: " + Environment.ProcessorCount.ToString());\r
                        Trace.TraceInformation("CLR Version: " + Environment.Version.ToString());\r
                        #endregion\r
+\r
+                       #region [ 言語の設定 ]\r
+                       Trace.TraceInformation( "言語情報の読み込みを開始します。" );\r
+                       //Debug.WriteLine( "language=" + Resources.Language );\r
+                       //Debug.WriteLine( "settings=" + instance.ConfigIni.strLanguage );\r
+                       Resources.Language = instance.ConfigIni.strLanguage;\r
+                       Trace.TraceInformation( "言語を{0}に設定しました。", Resources.Language );\r
+\r
+                       #endregion\r
+\r
+       \r
                        #region [ DTXVmodeクラス の初期化 ]\r
                        //Trace.TraceInformation( "DTXVモードの初期化を行います。" );\r
                        //Trace.Indent();\r
@@ -301,6 +340,7 @@ namespace DTXMania
                                        }\r
 \r
                                        CDTXMania.Instance.ConfigIni.bFullScreen.Value = false;\r
+                                       CDTXMania.Instance.ConfigIni.rcWindow_backup = CDTXMania.Instance.ConfigIni.rcWindow;           // #36612 2016.9.12 yyagi\r
                                        CDTXMania.Instance.ConfigIni.rcWindow.W = CDTXMania.Instance.ConfigIni.rcViewerWindow.W;\r
                                        CDTXMania.Instance.ConfigIni.rcWindow.H = CDTXMania.Instance.ConfigIni.rcViewerWindow.H;\r
                                        CDTXMania.Instance.ConfigIni.rcWindow.X = CDTXMania.Instance.ConfigIni.rcViewerWindow.X;\r
@@ -336,6 +376,10 @@ namespace DTXMania
                                        Trace.TraceInformation("コンパクトモードで起動します。[{0}]", strコンパクトモードファイル);\r
                                }\r
                        }\r
+                       else\r
+                       {\r
+                               Trace.TraceInformation( "通常モードで起動します。" );\r
+                       }\r
                        #endregion\r
 \r
                        #region [ Input管理 の初期化 ]\r
@@ -399,8 +443,8 @@ namespace DTXMania
                        base.Window.Location = new Point(ConfigIni.rcWindow.X, ConfigIni.rcWindow.Y);\r
                        // 事前にDTXVmodeの実体を作っておくこと\r
                        base.Window.Text = this.strWindowTitle;\r
-                       base.Window.StartPosition = FormStartPosition.Manual;\r
-                       base.Window.Location = new Point(ConfigIni.rcWindow.X, ConfigIni.rcWindow.Y);\r
+                       //base.Window.StartPosition = FormStartPosition.Manual;\r
+                       //base.Window.Location = new Point(ConfigIni.rcWindow.X, ConfigIni.rcWindow.Y);\r
 \r
                        // #34510 yyagi 2010.10.31 to change window size got from Config.ini\r
                        base.Window.ClientSize = new Size(ConfigIni.rcWindow.W, ConfigIni.rcWindow.H);\r
@@ -602,11 +646,12 @@ namespace DTXMania
                                                break;\r
                                }\r
                                Sound管理 = new CSound管理(base.Window.Handle,\r
-                                                                                                                                               soundDeviceType,\r
-                                                                                                                                               CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,\r
-                                                                                                                                               0,\r
-                                                                                                                                               CDTXMania.Instance.ConfigIni.strASIODevice.Index,\r
-                                                                                                                                               CDTXMania.Instance.ConfigIni.bUseOSTimer\r
+                                                                                       soundDeviceType,\r
+                                                                                       CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,\r
+                                                                                       CDTXMania.instance.ConfigIni.bEventDrivenWASAPI,\r
+                                                                                       0,\r
+                                                                                       CDTXMania.Instance.ConfigIni.strASIODevice.Index,\r
+                                                                                       CDTXMania.Instance.ConfigIni.bUseOSTimer\r
                                );\r
                                //Sound管理 = FDK.CSound管理.Instance;\r
                                //Sound管理.t初期化( soundDeviceType, 0, 0, CDTXMania.Instance.ConfigIni.nASIODevice, base.Window.Handle );\r
@@ -733,6 +778,7 @@ namespace DTXMania
                        }\r
                        #endregion\r
 \r
+\r
                        Trace.TraceInformation("アプリケーションの初期化を完了しました。");\r
 \r
                        #region [ 最初のステージの起動 ]\r
@@ -866,7 +912,10 @@ namespace DTXMania
 \r
                        #region [ 現在の電源プランをバックアップし、HighPerformanceに変更 ]\r
                        CPowerPlan.BackupCurrentPowerPlan();\r
-                       CPowerPlan.ChangeHighPerformance();\r
+                       if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )\r
+                       {\r
+                               CPowerPlan.ChangeHighPerformance();\r
+                       }\r
                        #endregion\r
 \r
 \r
@@ -1035,7 +1084,7 @@ namespace DTXMania
                        #endregion\r
 \r
                        this.Device.BeginScene();\r
-                       this.Device.Clear(ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 1f, 0);\r
+                       this.Device.Clear(ClearFlags.ZBuffer | ClearFlags.Target, SharpDX.Color.Black, 1f, 0);\r
 \r
                        if (r現在のステージ != null)\r
                        {\r
@@ -1903,6 +1952,10 @@ namespace DTXMania
                                }\r
                        }\r
                        #endregion\r
+\r
+                       //GC.Collect( 0, GCCollectionMode.Optimized, false );           // Rel105で処理が重くなっていることに対する、暫定処置。\r
+                                                                                                                                       // 重くなっている原因に対する適切な処置をして、処理が104程度に軽くなったら、\r
+                                                                                                                                       // この暫定処置は削除します。\r
                }\r
 \r
                /// <summary>\r
@@ -1924,8 +1977,9 @@ namespace DTXMania
                                        }\r
                                }\r
                        }\r
-                       catch\r
+                       catch (Exception e)\r
                        {\r
+                               Trace.TraceWarning( e.Message );\r
                                ret = null;\r
                        }\r
                        return ret;\r
@@ -1943,7 +1997,7 @@ namespace DTXMania
                        settings.Indent = true;\r
                        settings.NewLineChars = Environment.NewLine;\r
                        settings.Encoding = new System.Text.UTF8Encoding(false);\r
-                       using (XmlWriter xw = XmlWriter.Create(xmlpath, settings))\r
+                       using ( XmlWriter xw = XmlWriter.Create( new FileStreamSSD( xmlpath ), settings ) )\r
                        {\r
                                DataContractSerializer serializer = new DataContractSerializer(obj.GetType());\r
                                serializer.WriteObject(xw, obj);\r
@@ -1952,7 +2006,36 @@ namespace DTXMania
 \r
                public void SaveConfig()\r
                {\r
-                       CDTXMania.SerializeXML(strEXEのあるフォルダ + "Config.xml", ConfigIni);\r
+                       #region [ Skinパスの絶対パス→相対パス変換 ]\r
+                       string _strSystemSkinSubfolderPath = ConfigIni.strSystemSkinSubfolderPath.Value;\r
+                       Uri uriRoot = new Uri( System.IO.Path.Combine( this.strEXEのあるフォルダ, "System" + System.IO.Path.DirectorySeparatorChar ) );\r
+                       if ( ConfigIni.strSystemSkinSubfolderPath.Value != null && ConfigIni.strSystemSkinSubfolderPath.Value.Length == 0 )\r
+                       {\r
+                               // Config.iniが空の状態でDTXManiaをViewerとして起動・終了すると、strSystemSkinSubfolderFullName が空の状態でここに来る。\r
+                               // → 初期値として Default/ を設定する。\r
+                               ConfigIni.strSystemSkinSubfolderPath.Value = System.IO.Path.Combine( this.strEXEのあるフォルダ, "System" + System.IO.Path.DirectorySeparatorChar + "Default" + System.IO.Path.DirectorySeparatorChar );\r
+                       }\r
+\r
+                       // 起動直後は(Loadの前にSaveを通るため)Skinパスには初期値の相対パスが入っている場合がある。\r
+                       // そのため、以下の処理を通すために、いったん絶対パスに変換\r
+                       if ( !System.IO.Path.IsPathRooted( ConfigIni.strSystemSkinSubfolderPath.Value ) )\r
+                       {\r
+                               ConfigIni.strSystemSkinSubfolderPath.Value =\r
+                                       Path.Combine( Path.Combine( this.strEXEのあるフォルダ, "System" ), ConfigIni.strSystemSkinSubfolderPath );\r
+                       }\r
+\r
+                       Uri uriPath = new Uri( System.IO.Path.Combine( ConfigIni.strSystemSkinSubfolderPath.Value, "." + System.IO.Path.DirectorySeparatorChar ) );\r
+                       string relPath = uriRoot.MakeRelativeUri( uriPath ).ToString();                         // 相対パスを取得\r
+                       relPath = System.Web.HttpUtility.UrlDecode( relPath );                                          // デコードする\r
+                       relPath = relPath.Replace( '/', System.IO.Path.DirectorySeparatorChar );        // 区切り文字が\ではなく/なので置換する\r
+                       ConfigIni.strSystemSkinSubfolderPath.Value = relPath;\r
+                       #endregion\r
+                       ConfigIni.strDTXManiaVersion.Value = CDTXMania.VERSION;\r
+\r
+                       CDTXMania.SerializeXML( strEXEのあるフォルダ + "Config.xml", ConfigIni );\r
+\r
+                       // 元の絶対パスに戻す\r
+                       ConfigIni.strSystemSkinSubfolderPath.Value = _strSystemSkinSubfolderPath;\r
                }\r
 \r
                public void LoadConfig()\r
@@ -1971,9 +2054,130 @@ namespace DTXMania
                                        ConfigIni = new CConfigXml();\r
                                        SaveConfig();\r
                                }\r
+                               // Skinパスの相対パスを、絶対パスに変換\r
+                               if ( !System.IO.Path.IsPathRooted( ConfigIni.strSystemSkinSubfolderPath.Value ) )\r
+                               {\r
+                                       ConfigIni.strSystemSkinSubfolderPath.Value =\r
+                                               Path.Combine( Path.Combine( this.strEXEのあるフォルダ, "System" ), ConfigIni.strSystemSkinSubfolderPath );\r
+                               }\r
+                       }\r
+               }\r
+               /// <summary>\r
+               /// 座標値を読み込む。Coordinates メンバ初期化後いつ呼び出しても構わない。\r
+               /// </summary>\r
+               public void UpdateCoordinates()\r
+               {\r
+                       string coordXml = strEXEのあるフォルダ + "Coordinates.xml";\r
\r
+                       // デシリアライズ\r
+                       if (File.Exists(coordXml))\r
+                       {\r
+                               using (XmlReader xr = XmlReader.Create(coordXml))\r
+                               {\r
+                                       DataContractSerializer serializer = new DataContractSerializer(typeof(Coordinates.CCoordinates));\r
+                                       try\r
+                                       {\r
+                                               Coordinates = (Coordinates.CCoordinates) serializer.ReadObject( xr );\r
+                                       }\r
+                                       catch (SerializationException e)\r
+                                       {\r
+                                               Trace.TraceWarning( "Rel107以前の古いフォーマットのCoordinates.xmlが読み込まれました。無視します。\n" + e.Message );\r
+                                       }\r
+                               }\r
+                       }\r
+                       // シリアライズ\r
+                       XmlWriterSettings settings = new XmlWriterSettings();\r
+                       settings.IndentChars = "  ";\r
+                       settings.Indent = true;\r
+                       settings.NewLineChars = Environment.NewLine;\r
+                       settings.Encoding = new System.Text.UTF8Encoding( false );\r
+                       using ( XmlWriter xw = XmlTextWriter.Create( coordXml, settings ) )\r
+                       {\r
+                               //XmlSerializerNamespaces ns = new XmlSerializerNamespaces();\r
+                               //ns.Add( String.Empty, String.Empty );\r
+\r
+                               //StreamWriter sw = new StreamWriter( "test2.xml", false, Encoding.UTF8 );\r
+                               //serializer.Serialize( sw, item, ns );\r
+                               //sw.Close\r
+\r
+                               DataContractSerializer serializer = new DataContractSerializer( typeof( Coordinates.CCoordinates ) );\r
+                               serializer.WriteObject( xw, Coordinates );\r
+                               //serializer.WriteStartObject( xw, Coordinates );\r
+                               //xw.WriteAttributeString( "xmlns", "d1p1", "http://www.w3.org/2000/xmlns/",\r
+                               //      "http://schemas.microsoft.com/2003/10/Serialization/" );\r
+                               //serializer.WriteObjectContent( xw, Coordinates );\r
+                               //serializer.WriteEndObject( xw );\r
+                       }\r
+\r
+                       // もう一度デシリアライズ\r
+                       if (File.Exists(coordXml))\r
+                       {\r
+                               using (XmlReader xr = XmlReader.Create(coordXml))\r
+                               {\r
+                                       DataContractSerializer serializer = new DataContractSerializer(typeof(Coordinates.CCoordinates));\r
+                                       Coordinates = (Coordinates.CCoordinates)serializer.ReadObject(xr);\r
+                               }\r
                        }\r
                }\r
 \r
+\r
+               /// <summary>\r
+               /// 保存するxmlからnamespaceを削除するためのXmlTextWriter\r
+               /// </summary>\r
+               //public class MyXmlTextWriter : XmlTextWriter\r
+               //{\r
+               //      private bool _ignoreAttr = false;\r
+\r
+               //      public MyXmlTextWriter( TextWriter w  )\r
+               //              : base( w )\r
+               //      {\r
+               //              Debug.WriteLine( "create" );\r
+               //      }\r
+\r
+               //      public override string LookupPrefix( string ns )\r
+               //      {\r
+               //              Debug.WriteLine( "luprefix" );\r
+               //              return string.Empty;\r
+               //      }\r
+\r
+               //      public override void WriteStartAttribute( string prefix, string localName, string ns )\r
+               //      {\r
+               //              Debug.WriteLine( "writestartattribute" );\r
+               //              if ( String.Compare( prefix, "xmlns", true ) == 0 )\r
+               //              {\r
+               //                      Debug.WriteLine( "[!]" );\r
+               //                      this._ignoreAttr = true;\r
+               //                      return;\r
+               //              }\r
+               //      }\r
+\r
+               //      public override void WriteEndAttribute()\r
+               //      {\r
+               //              if ( this._ignoreAttr )\r
+               //              {\r
+               //                      this._ignoreAttr = false;\r
+               //                      return;\r
+               //              }\r
+               //              base.WriteEndAttribute();\r
+               //      }\r
+\r
+               //      public override void WriteString( string text )\r
+               //      {\r
+               //              Debug.WriteLine( "ws" );\r
+               //              if ( String.Compare( text, "http://www.w3.org/2001/XMLSchema-instance", true ) == 0 )\r
+               //              {\r
+               //                      return;\r
+               //              }\r
+               //              base.WriteString( text );\r
+               //      }\r
+\r
+               //      public override void WriteStartElement( string prefix, string localName, string ns )\r
+               //      {\r
+               //              Debug.WriteLine( "wse" );\r
+               //              base.WriteStartElement( null, localName, null );\r
+               //      }\r
+               //}\r
+\r
                public void ShowWindowTitleWithSoundType()\r
                {\r
                        string delay = "";\r
@@ -1998,7 +2202,7 @@ namespace DTXMania
                        {\r
                                if (DTXVmode.Enabled)\r
                                {\r
-                                       return "DTXViewer release " + VERSION;\r
+                                       return "DTXMViewer release " + VERSION;\r
                                }\r
                                else\r
                                {\r
@@ -2057,6 +2261,11 @@ namespace DTXMania
                                }\r
                                //---------------------\r
                                #endregion\r
+\r
+                               #region [ 選曲ステージの終了処理 ]\r
+                               stage選曲.On非活性化();\r
+                               #endregion\r
+\r
                                #region [ プラグインの終了処理 ]\r
                                //---------------------\r
                                if (this.listプラグイン != null && this.listプラグイン.Count > 0)\r
@@ -2269,7 +2478,7 @@ namespace DTXMania
                                #endregion\r
                                #region [ Config.iniの出力 ]\r
                                //---------------------\r
-                               Trace.TraceInformation("Config.ini を出力します。");\r
+                               Trace.TraceInformation("Config.xml を出力します。");\r
                                //                              if ( ConfigIni.bIsSwappedGuitarBass )                   // #24063 2011.1.16 yyagi ギターベースがスワップしているときは元に戻す\r
                                if (ConfigIni.bIsSwappedGuitarBass_AutoFlagsAreSwapped) // #24415 2011.2.21 yyagi FLIP中かつ演奏中にalt-f4で終了したときは、AUTOのフラグをswapして戻す\r
                                {\r
@@ -2281,14 +2490,14 @@ namespace DTXMania
                                                        ConfigIni.SwapGuitarBassInfos_PlaySettings();\r
                                        }\r
                                 */\r
-                               string str = strEXEのあるフォルダ + "Config.ini";\r
+                               string str = strEXEのあるフォルダ + "Config.xml";\r
                                Trace.Indent();\r
                                try\r
                                {\r
                                        if (DTXVmode.Enabled)\r
                                        {\r
                                                DTXVmode.tUpdateConfigIni();\r
-                                               Trace.TraceInformation("DTXVモードの設定情報を、Config.iniに保存しました。");\r
+                                               Trace.TraceInformation("DTXVモードの設定情報を、Config.xmlに保存しました。");\r
                                        }\r
                                        else\r
                                        {\r
@@ -2299,7 +2508,7 @@ namespace DTXMania
                                catch (Exception e)\r
                                {\r
                                        Trace.TraceError(e.Message);\r
-                                       Trace.TraceError("Config.ini の出力に失敗しました。({0})", str);\r
+                                       Trace.TraceError("Config.xml の出力に失敗しました。({0})", str);\r
                                }\r
                                finally\r
                                {\r
@@ -2329,7 +2538,12 @@ namespace DTXMania
                                }\r
                                //---------------------\r
                                #endregion\r
-                               Trace.TraceInformation("アプリケーションの終了処理を完了しました。");\r
+                               #region [ DirectXの終了処理 ]\r
+                               //---------------------\r
+                               base.GraphicsDeviceManager.Dispose();\r
+                               //---------------------\r
+                               #endregion\r
+                               Trace.TraceInformation( "アプリケーションの終了処理を完了しました。" );\r
 \r
 \r
                                this.b終了処理完了済み = true;\r
@@ -2400,9 +2614,9 @@ namespace DTXMania
                }\r
                private void tガベージコレクションを実行する()\r
                {\r
-                       GC.Collect();\r
+                       GC.Collect(0, GCCollectionMode.Optimized, true );\r
                        GC.WaitForPendingFinalizers();\r
-                       GC.Collect();\r
+                       GC.Collect(0, GCCollectionMode.Forced, true );\r
                        GC.WaitForPendingFinalizers();\r
                }\r
                private void tプラグイン検索と生成()\r
@@ -2417,7 +2631,6 @@ namespace DTXMania
                        if (this.listプラグイン.Count > 0)\r
                                Trace.TraceInformation(this.listプラグイン.Count + " 個のプラグインを読み込みました。");\r
                }\r
-               #region [ Windowイベント処理 ]\r
 \r
                private System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)\r
                {\r
@@ -2446,6 +2659,10 @@ namespace DTXMania
                        string[] strDLLs = System.IO.Directory.GetFiles(strプラグインフォルダパス, "*.dll");\r
                        foreach (string dllName in strDLLs)\r
                        {\r
+                               if (Path.GetExtension(dllName).ToLower() != "dll")\r
+                               {\r
+                                       continue;\r
+                               }\r
                                try\r
                                {\r
                                        // (1-1) dll をアセンブリとして読み込む。\r
@@ -2512,7 +2729,8 @@ namespace DTXMania
                                this.t指定フォルダ内でのプラグイン検索と生成(dir + "\\", strプラグイン型名);\r
                }\r
                //-----------------\r
-               private void Window_ApplicationActivated(object sender, EventArgs e)\r
+               #region [ Windowイベント処理 ]\r
+               private void Window_ApplicationActivated( object sender, EventArgs e )\r
                {\r
                        this.bApplicationActive = true;\r
                }\r
@@ -2541,14 +2759,17 @@ namespace DTXMania
                        {\r
                                for (int i = 0; i < CConfigXml.AssignableCodes; i++)\r
                                {\r
-                                       if (ConfigIni.KeyAssign[EPad.Capture][i].コード > 0 &&\r
-                                                        e.KeyCode == DeviceConstantConverter.KeyToKeyCode((SlimDX.DirectInput.Key)ConfigIni.KeyAssign[EPad.Capture][i].コード))\r
+                                       var captureCode = (SlimDX.DirectInput.Key) ConfigIni.KeyAssign[ EPad.Capture ][ i ].コード;\r
+\r
+                                       if( (int) captureCode > 0 &&\r
+                                               DeviceConstantConverter.KeyToKeys.ContainsKey( captureCode ) &&\r
+                                               e.KeyCode == DeviceConstantConverter.KeyToKeys[ captureCode ] )\r
                                        {\r
                                                // Debug.WriteLine( "capture: " + string.Format( "{0:2x}", (int) e.KeyCode ) + " " + (int) e.KeyCode );\r
                                                string strFullPath =\r
-                                                                Path.Combine(CDTXMania.Instance.strEXEのあるフォルダ, "Capture_img");\r
-                                               strFullPath = Path.Combine(strFullPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ".png");\r
-                                               SaveResultScreen(strFullPath);\r
+                                                                Path.Combine( CDTXMania.Instance.strEXEのあるフォルダ, "Capture_img" );\r
+                                               strFullPath = Path.Combine( strFullPath, DateTime.Now.ToString( "yyyyMMddHHmmss" ) + ".png" );\r
+                                               SaveResultScreen( strFullPath );\r
                                        }\r
                                }\r
                        }\r