我輩はブロガーではない。ネタもまだない

SASとかDelphiあたりの人様の役に立たないネタを提供します

SASの右クリックシェルメニューをカスタマイズする

さて、SASをお使いの皆様はいかにしてSASを起動していますか。
どうやってプログラムをロードしていますか。

sasプログラムを右クリックして開く、ダブルクリックで開く、SASを起動してプログラムをopenする、
色々あると思いますが、ちょっと待って…

右クリックメニューの印刷とかいる?
f:id:japelin:20201007095813p:plain

これで間違って印刷したことある人はいても、プログラムをこれで印刷する人ってあんまりいないんじゃないでしょうか。
(使ってる人いたらゴメンナサイ)

というわけで今日は右クリックメニューのカスタマイズを。



まず、これをやるにはレジストリをいじるので、
・管理者権限がない
レジストリいじるの怖い

という人には残念ながら無理です。


管理者権限があって、レジストリいじってみる、という方はまず、レジストリエディタを起動しましょう。
Windowsメニュー→regedit
f:id:japelin:20201006004044p:plain


次の場所まで移動します
\HKEY_CLASSES_ROOT\SAS.Program.701\shell
f:id:japelin:20201006004235p:plain

この「SAS.Program.701」というのが拡張子「.sas」に関連付けられたものになります。

よく見てみると、
OpenとかPrint、PrintToとかいうメニューがありますね。

ここのPrintとPrintToを削除しちゃいましょう。
右クリックで削除です。えいっ。
f:id:japelin:20201006004950p:plain


これでsasプログラムを右クリックしたときのメニューから「印刷」、「SAS9.4で印刷」が消えてくれます。


せっかくなのでもう少しいじってみましょう。


SASは起動時のウィンドウレイアウトを保存する機能があります。
「ツール→オプション→プリファレンス→終了時の設定を保存する」です。

これにチェックが入っていると、終了時のレイアウトそのままに次回も起動してくれます。最大にしておけばもちろん最大サイズで。
しかしながら、ダブルクリックもしくは開くメニューでSASを起動すると、SASのウィンドウサイズが最大にはなりません。
(環境によるかもしれませんが)

f:id:japelin:20201006004440p:plain
普通にSASを起動した時のウィンドウサイズ
f:id:japelin:20201006004449p:plain
ダブルクリックで開いたときのウィンドウサイズ

レジストリを見ればわかると思いますが、開くメニューで起動されているアプリケーションファイルはsas.exeではなく、sasoact.exeという実行ファイルです。
(多分SAS Ole ACTionとかそんな感じ)
f:id:japelin:20201006004717p:plain


最大化できないのはsasoact.exeの仕様だそうなので諦めて、最大で開けるような設定に変えてしまいましょう。


まず、HKEY_CLASSES_ROOT\SAS.Program.701\shell\Open\commandキーの既定をダブルクリックします
f:id:japelin:20201006004747p:plain


データに次の文字列を設定します

"C:\Program Files\SASHome2\SASFoundation\9.4\sas.exe" -config "C:\Program Files\SASHome2\SASFoundation\9.4\SASV9.CFG" -initstmt "dm 'awsmaximize on;include ''%1'' ';""

それぞれの説明をしていきます。
まず、

"C:\Program Files\SASHome2\SASFoundation\9.4\sas.exe"

については言わずもがな、sasの本体です。

続いて、

-config "C:\Program Files\SASHome2\SASFoundation\9.4\SASV9.CFG"

これは、デフォルトのsasの構成ファイルを読み込むように指定しています

-initstmt

SASを起動した直後に実行するステートメントを指定できます

"dm 'include ''%1'' ';"

dmステートメント(DMステートメント)では、SASのアプリケーション自体のコントロールをすることができます。

include %1

で開くメニューで受け取ったファイル名が引き渡されます。


つまり、SASを起動直後にdmステートメントsasプログラムを読み込ませる、という設定です。

こうすることで、右クリックの開くメニューもしくはダブルクリック時に、通常通りSASを起動したのと同じウィンドウサイズで起動することができます。
さらには、32bitと64bitが同居している環境で、指定のsasを起動できるというメリットがあります。
sasoact.exeではデフォルト指定された側のsasしか起動できませんので、これは結構大きいのではないでしょうか。



ちなみに、「sas9.4でサブミット」というメニューもsasoact.exe経由で起動するため、ウィンドウサイズが通常利用しているものと異なる可能性があります。

こちらはHKEY_CLASSES_ROOT\SAS.Program.701\shell\Submit940\command の既定データを以下のように変更します

"C:\Program Files\SASHome2\x86\SASFoundation\9.4\sas.exe" -autoexec "%1" -config "C:\Program Files\SASHome2\x86\SASFoundation\9.4\SASV9.CFG"


異なるのは

-autoexec "%1"

ですね。

autoexec は指定したプログラムを起動直後に実行してくれます。
バッチサブミットと違うところは、SASは起動したままなので、データセットの確認や、その後の作業等が継続してできるという点です。
(厳密にはもう少し違いがあるのですがここでは省略)


ちなみに、私のPCは32bit版と64bit版が同居しているのでこんな感じになっています。

f:id:japelin:20201006005506p:plain
レジストリのキー
f:id:japelin:20201006005217p:plain
右クリックメニュー

デフォルトが64bitなので、デフォルトのOpenキーに64bit版を割り当てており、64bit用と32bit用の順番がちょっとずれてますが、ご愛嬌。