Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Microsoft.VisualBasic;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Data;
- using System.Diagnostics;
- using System.Xml;
- public class Form1
- {
- private System.Collections.Generic.Dictionary<long, string> keyHash;
- const string nullKey = "割り当てなし";
- private void Button1_Click(System.Object sender, System.EventArgs e)
- {
- OpenFileDialog ofd = new OpenFileDialog();
- ofd.FileName = "keyconfig.cfg";
- //はじめに表示されるフォルダを指定する
- ofd.InitialDirectory = "C:\\Program Files\\CAPCOM\\Monster Hunter Frontier Online\\";
- ofd.Filter = "CFGファイル(*.cfg)|*.cfg";
- ofd.FilterIndex = 1;
- //タイトルを設定する
- ofd.Title = "開くファイルを選択してください";
- //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする
- ofd.RestoreDirectory = true;
- //ダイアログを表示する
- if (ofd.ShowDialog() == DialogResult.OK) {
- TextBox1.Text = ofd.FileName;
- }
- }
- private void Button2_Click(System.Object sender, System.EventArgs e)
- {
- if (!System.IO.File.Exists(TextBox2.Text.Trim)) {
- MessageBox.Show("指定したファイルが存在しません");
- return;
- }
- readXML(TextBox2.Text.Trim);
- }
- private void TextBox1_TextChanged(System.Object sender, System.EventArgs e)
- {
- if (string.IsNullOrEmpty(TextBox1.Text.Trim)) {
- Button4.Enabled = false;
- } else {
- Button4.Enabled = true;
- }
- }
- private void readXML(string fileName)
- {
- XmlDocument xDocument = new XmlDocument();
- XmlElement keyconfig = null;
- //Dim version As XmlElement
- XmlElement controller = null;
- //Dim keyboard As XmlElement
- //Dim mouse As XmlElement
- XmlNodeList categoryList = null;
- XmlNodeList actionList = null;
- XmlNodeList keydataList = null;
- string csvFileName = null;
- SaveFileDialog sfd = new SaveFileDialog();
- //はじめのファイル名を指定する
- sfd.FileName = "MyKeyconfig.csv";
- //[ファイルの種類]に表示される選択肢を指定する
- sfd.Filter = "CSVファイル(*.csv)|*.csv";
- //[ファイルの種類]ではじめに
- //「すべてのファイル」が選択されているようにする
- sfd.FilterIndex = 1;
- //タイトルを設定する
- sfd.Title = "保存先のファイルを選択してください";
- //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする
- sfd.RestoreDirectory = true;
- //ダイアログを表示する
- if (sfd.ShowDialog() == DialogResult.OK) {
- csvFileName = sfd.FileName;
- } else {
- return;
- }
- keyHash = new System.Collections.Generic.Dictionary<long, string>();
- xDocument.Load(fileName);
- //XMLファイルをロード
- //ルート要素のkeyconfigを取得
- keyconfig = xDocument.DocumentElement;
- //controller要素を取得
- controller = (XmlElement)keyconfig.GetElementsByTagName("controller")[0];
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_DLU").Value), "十字↑");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_DLD").Value), "十字↓");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_DLL").Value), "十字←");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_DLR").Value), "十字→");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_DRD").Value), "×");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_DRR").Value), "○");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_R2").Value), "R2");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_L2").Value), "L2");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_DRL").Value), "□");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_DRU").Value), "△");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_R1").Value), "R1");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_L1").Value), "L1");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_L3").Value), "左スティック押し込み");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_R3").Value), "左スティック押し込み");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_LC").Value), "SELECT");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_RC").Value), "START");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_ALU").Value), "左スティック↑");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_ALD").Value), "左スティック↓");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_ALL").Value), "左スティック←");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_ALR").Value), "左スティック→");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_ARU").Value), "右スティック↑");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_ARD").Value), "右スティック↓");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_ARL").Value), "右スティック←");
- keyHash.Add(convStrToInt(controller.SelectSingleNode("@ASSIGN_ARR").Value), "右スティック→");
- categoryList = keyconfig.GetElementsByTagName("category");
- System.IO.StreamWriter Writer = new System.IO.StreamWriter(csvFileName, false, System.Text.Encoding.GetEncoding("shift_jis"));
- //ヘッダー行出力
- Writer.WriteLine("カテゴリ,アクション,キー操作");
- foreach (XmlElement xCategory in categoryList) {
- actionList = xCategory.GetElementsByTagName("action");
- foreach (XmlElement xAction in actionList) {
- keydataList = xAction.GetElementsByTagName("keydata");
- if (keydataList.Count > 0) {
- dynamic xKeydata = keydataList.Item(0);
- Writer.WriteLine(makeLine(xCategory, xAction, (XmlElement)xKeydata));
- }
- }
- }
- Writer.Close();
- MessageBox.Show(csvFileName + "を作成しました。");
- }
- private string makeLine(XmlElement xCategory, XmlElement xAction, XmlElement xKeydata)
- {
- string str = null;
- string keyStr = null;
- string subKeyStr = null;
- str = xCategory.SelectSingleNode("@name").Value;
- str += "," + xAction.SelectSingleNode("@name").Value;
- keyStr = SplitToKeys(convStrToInt(xKeydata.SelectSingleNode("@key").Value));
- subKeyStr = SplitToKeys(convStrToInt(xKeydata.SelectSingleNode("@subkey").Value));
- if (subKeyStr == nullKey) {
- str += "," + keyStr;
- } else {
- str += ",(" + subKeyStr + ")" + keyStr;
- }
- return str;
- }
- private string SplitToKeys(long keyLong)
- {
- string str = "";
- if (keyLong == 0) {
- return nullKey;
- }
- for (int i = 1; i <= 32; i++) {
- long targetLong = Convert.ToInt64(Math.Pow(2, (i - 1)));
- if (Convert.ToBoolean(keyLong & targetLong)) {
- str += keyHash[targetLong] + "+";
- }
- }
- if (!string.IsNullOrEmpty(str)) {
- str = str.Substring(0, str.Length - 1);
- }
- return str;
- }
- private void btnTest_Click(System.Object sender, System.EventArgs e)
- {
- //テストボタン
- MessageBox.Show(SplitToKeys(16777216));
- }
- private long convStrToInt(string str)
- {
- long l = 0;
- l = Convert.ToInt64(str.Replace("0x", ""), 16);
- return Convert.ToInt64(str.Replace("0x", ""), 16);
- }
- private void Button3_Click_1(System.Object sender, System.EventArgs e)
- {
- OpenFileDialog ofd = new OpenFileDialog();
- ofd.FileName = "keyconfig.xml";
- //はじめに表示されるフォルダを指定する
- ofd.InitialDirectory = "C:\\Program Files\\CAPCOM\\Monster Hunter Frontier Online\\";
- ofd.Filter = "XMLファイル(*.xml)|*.xml";
- ofd.FilterIndex = 1;
- //タイトルを設定する
- ofd.Title = "開くファイルを選択してください";
- //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする
- ofd.RestoreDirectory = true;
- //ダイアログを表示する
- if (ofd.ShowDialog() == DialogResult.OK) {
- TextBox2.Text = ofd.FileName;
- }
- }
- private void makeCorrectXMLFile(string oldFileName, string newFileName)
- {
- System.IO.StreamReader Reader = new System.IO.StreamReader(oldFileName, System.Text.Encoding.GetEncoding("Shift-JIS"));
- System.IO.StreamWriter Writer = new System.IO.StreamWriter(newFileName, false, System.Text.Encoding.GetEncoding("shift_jis"));
- //<keydata key="0x01000000" subkey="0x00000000">
- //を
- //<keydata key="0x01000000" subkey="0x00000000"/>
- //形式に置換する
- while (!(Reader.EndOfStream)) {
- string txt = Reader.ReadLine();
- if (txt.Contains("keydata")) {
- txt = txt.Replace(">", "/>");
- }
- Writer.WriteLine(txt);
- }
- Writer.Close();
- Reader.Close();
- }
- //妥当なXMLファイルを作成する
- private void Button4_Click(System.Object sender, System.EventArgs e)
- {
- string oldFileName = TextBox1.Text.Trim;
- if (!System.IO.File.Exists(oldFileName)) {
- MessageBox.Show("指定したファイルが存在しません");
- return;
- }
- System.IO.FileInfo cFileInfo = new System.IO.FileInfo(oldFileName);
- System.IO.DirectoryInfo hDirInfo = cFileInfo.Directory;
- dynamic newFileName = hDirInfo.FullName + "\\keyconfig.xml";
- if (System.IO.File.Exists(newFileName)) {
- dynamic result = MessageBox.Show(newFileName + "が既に存在します。上書きしますか?", "確認", MessageBoxButtons.OKCancel);
- if (result == DialogResult.Cancel) {
- return;
- }
- }
- makeCorrectXMLFile(oldFileName, newFileName);
- MessageBox.Show(newFileName + "を作成しました。");
- TextBox2.Text = newFileName;
- }
- private void TextBox2_TextChanged(System.Object sender, System.EventArgs e)
- {
- if (string.IsNullOrEmpty(TextBox2.Text.Trim)) {
- Button2.Enabled = false;
- } else {
- Button2.Enabled = true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement