[#34722] cgi.rb の form の挙動 — FUJIOKA Takeyuki <fujioka@...>

藤岡です。

18 messages 2002/04/02

[#34724] 「たのしい Ruby 」 — Shin-ichiro HARA <sinara@...>

原(信)です。

18 messages 2002/04/02
[#34728] Re: 「たのしい Ruby 」 — matz@... (Yukihiro Matsumoto) 2002/04/02

まつもと ゆきひろです

[#34746] Re: 「たのしい Ruby 」 — TAKAHASHI Masayoshi <maki@...> 2002/04/02

高橋征義です。

[#34752] Re: 「たのしい Ruby 」 — Shin-ichiro HARA <sinara@...> 2002/04/03

原(信)です。

[#34842] [ann] Web 家計簿(β版)リリース — 堀川 久 <vzw00011@...>

こんにちは。

18 messages 2002/04/07
[#34869] Re: [ann] Web 家計簿(β版)リリース — Nobuhide Kanagawa <nobuhide@...> 2002/04/11

こんばんわ!

[#34885] creating a scope / anonymous module — Takaaki Tateishi <ttate@...>

立石です.

38 messages 2002/04/13
[#34891] Re: creating a scope / anonymous module — nobu.nakada@... 2002/04/14

なかだです。

[#34892] Re: creating a scope / anonymous module — Takaaki Tateishi <ttate@...> 2002/04/14

At Sun, 14 Apr 2002 18:00:12 +0900,

[#34894] Re: creating a scope / anonymous module — nobu.nakada@... 2002/04/14

なかだです。

[#34896] Re: creating a scope / anonymous module — Takaaki Tateishi <ttate@...> 2002/04/14

At Sun, 14 Apr 2002 21:08:47 +0900,

[#34899] Re: creating a scope / anonymous module — matz@... (Yukihiro Matsumoto) 2002/04/15

まつもと ゆきひろです

[#34901] Re: creating a scope / anonymous module — Takaaki Tateishi <ttate@...> 2002/04/15

At Mon, 15 Apr 2002 09:51:05 +0900,

[#34902] Re: creating a scope / anonymous module — matz@... (Yukihiro Matsumoto) 2002/04/15

まつもと ゆきひろです

[#34903] Re: creating a scope / anonymous module — Takaaki Tateishi <ttate@...> 2002/04/15

At Mon, 15 Apr 2002 13:53:53 +0900,

[#34904] Re: creating a scope / anonymous module — matz@... (Yukihiro Matsumoto) 2002/04/15

まつもと ゆきひろです

[#34910] Re: creating a scope / anonymous module — Takaaki Tateishi <ttate@...> 2002/04/15

At Mon, 15 Apr 2002 15:07:57 +0900,

[#34958] windows 版 ruby でシステムコマンドが動かない — "jazzski _comp" <jazzski_comp@...>

はじめてrubyを使うのですが、windows版(cygwin版1.6.1)で下記のように

12 messages 2002/04/23

[ruby-list:34780] win32api getdibits (long)

From: "Norman Makoto Su" <normsu@...>
Date: 2002-04-04 06:12:56 UTC
List: ruby-list #34780
ノーマンです。始めまして。私の日本語はあまり得意ではありませんが、よろしくお願い
します。

どなたかWin32APIのGetDIBitsの機能を利用したことがありませんか? GetDIBitsで、デス
クトップのScreenShotを撮りたいんです。ウェッブで調べると、
http://www.fortunecity.com/skyscraper/windows/364/scrncapt.html(参照してくださ
い)のページにScreenShotを撮るコードがあって、そのコードをRubyに変換しようとしま
したが、なかなかうまく動かせません。

BitBltの呼びまで、正しいと思いますが、その後、どのようにしてGetDIBitsを
lpvpxldataにデスクトップのピクセルを書き込ませるのを分かりません。このプログラム
を実行し、lpvpxldataは""(空白String)の状態です。

hpxldata = GlobalAlloc.call(GMEM_FIXED, screenWidth * screenHeight * 3)
lpvpxldata  = GlobalLockI.call(hpxldata)
bmInfo = [40, screenWidth, screenHeight, 1, 24, 0, 0, 0, 0, 0,
          0].pack('LLLIILLLLLL')
bmFileHeader = [19778, (screenWidth * screenHeight * 3) + 40 + 14, 0, 0,
                54].pack('ILIIL')

GetDIBits.call(hmemDC, hmemBM, 0, screenHeight, lpvpxldata, bmInfo,
               DIB_RGB_COLORS)
File::open(filename, "w") { |bitmap|
    bitmap.print(bmFileHeader)
    bitmap.print(bmInfo)
    bitmap.print(lpvpxldata)
}

以下に全てのコードを貼り付けておきました。Win32APIが詳しい人を手伝ったら嬉しいで
す。では、

--
Norman Su

--------code--------
SelectObject = Win32API.new('gdi32', 'SelectObject', ['L', 'L'], 'L')
BitBlt = Win32API.new('gdi32', 'BitBlt', ['L'] * 9, 'L')
GlobalAlloc = Win32API.new('kernel32', 'GlobalAlloc', ['L', 'L'], 'L')
GlobalLock = Win32API.new('kernel32', 'GlobalLock', ['I'], 'P');
GlobalLockI = Win32API.new('kernel32', 'GlobalLock', ['I'], 'I');
GetDIBits = Win32API.new('gdi32', 'GetDIBits', 'LLLLPPL', 'L')
GlobalUnlock = Win32API.new('kernel32', 'GlobalUnlock', ['L'], 'L');
GlobalFree = Win32API.new('kernel32', 'GlobalFree', ['L'], 'L');
DeleteObject = Win32API.new('gdi32', 'DeleteObject', ['L'], 'L');
DeleteDC = Win32API.new('gdi32', 'DeleteDC', ['L'], 'L');
ReleaseDC = Win32API.new('user32', 'ReleaseDC', ['L', 'L'], 'L');

HORZRES = 8
VERTRES = 10
SRCCOPY = 0xCC0020
GMEM_FIXED = 0
GMEM_MOVEABLE = 0x0002
DIB_RGB_COLORS = 0
GHND = 0x40
GPTR = 0x42

def screenshot(filename='test.bmp')
  hScreenDC = GetWindowDC.call(0)
  hmemDC = CreateCompatibleDC.call(hScreenDC)
  screenWidth = GetDeviceCaps.call(hScreenDC, HORZRES)
  screenHeight = GetDeviceCaps.call(hScreenDC, VERTRES)
  hmemBM = CreateCompatibleBitmap.call(hScreenDC, screenWidth, screenHeight)
  SelectObject.call(hmemDC, hmemBM)

  BitBlt.call(hmemDC, 0, 0, screenWidth, screenHeight, hScreenDC, 0, 0,
              SRCCOPY)

  hpxldata = GlobalAlloc.call(GMEM_FIXED, screenWidth * screenHeight * 3)
  lpvpxldata  = GlobalLockI.call(hpxldata)
  bmInfo = [40, screenWidth, screenHeight, 1, 24, 0, 0, 0, 0, 0,
            0].pack('LLLIILLLLLL')
  bmFileHeader = [19778, (screenWidth * screenHeight * 3) + 40 + 14, 0, 0,
                  54].pack('ILIIL')

  GetDIBits.call(hmemDC, hmemBM, 0, screenHeight, lpvpxldata, bmInfo,
                 DIB_RGB_COLORS)
  File::open(filename, "w") { |bitmap|
    bitmap.print(bmFileHeader)
    bitmap.print(bmInfo)
    bitmap.print(lpvpxldata)
  }

  GlobalUnlock.call(hpxldata)
  GlobalFree.call(hpxldata)
  DeleteObject.call(hmemBM)
  DeleteDC.call(hmemDC)
  ReleaseDC.call(0, hScreenDC)
end

In This Thread

Prev Next