Beispiel #1
0
        /// <summary>
        /// 확장 도구가 등록되어있는 지 여부를 확인합니다.
        /// </summary>
        /// <returns></returns>
        public bool IsAddedExtension()
        {
            string      subkey = @"Software\KADOKAWA\RPGMV";
            RegistryKey rk     = Registry.CurrentUser.OpenSubKey(subkey, true);

            if (rk == null)
            {
                return(false);
            }

            JArray jsonArray = JArray.Parse(Convert.ToString(rk.GetValue("mvTools")));

            // 배열이 없으면
            if (jsonArray.Count == 0)
            {
                return(false);
            }
            else
            {
                // 배열을 읽어와 자동으로 목록화합니다.
                IList <RMMV.ExtensionSchema> data       = jsonArray.ToObject <IList <RMMV.ExtensionSchema> >();
                RMMV.ExtensionSchema         my_ex_data = data.FirstOrDefault(p => (p.name == Localization.RMMV_ExtensionSchema_name));

                // 확장 프로그램이 레지스트리에 등록된 적이 없습니다.
                if (my_ex_data == null)
                {
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// 레지스트리에 확장 도구를 등록하거나 해제합니다.
        /// </summary>
        /// <param name="isShowMessage"></param>
        public void UpdateRegistry(bool isShowMessage = true)
        {
            string      subkey = @"Software\KADOKAWA\RPGMV";
            RegistryKey rk     = Registry.CurrentUser.OpenSubKey(subkey, true);

            if (rk == null)
            {
                rk = Registry.CurrentUser.CreateSubKey(subkey, RegistryKeyPermissionCheck.ReadWriteSubTree);
            }

            // 새로운 데이터를 생성합니다.
            var process = Process.GetCurrentProcess();

            string[] paths = Path.GetDirectoryName(process.MainModule.FileName).Split('\\');

            string[] destPaths = new string[paths.Length - 1];
            Array.Copy(paths, 1, destPaths, 0, paths.Length - 1);

            string driveName      = paths[0];
            string otherPartPaths = Path.Combine(destPaths).Replace("\\", "/");

            string fullPath = driveName + "/" + otherPartPaths;

            //string fullPath = Path.Combine(paths).Replace("\\", "/");

            Console.WriteLine(fullPath);

            RMMV.ExtensionSchema es = new RMMV.ExtensionSchema
            {
                appName = "NewResourceManager.exe",
                hint    = Localization.RMMV_ExtensionSchema_hint,
                name    = Localization.RMMV_ExtensionSchema_name,
                path    = fullPath
            };

            JObject newData = (JObject)JToken.FromObject(es);

            string  jsonData          = Convert.ToString(rk.GetValue("mvTools"));
            Boolean isInvalidJsonData = jsonData.Equals("[]");

            JArray jsonArray = new JArray();

            // 배열이 없으면
            if (isInvalidJsonData)
            {
                // 배열을 새로 만듭니다.
                // 배열에 새로운 JSON 데이터를 추가합니다.
                jsonArray.Add(newData);

                if (isShowMessage)
                {
                    // Inject
                    MessageBox.Show(Localization.UpdateRegistryRetryProgramMsg);
                }

                isActivatedExtensionProgram = true;
            }
            else
            {
                jsonArray = JArray.Parse(jsonData);

                // 배열을 읽어와 자동으로 목록화합니다.
                IList <RMMV.ExtensionSchema> data = jsonArray.ToObject <IList <RMMV.ExtensionSchema> >();

                RMMV.ExtensionSchema my_ex_data = data.FirstOrDefault(p => (p.name == Localization.RMMV_ExtensionSchema_name));

                // 확장 프로그램이 레지스트리에 등록된 적이 없습니다.
                if (my_ex_data == null)
                {
                    jsonArray.Add(newData);

                    if (isShowMessage)
                    {
                        // Inject
                        MessageBox.Show(Localization.UpdateRegistryRetryProgramMsg);
                    }


                    isActivatedExtensionProgram = true;
                }
                else
                {
                    isActivatedExtensionProgram = true;

                    // 확장 프로그램이 이미 등록되어있습니다.
                    if (isShowMessage)
                    {
                        MessageBox.Show(Localization.UpdateRegistryAlreadyProgram);
                    }

                    if (isShowMessage)
                    {
                        DialogResult isOk = MessageBox.Show(Localization.UpdateRegistryDeleteProgram, Localization.InformationMsg, MessageBoxButtons.YesNo);
                        if (isOk == DialogResult.Yes)
                        {
                            // 배열에서 특정 값을 제외합니다.

                            IList <RMMV.ExtensionSchema> list = jsonArray.ToObject <IList <RMMV.ExtensionSchema> >();
                            JArray uniq = new JArray();

                            foreach (RMMV.ExtensionSchema node in list)
                            {
                                if (node.name != es.name)
                                {
                                    JObject uniqData = (JObject)JToken.FromObject(node);
                                    uniq.Add(uniqData);
                                }
                            }

                            jsonArray = uniq;

                            isActivatedExtensionProgram = false;

                            // Eject
                            MessageBox.Show(Localization.EjectMessage);
                        }
                    }
                }
            }

            // 레지스트리 값을 업데이트합니다.
            rk.SetValue("mvTools", jsonArray.ToString(Newtonsoft.Json.Formatting.None), RegistryValueKind.String);

            if (isActivatedExtensionProgram)
            {
                add_extension_btn.Text = Localization.RemoveExtensionButton;
            }
            else
            {
                add_extension_btn.Text = Localization.AddExtensionButton;
            }
        }