Macro/投稿/209 のバックアップ(No.7)




フォントサイズ変更

  • ページ: Macro/投稿
  • 作者: jj?
  • カテゴリー: js
  • 投稿日: 2010-01-08 (金) 03:30:29

メッセージ

フォントサイズを変更します。
処理内容は、WshShell.SendKeys() でフォント設定ダイアログのキー入力を
自動化しているだけです。

  • マクロ実行後は、AltやCtrlやShiftが押されていない状態になったりするようでした。
    もしキー割り当てで使う場合、連続して実行するにはそれらのキーを押し直してやる
    必要があります。(自環境ではタブメニューに入れてみました。)
  • フォント設定のダイアログが表示されたままになることが多い場合、
        WScript.Sleep( 20 );
    の 20 [ms] を増やしてみてください。(自環境ではPCが重いとたまに発生。)
  • デスクトップや「すべてのプログラム」で、ショートカットキー(ホットキー)に
    Ctrl+Shift+V や Ctrl+Shift+Alt+Up などを割り当てているものが
    あると、うまく動作しないかも知れません。

将来サクラエディタで Ctrl+マウスホイール で拡大・縮小なんてできれば
このマクロもお役御免かなぁ。


サイズを指定。(sDefaultFontSize の値、またはファイル名で指定します。)

fileChangeFontSize.js
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
/* (Tab=4)
 [概要]
	フォントサイズを変更します。
	デフォルトは sDefaultFontSize の値です。本マクロのファイル名に
	"FontSize=nn" (nnは数字) という文字列が含まれていれば、それを
	フォントサイズとして使用します。(大文字・小文字は区別されません。)
		例: "ChangeFontSize=16.js" → サイズを16に。
 [制限]
	実行中に、他のアプリケーションをアクティブにすると誤動作します。
 [変更履歴]
	2012/07/24	Win7対応(?)。但しCtrlキーを押していると誤動作する。(Altキーは大丈夫かも?)
	2010/01/06	新規
*/
 
// フォントサイズのデフォルト値
var sDefaultFontSize = "10";
 
 
Main();
 
function Main()
{
    var WshShell = new ActiveXObject("WScript.Shell");
    var sSELFCALLID = "/CallByMyself";        // 誤実行防止用の識別子
    var sMacroPath;
    var sFontSize;
    var n;
    
    if( typeof Editor != "undefined" ){
        // サクラエディタからマクロ実行された。
        
        sMacroPath = Editor.ExpandParameter("$M");
        if( sMacroPath == "" ) return;        // [名前を指定してマクロ実行...] の場合
        
        // 本ファイル名に "FontSize=nn" が含まれていれば、フォントサイズとして使用。
        sFontSize = sDefaultFontSize;
        if( sMacroPath.match( /.*FontSize=([0-9]+)[^\\]*$/i ) != null ){
            n = parseInt( RegExp.$1 );
            if( (n >= 8) && (n <= 72) ){
                sFontSize = RegExp.$1;
            }
        }
        
        // フォントサイズをクリップボードへコピー (プロセス終了まで待つ)
        //	WshShell.Run( "mshta.exe \"javascript:clipboardData.setData('text', '"
        //		+ sFontSize + "'); close();\"", 0, true );
        //	↑マクロで実行すると遅かった。(wscriptでの実行だとOK)
        WshShell.Run( "mshta.exe \"about:<hta:application windowstate=minimize />"
            + "<script>clipboardData.setData('text', '" + sFontSize + "'); close();</script>\""
            , 0, true );
        
        // wscript で本ファイルを実行
        WshShell.Run( 'wscript.exe "' + sMacroPath + '" ' + sSELFCALLID );
        
        // フォント設定のダイアログ
        Editor.SelectFont();
        
    }else{
        // 本マクロから wscript で実行された。
        
        var WshArgs = WScript.Arguments;
        if( (typeof WshArgs == "undefined")||(WshArgs.length == 0)||(WshArgs(0) != sSELFCALLID) ){
            WScript.Echo( "このスクリプトはサクラエディタのマクロ用です。" );
            return;
        }
        
        // 少し待つ
        WScript.Sleep( 20 );        // とりあえず20ms
        
        //2012/07/24 Win7では誤動作する。
        // 例えばAlt+Tab はタスクスイッチャーの動作になってしまう。(WinXPではOKだった。)
        // おとなしく単純に Alt+S や Enter にする。但し Alt や Ctrl が押されているとうまく動作しない。
        //		// SendKeys() はModifierキーが押されていたり、IMEがONだとうまく動作しない。
        //		//   Ctrlが押されていると Alt+S → Alt+Ctrl+S で[サイズ(S)]にフォーカス移動しない。
        //		//   Shiftが押されていると "1" → "!" になる。IMEがONだと全角入力になる。
        //		// Modifierキーはなるべく最初から押下状態に、数字入力はペーストとした。
        //		
        //		// %=ALT, ^=CTRL, +=SHIFT
        //		// [サイズ(S)] にフォーカス移動
        //		WshShell.SendKeys( "%^+{TAB}%^+{TAB}%^+{TAB}%^+{TAB}" );	// Alt+Ctrl+Shift +Tab
        //		// クリップボードからペースト (Altを押しているとだめらしい。ShiftはOKだった)
        //		WshShell.SendKeys( "^v" );				// Ctrl +V
        //		// [OK]
        //		WshShell.SendKeys( "%^+{ENTER}" );		// Alt+Ctrl+Shift +Enter
        
        // %=ALT, ^=CTRL, +=SHIFT
        // [サイズ(S)] にフォーカス移動
        WshShell.SendKeys( "%s" );                // Alt +S
        // クリップボードからペースト
        WshShell.SendKeys( "^v" );                // Ctrl +V
        // [OK]
        WshShell.SendKeys( "{ENTER}" );            // Enter
    }
}



1段階大きく。(コードは 1段階小さく と殆ど同じ)
fileChangeFontSizeUp.js

1段階小さく。

fileChangeFontSizeDown.js
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
/* (Tab=4)
 [概要]
	フォントサイズを変更します。
	フォント設定ダイアログの [サイズ] で、1段階小さいサイズを選択します。
 [制限]
	実行中に、他のアプリケーションをアクティブにすると誤動作します。
 [変更履歴]
	2012/07/24	Win7対応(?)。但しCtrlキーを押していると誤動作する。(Altキーは大丈夫かも?)
	2010/01/06	新規
*/
 
 
Main();
 
function Main()
{
    var WshShell = new ActiveXObject("WScript.Shell");
    var sSELFCALLID = "/CallByMyself";        // 誤実行防止用の識別子
    var sMacroPath;
    
    if( typeof Editor != "undefined" ){
        // サクラエディタからマクロ実行された。
        
        sMacroPath = Editor.ExpandParameter("$M");
        if( sMacroPath == "" ) return;        // [名前を指定してマクロ実行...] の場合
        
        // wscript で本ファイルを実行
        WshShell.Run( 'wscript.exe "' + sMacroPath + '" ' + sSELFCALLID );
        
        // フォント設定のダイアログ
        Editor.SelectFont();
        
    }else{
        // 本マクロから wscript で実行された。
        
        var WshArgs = WScript.Arguments;
        if( (typeof WshArgs == "undefined")||(WshArgs.length == 0)||(WshArgs(0) != sSELFCALLID) ){
            WScript.Echo( "このスクリプトはサクラエディタのマクロ用です。" );
            return;
        }
        
        // 少し待つ
        WScript.Sleep( 20 );        // とりあえず20ms
        
        //2012/07/24 Win7では誤動作する。
        // 例えばAlt+Tab はタスクスイッチャーの動作になってしまう。(WinXPではOKだった。)
        // おとなしく単純に Alt+S や Enter にする。但し Alt や Ctrl が押されているとうまく動作しない。
        //		// SendKeys() はModifierキーが押されているとうまく動作しない。
        //		// Modifierキーは最初から押下状態にした。
        //		
        //		// %=ALT, ^=CTRL, +=SHIFT
        //		// [サイズ(S)] にフォーカス移動
        //		WshShell.SendKeys( "%^+{TAB}%^+{TAB}%^+{TAB}%^+{TAB}" );	// Alt+Ctrl+Shift +Tab
        //		// カーソル↑
        //		WshShell.SendKeys( "%^+{UP}" );			// Alt+Ctrl+Shift +UpArrow
        //		// [OK]
        //		WshShell.SendKeys( "%^+{ENTER}" );		// Alt+Ctrl+Shift +Enter
        
        // %=ALT, ^=CTRL, +=SHIFT
        // [サイズ(S)] にフォーカス移動
        WshShell.SendKeys( "%s" );                // Alt +S
        // カーソル↑
        WshShell.SendKeys( "{UP}" );            // UpArrow
        // [OK]
        WshShell.SendKeys( "{ENTER}" );            // Enter
    }
}


こちらは、sakura.ini の [Font] セクション - "lf" キーを直接変更して
フォントサイズを変えています。
(後から SendKeys() の自動化を思いついたので没案。)
WMIを使っているのでW2k以降でないと動作しないらしいです。
注意:ANSI版サクラエディタ専用です。
        Unicode版サクラエディタでは使用できません。sakuraW.iniが壊れてしまいます。
Unicode版でも使用できるよう修正しました。ANSI版1.6.5.0、Unicode版r1704で
動作確認しています。(2010/02/01)
fileChangeIniFontSize.zip


  • 上記の「ChangeIniFontSize.zip」をダウンロードしてマクロフォルダに入れ、キーに割り当てを行って、新規に開いたサクラエディタ上で、割り当てたキーから実行してみました。が、開いていたサクラが閉じられ、再度開かれただけで、表面上何の変化もありませんでした。疑問に思いつつも設定画面を開くと、マクロの設定画面等で表示がおかしくなっていました……。具体的には ini ファイルが全体的に文字化けしたようで、ini ファイル内の2バイト文字はすべておかしな表記になってしまいました。使用したサクラのバージョンは Unicode 版の Rev.1704 ですが、このマクロは Unicode 版では使えないのでしょうか? それとも環境上の問題……? -- 2010-01-17 (日) 16:31:38
  • ちなみに環境は XP SP3 です。 -- 2010-01-24 (日) 21:56:14
  • わっ、ごめんなさい!! ANSI版でしか試していませんでした。Unicode版は使ったことがないのですが、iniファイルを壊してしまうのですね、ホント申し訳ないです。環境は同じくXP SP3を使っています。ご報告に感謝&改めてお詫びいたします。 -- jj? 2010-02-01 (月) 07:43:56

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS