Win32API
リファレンス¶
Windows API List - MSDN¶
詳細な Windows API 一覧 (英語) - '''Windows API リスト: Windows API、Win32 API、Win32API | MSDN''' - このページではよく使われる一部の Windows API をリストし、日本語ドキュメントと英語ドキュメントへのリンクを案内しています。
pinvoke.net: the interop wiki!¶
DLLの一覧と説明
標準 Windows API¶
C言語での解説
RubyでWin32APIを使う¶
【公式】Ruby 2.0.0 リファレンスマニュアル - class Win32API¶
使用例、引数の説明。
api = Win32API.new(dllname, func, import, export) api.call(args)
DLとWin32APIとFiddle - mirichiの日記¶
Ruby1.8時代、Ruby1.9時代、Ruby2.0時代
Ruby 1.9.0 problem with DL.dlopen - Ruby Forum¶
1.9's dl is not compatible with 1.8's. The following code may help you:
require 'dl' user32 = DL.dlopen('user32') msgbox = DL::CFunc.new(user32['MessageBoxA'], DL::TYPE_LONG, 'MessageBox') msgbox.call(["Hello", "Message Box", 0](0,).pack('L!ppL!').unpack('L!*'))
instance method Array#pack¶
Array#pack、String#unpack のテンプレート文字の一覧です。テンプレート文字は後に「長さ」を表す数字 を続けることができます。「長さ」の代わりに`*'とすることで「残り全て」 を表すこともできます。
class DL::CFunc¶
DL::CFunc.new(addr, type = DL::TYPE_VOID, name = '', calltype = :cdecl)
Ruby 1.9.3 リファレンスマニュアル dl/importライブラリ¶
library dl/import¶
使い方とコード簡略化の過程
require 'dl/import' module User32 extend DL::Importer dlload 'user32' extern 'int MessageBoxA(int, char*, char*, int)' extern 'int EnumWindows(void*, int)' end =begin cf = DL::CFunc.new(0, DL::TYPE_INT) cb = DL::Function.new(cf, [DL::TYPE_INT]) cb.bind{|hwnd| puts hwnd -1 } =end =begin cb = DL::Function.new(DL::CFunc.new(0, DL::TYPE_INT), [DL::TYPE_INT]){|hwnd| puts hwnd -1 } =end def f(hwnd) puts hwnd -1 end cb = DL::Function.new(DL::CFunc.new(0, DL::TYPE_INT), [DL::TYPE_INT], &method(:f)) User32.EnumWindows(cb, 0) User32.MessageBoxA(0, "exit", "caption", 0)
Ruby 2.0 example of EnumWindows¶
require 'Fiddle' require 'Fiddle/Import' module User32 extend Fiddle::Importer dlload 'user32' extern 'int MessageBoxA(int,char*, char*, int)' extern 'int EnumWindows(void*,int)' end cb = Fiddle::Closure::BlockCaller.new(Fiddle::TYPE_INT, [Fiddle::TYPE_INT]) do |hwnd| puts hwnd -1 end func = Fiddle::Function.new(cb,[Fiddle::TYPE_INT], Fiddle::TYPE_INT) User32.EnumWindows(func,0)
Ruby 1.8.7 リファレンスマニュアル > DLモジュール¶
- C
- 文字 (char)
- c
- 文字を指すポインタ (char *)
- H
- short 整数 (short)
- h
- short 整数を指すポインタ (short *)
- I
- 整数 (char, short, int)
- i
- 整数を指すポインタ (char *, short *, int *)
- L
- long int
- l
- long int へのポインタ (long *)
- F
- 実数 (float)
- f
- 実数へのポインタ (float *)
- D
- 実数 (double)
- d
- 実数へのポインタ(double *)
- S
- 不変 (immutable) の文字列 (const char *)
- s
- 変更可能(mutable)な文字列 (char *)
- A
- 配列 (const type[])
- a
- 変更可能 (mutable) な配列 (type[])
- P
- ポインタ (void *)
- p
- 変更可能 (mutable) なポインタ (void *)
- 0
- void 関数 (これはプロトタイプの最初の文字でなければならない)
RubyからWin32APIを叩く¶
UNZIP32.DLL for windows 9x/Me/NT/200x/XPをRubyから呼び出し 呼び出すAPIごとにオブジェクトができるのは違和感を覚えるので、DLLごとに1オブジェクトに纏めるとこんな感じ
#!/usr/bin/ruby require 'Win32API' class Win32Proxy def initialize(dll_name) @methods = {} @dll_name = dll_name end def method_missing(sym, *args, &block) m = @methods[sym] m.send('call', *args, &block) end def register_method(name, params, return_type) @methods[name.to_sym] = Win32API.new(@dll_name, name, params, return_type) end end class UnZip32 < Win32Proxy UNZIP32 = 'UNZIP32.DLL' def initialize() super(UNZIP32) register_method('UnZipGetSubVersion', %w(v), 'l') register_method('UnZip', %w(p p p l), 'i') end end unzip32 = UnZip32.new puts unzip32.UnZipGetSubVersion() buf = "\0" * 128 cmd = "foo.zip" unzip32.UnZip(nil, cmd, buf, buf.size) puts buf.unpack('A*').pack('A*')
ウィンドウ操作¶
- ruby - Win32's FindWindow() can find a particular window with the exact title, but what about "try.bat - Notepad"? - Stack Overflow
EnumWindows, EnumWindowsProc, GetWindowText によるウィンドウタイトルのあいまい検索
マウス・キーボード操作¶
Using the Keyboard to Move the Cursor¶
公式によるサンプルコード。 - GetCursorPos function (Windows) - SetCursorPos function (Windows) - N0ラボ(仮) - Ruby編 - Win32APIを使ってマウスクリックを行わせる - Win32APIを使ってキーボード入力を行わせる - Win32APIを使って特定のウインドウをフォアグラウンドに出す、タイトルからウインドウを取得する - VRubyでGetCursorPos - 近況
Font¶
フォントの列挙¶
- c++ - Get list of fonts (Win32) - Stack Overflow
- フォント - WisdomSoft
- タイプフェイス - WisdomSoft
- プログラミング講座-第29章
- フォント名の列挙 - Program Tips
- Visual Basic でシンボルを除くフォント一覧を取得するサンプル - Yahoo!知恵袋
- フォントの列挙: vanillaの日記
- 全標準フォント一覧 / もうパンツはかない