Windows の管理者権限ないけどフォント追加し鯛
会社の PC(Windows XP) では、通常のユーザは殆ど何も出来ない設定になっていて、例えば、 NTEmacs で使いたいフォントをインストールしようとしても、アクセス権がないと叱られてしまう。
ちょっと検索すると、管理者権限が無くても一時的にフォントを追加出来るツールがいくつかあるようで、これまでは FontPnP(リンク切れ??) や FontPlug を試させて貰っていた。しかし、どちらも使いたいフォントを有効にするには、アプリケーションを起動して、ヒトが操作してやる必要がある。確かに、フォントを一時的に試したい場合や、たくさんあるフォントの一部だけを選んで有効にしたい場合には便利なのかもしれないが、自分がやりたいのは、毎回起動(ログオン)時に決まったフォントが有効になって欲しいだけなので、それくらい勝手にやって欲しいのだ…と、 ruby + Win32API で書いてみたメモ。
使い方は、予め入手したフォントがあるフォルダのパスを引数として指定して起動するか、フォントのあるパスにスクリプトを置いて引数なしで起動すると、現在のセッションの間だけ、フォルダ内のフォントが使用可能になるという…それだけ。
自分は、フォントがあるフォルダにスクリプトを置いて、そのショートカットをスタートアップに登録して使ってます :-)
あ、そうやって使う場合は、 Win32 版 ruby がインストールされていて .rb ファイルに関連付けされている必要があるのかな…。 Exerb で .exe にしてもいいんでしょうが。
#!/usr/bin/ruby
require 'Win32API'
fontPath = String.new
# if font-path is not specified as an argument, use the path where this script resides
if ARGV.size != 0
fontPath = ARGV.shift
else
# retrieve my own name depends on whether I am .rb or .exe...
myName = (defined?(ExerbRuntime))? ExerbRuntime.filepath: $0
fontPath = File.dirname(myName)
end
objAddFontResource = Win32API.new('GDI32.DLL', 'AddFontResource', %w(p), 'i')
Dir.chdir(fontPath) {
Dir.glob("*.{fon,fnt,ttf,ttc,fot,otf}", File::FNM_CASEFOLD) {|entry|
if /cygwin/ =~ RUBY_PLATFORM
font = `cygpath -aw #{fontPath}/#{entry}`.chomp!
else
font = "#{fontPath}\\#{entry}"
end
if File.file?(font)
ret = objAddFontResource.call(font)
if ret != 0
print "%d font(s) added from #{entry}.\n" % ret
else
print "adding #{entry} failed.\n"
end
end
}
}
########## font files with following extensions are added
## .fon
## .fnt
## .ttf
## .ttc
## .fot
## .otf
########## font files with following extensions are not added
## .mmm
## .pfb
## .pfm
(2007/06/13 追記)
今は、下記の用に一部変更して addfont.rbw という名前で使っています。終了時に追加したフォント一覧を表示しますが、何も考えていないのでフォントが多すぎるとダメ鴨。
#!/usr/bin/ruby
require 'Win32API'
fontPath = String.new
# if font-path is not specified as an argument, use the path where this script resides
if ARGV.size != 0
fontPath = ARGV.shift
else
# retrieve my own name depends on whether I am .rb or .exe...
myName = (defined?(ExerbRuntime))? ExerbRuntime.filepath: $0
fontPath = File.dirname(myName)
end
objAddFontResource = Win32API.new('GDI32.DLL', 'AddFontResource', %w(p), 'i')
text = String.new
Dir.chdir(fontPath) {
Dir.glob("*.{fon,fnt,ttf,ttc,fot,otf}", File::FNM_CASEFOLD) {|entry|
if /cygwin/ =~ RUBY_PLATFORM
font = `cygpath -aw #{fontPath}/#{entry}`.chomp!
else
font = "#{fontPath}\\#{entry}"
end
if File.file?(font)
ret = objAddFontResource.call(font)
if ret != 0
text << "%d font(s) added from #{entry}.\n" % ret
else
text << "adding #{entry} failed.\n"
end
end
}
}
objMessageBox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i') # args: window, text, caption, type
if text.size > 0
objMessageBox.call(0, text, "#{myName}", 0) # MB_OK=0
else
objMessageBox.call(0, "No font specified...", "#{myName}", 0) # type = MB_OK = 0
end
########## font files with following extensions are added
## .fon
## .fnt
## .ttf
## .ttc
## .fot
## .otf
########## font files with following extensions are not added
## .mmm
## .pfb
## .pfm
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- AmigaOSのHDDジオメトリ (つづき)(2017.05.29)
- AmigaOSのHDDジオメトリ (つづく…)(2017.05.23)
- Firefox41 で .keysnail.js がエラーしてた件(2015.10.12)
「Emacsen」カテゴリの記事
- NTEmacs で tramp (ssh) 設定とか(2013.12.21)
- Outlook で Emacs なキーバインド(2013.11.27)
- migemo の ruby 1.9 対応 (NTEmacs + Cygwin)(2012.10.30)
- NTEmacs + mew で機種依存文字を表示させThai(2010.08.27)
- 最近 Firefox が固まる…(2010.07.27)
「スクリプティング」カテゴリの記事
- Android の adb backup から一部だけリストアしちゃー(2014.08.22)
- Python の正規表現が激遅だと思ったら(2013.05.27)
- Pythonの日本語版HTMLヘルプ再構築(2013.03.07)
- migemo の ruby 1.9 対応 (NTEmacs + Cygwin)(2012.10.30)
この記事へのコメントは終了しました。


コメント