「テーマの自動変更」の版間の差分
ページの作成:「== 概要 == Windowsのテーマ設定に合わせてMeryのテーマを自動変更します。 Meryのオプションで、「アプリのテーマ」を「システム設定を使用する」とすると、Windowsに合わせてMeryのテーマが変更されるようになりますが、エディタ部のテーマはこれとは別に設定変更する必要があります。 PowerToysのLight Switchや、Auto Dark Modeなどでは、Windowsのテーマを時…」 |
|||
| (2人の利用者による、間の13版が非表示) | |||
| 1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
Windowsのテーマ設定に合わせて、Meryのエディタ部のテーマを自動変更します。 | |||
Meryのオプションで、「アプリのテーマ」を「システム設定を使用する」とすると、Windowsに合わせてMeryのテーマが変更されるようになりますが、エディタ部のテーマはこれとは別に設定変更する必要があります。 | Meryのオプションで、「アプリのテーマ」を「システム設定を使用する」とすると、Windowsに合わせてMeryのテーマが変更されるようになりますが、エディタ部のテーマはこれとは別に設定変更する必要があります。 | ||
[https://apps.microsoft.com/detail/xp89dcgq3k6vld?hl=ja-JP&gl=JP Microsoft PowerToys]の Light Switch や、[https://apps.microsoft.com/detail/xp8jk4hzbvf435?hl=ja-JP&gl=JP Auto Dark Mode]などを使用すると、Windowsのテーマを時間で自動変更するなどができますが、Mery本体はこれに追随するのに、エディタ部のテーマだけ置き去りになって、なんか悲しかったので作りました。 | |||
* Meryのオプション->「基本」->「アプリのテーマ」で、「システム設定を使用する」としている場合のみ動作するようにしてあります。 | * Meryのオプション->「基本」->「アプリのテーマ」で、「システム設定を使用する」としている場合のみ動作するようにしてあります。 | ||
* ライトモード/ダークモード用のテーマを用意しておき、マクロ先頭でテーマ名を指定します | * ライトモード/ダークモード用のテーマを用意しておき、マクロ先頭でテーマ名を指定します | ||
:(Mery標準のテーマは使えません、「名前を付けて保存」したテーマを使用します) | :(Mery標準のテーマは使えません、「名前を付けて保存」したテーマを使用します) | ||
* マクロのカスタマイズ画面のリストに登録したら、イベントを有効にします | |||
:イベントはお好みで...(「フォーカスを受け取った時」「フォーカスを失った時」くらいが妥当だと思います) | |||
テーマを書き換えるアイディアは、ucky様の「[ | テーマを書き換えるアイディアは、ucky様の「[[テーマのトグル]]」マクロからいただきました。 | ||
すてきなアイディアありがとうございます。 | |||
== 変更履歴 == | == 変更履歴 == | ||
| 22行目: | 25行目: | ||
// ライトモード/ダークモード用のテーマを用意しておき、ここでテーマ名を指定します | // ライトモード/ダークモード用のテーマを用意しておき、ここでテーマ名を指定します | ||
// (Mery標準のテーマは使えません、「名前を付けて保存」したテーマを使用します) | // (Mery標準のテーマは使えません、「名前を付けて保存」したテーマを使用します) | ||
var lightModeTheme = "# | var lightModeTheme = "#Custom-Light"; | ||
var darkModeTheme = "# | var darkModeTheme = "#Custom-Dark"; | ||
// マクロのカスタマイズ画面のリストに登録したら、イベントを有効にします | // マクロのカスタマイズ画面のリストに登録したら、イベントを有効にします | ||
| 32行目: | 35行目: | ||
if ("ReadSettings" in editor) { | if ("ReadSettings" in editor) { | ||
if(editor.ReadSettingInteger("General", "DarkMode", -1) == 2){ | if(editor.ReadSettingInteger("General", "DarkMode", -1) == 2){ | ||
// Meryの現在のテーマ | |||
var currentTheme = editor.ReadSettingString("Themes", "ThemeName", ""); | var currentTheme = editor.ReadSettingString("Themes", "ThemeName", ""); | ||
// Windowsのテーマ状態 | |||
var regKey = "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize\\AppsUseLightTheme"; | var regKey = "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize\\AppsUseLightTheme"; | ||
var isLight = (new ActiveXObject("WScript.Shell")).RegRead(regKey); | var isLight = (new ActiveXObject("WScript.Shell")).RegRead(regKey); | ||
| 42行目: | 47行目: | ||
} | } | ||
if(currentTheme != newTheme){ | if(currentTheme != newTheme){ | ||
var | // 表示設定項目一覧取得 | ||
var iniKeys = enumKeysInSection("Theme\\" + newTheme); | |||
if(iniKeys.length > 0 | if(iniKeys.length > 0){ | ||
editor.WriteSettings(); | editor.WriteSettings(); | ||
// テーマを「名前を付けて保存」したときに設定ファイルに追加される | // テーマを「名前を付けて保存」したときに設定ファイルに追加される | ||
| 56行目: | 59行目: | ||
); | ); | ||
} | } | ||
editor.WriteSettingString("Themes", "ThemeName", newTheme); | |||
editor.ReadSettings(); | editor.ReadSettings(); | ||
}else{ | }else{ | ||
window.OutputBar.Visible = true; | window.OutputBar.Visible = true; | ||
window.OutputBar.Writeln("指定されたテーマが見つかりません: " + newTheme); | window.OutputBar.Writeln("指定されたテーマが見つかりません: " + newTheme); | ||
| 66行目: | 69行目: | ||
} | } | ||
}else{ | }else{ | ||
window.OutputBar.Visible = true; | window.OutputBar.Visible = true; | ||
window.OutputBar.Writeln("動作対象外のMeryです: Ver." + editor.Version); | window.OutputBar.Writeln("動作対象外のMeryです: Ver." + editor.Version); | ||
| 77行目: | 79行目: | ||
// Mery.ini を探す | // Mery.ini を探す | ||
var iniPath = editor.FullName.replace(/\.exe$/i, ".ini"); | var iniPath = editor.FullName.replace(/\.exe$/i, ".ini"); | ||
if (! (new ActiveXObject("Scripting.FileSystemObject")).FileExists(iniPath)){ | if(! (new ActiveXObject("Scripting.FileSystemObject")).FileExists(iniPath)){ | ||
var iniName = /\\([^\\]+)\.exe$/.exec(editor.FullName)[1]; | var iniName = /\\([^\\]+)\.exe$/.exec(editor.FullName)[1]; | ||
iniPath = (new ActiveXObject( "WScript.Shell" )).SpecialFolders("APPDATA") + "\\Mery\\" + iniName + ".ini"; | iniPath = (new ActiveXObject("WScript.Shell")).SpecialFolders("APPDATA") + "\\Mery\\" + iniName + ".ini"; | ||
} | } | ||
// Mery.ini を読みこむ | // Mery.ini を読みこむ | ||
| 90行目: | 92行目: | ||
adodb.Close(); | adodb.Close(); | ||
var start = iniText.search(new RegExp( "^\\[" + sectionName.replace(/\W/g, "\\$&") + "\\]$", "m" )); | var start = iniText.search(new RegExp("^\\[" + sectionName.replace(/\W/g, "\\$&") + "\\]$", "m")); | ||
if(start >= 0){ | if(start >= 0){ | ||
start = start + sectionName.length + 4; | start = start + sectionName.length + 4; | ||
スポンサーリンク