
RubyでWin32APIのCreateWindow
初めまして。RubyでWin32APIを使ってプログラミングをしようとしています。
RubyもWin32APIも勉強を始めて間もないのですが、RubyリファレンスマニュアルのWin32APIのページやグーグル検索などを利用し一通り調べて
(test.rb)
require 'Win32API'
createwindow = Win32API.new('user32', 'CreateWindow', %w(l p l i i i i l l l p), 'l')
createwindow.call(0, "HELLO", 0xc00000, 100, 100, 100, 100, 0, 0, 0, nil)
としてみました。しかしエラーで、
test.rb:2:in `initialize': GetProcAddress: CreateWindow or CreateWindo
wA (RuntimeError)
となりました。
rubyのバージョンは
ruby 1.8.6
です。
コードのどこが間違っているのか、エラーの意味、参考になるwebサイト(rubyでWin32APIのCGIを扱っているサイト)を教えていただきたいです。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
Rubyは触ったことありませんので細かいところは不明ですが…
Dependency Walkerでuser32.dllを見ると…CreateWindowAという関数はエクスポートされていません。
つまり、そんなAPIは存在しません。
# Dependency Walkerはフリーで入手可能です。
WindowsSDKをインストールしてヘッダファイルを確認すると…
CreateWindowはCreateWindowExでdefineされています。
# user32.dllにCreateWindowExはエクスポートされています。
ということで、CreateWindowExでWin32API.newすればよいのではないでしょうか。
# 第1引数にWndExtraのサイズを指定する必要があるようです。
# CreateWindow()では0を指定していることになっています。
しかし…コモンコントロールならともかく、それ以外のウィンドウだったとしてウィンドウプロシージャはどうなるんでしょうかね?
回答ありがとうございます!
さっそくCreateWindowExを使って試してみたところ、実行はできました!
戻り値が0(エラー)で画面は表示されませんが。。。
createwindow = Win32API.new('user32', 'CreateWindowEx', %w(l p p l i i i i l l l p), 'l')
p createwindow.call(0, "fff", "HELLO", 0xc00000, 100, 100, 200, 200, 0, 0, 0, nil)
ウィンドウプロシージャもウィンドウプロシージャ専用のインスタンス作ってコールバック関数のProcを渡す感じなのかなーって漠然と考えてるんですが・・・わかりません。
hinstanceに何を渡していいのやら・・・
もう少し試行錯誤してみたいと思います。参考になりました。
No.2
- 回答日時:
私もRubyをよく知らないので参考までに。
CreateWindowExが失敗する理由はGetLastErrorを使えばわかるはず。
あとhInstanceに渡すのはGetModuleHandle(NULL)の戻り値でいい気がする。
この回答への補足
とりあえずウィンドウ作成できたので、ブログにまとめてみました。
http://infosc.blog104.fc2.com/
誰かの参考になればと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSSのhtmlへの紐付けについ...
-
100万件越えCSVから条件を満た...
-
一週間用のカレンダー
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
ルビー言語 csvファイル 続き(...
-
ルビー言語 csvファイル 続き
-
ルビー言語 ライブラリー
-
ルビー言語 csvファイル part2
-
ルビー言語 ライブラリー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WARNINGエラー「interpreted as...
-
エラーが起こる理由を教えてい...
-
rubyでパケットキャプチャ出来...
-
MacRubyにおけるコメントアウト...
-
Ruby 2.2.3 [x64]について
-
gem install railsで「NameErr...
-
フォームのcgi データを削除し...
-
Railsでのpaginateの方法
-
RubyでWin32APIのCreateWindow
-
twitteのソースでエラーが出て...
-
GUIプログラムを作りたいのですが
-
ruby 全角ハイフンを半角ハイフ...
-
Aptana Studioの複数ファイルの...
-
ruby.exeとrubyw.exeに違いがあ..
-
rubyのサンプルコードの起動に...
-
COBOLのIFの入れ子について
-
小文字wと大文字Wの区別
-
VB.NETで階乗を求めるプログラ...
-
Windowsでchangenotifyしたい
-
Rubyのソースを難読化すると「u...
おすすめ情報