|
こんばんは。久しぶりの質問/要望です。
コントロールパネル → ディスプレイ に画面のサイズが拡大表示できる機能があります。
これは一番小さい設定で普通の100%なのですが、これを125%の設定にすると 例えば1920x1200だと画面の領域が1536x960になります。(1536×1.25=1920) http://www.atmarkit.co.jp/fwin2k/win2ktips/1362txtsize/txtsize.html
この状態でウィンドウ全体のスクリーンショットを保存しようとしたのですが、 (0,0)x(1920,1200)の領域が保存されるはずが(0,0)x(1536,960)の画像が保存されてしまいます。 SAVEIMG("SCRSHOT", 0, 0,0, 1920,1200) のように指定しても、(0,0)x(1536,960)の画像が保存されます。
また、ウィンドウを指定して画面を保存しようとすると、1.25倍した分だけ座標が左上にずれ、ウィンドウの右下が欠けてしまいます。
画面取得指定をIMG_BACKに指定したりなど色々試してみたのですが、どうしても(1536,960)の壁を越えられません。どうにかしてウィンドウ全体を保存する方法はないでしょうか?
もし不具合でしたら修正お願いします!
ウィンドウの左上は以下のようにしてだいたい合わせられました。 追記:ちょっと修正しました ----------------------------------------------------------------------------------
CONST 本当の幅 = 1920
PUBLIC Directory = ".\bmp\" If Copy(Directory, Length(Directory), 1) <> "\" Then Directory = Directory + "\"
PUBLIC Zoom = 本当の幅 / G_SCREEN_W
SetHotKey(VK_SnapShot, , "Desktop") SetHotKey(VK_SnapShot, MOD_CONTROL, "ActiveWindow") SetHotKey(VK_SnapShot, MOD_SHIFT, "Explorer")
While TRUE Sleep(30) WEnd
Procedure Desktop() DIM FileName, FileName_FORE, FileName_BACK
GetTime() FileName = "Img" + G_TIME_YY2 + G_TIME_MM2 + G_TIME_DD2 +"_"+ G_TIME_HH2 + G_TIME_NN2 + G_TIME_SS2 FileName_FORE = FileName + "_F" + G_TIME_ZZ2 FileName_BACK = FileName + "_B" + G_TIME_ZZ2
SaveImg(Directory + FileName_FORE, 0, 0, 0, G_SCREEN_W * Zoom, G_SCREEN_H * Zoom, FALSE, 0, IMG_FORE) SaveImg(Directory + FileName_BACK, 0, 0, 0, G_SCREEN_W * Zoom, G_SCREEN_H * Zoom, FALSE, 0, IMG_BACK) Sound("BEEP") FEnd
Procedure ActiveWindow() DIM FileName, FileName_FORE, FileName_BACK DIM ID = GetID(GET_ACTIVE_WIN) DIM org_x = Status(ID, ST_X) DIM org_y = Status(ID, ST_Y) DIM org_w = Status(ID, ST_WIDTH) DIM org_h = Status(ID, ST_HEIGHT) DIM zoom_x = (Zoom - 1) * org_x DIM zoom_y = (Zoom - 1) * org_y DIM zoom_w = Zoom * org_w DIM zoom_h = Zoom * org_h
GetTime() FileName = "Img" + G_TIME_YY2 + G_TIME_MM2 + G_TIME_DD2 +"_"+ G_TIME_HH2 + G_TIME_NN2 + G_TIME_SS2 FileName_FORE = FileName + "_F" + G_TIME_ZZ2 FileName_BACK = FileName + "_B" + G_TIME_ZZ2
SaveImg(Directory + FileName_FORE, ID, zoom_x, zoom_y, zoom_w, zoom_h, FALSE, 0, IMG_FORE) SaveImg(Directory + FileName_BACK, ID, 0, 0, zoom_w, zoom_h, FALSE, 0, IMG_BACK) Sound("BEEP") FEnd
Procedure Explorer() Sound("BEEP") DosCmd("Explorer " + Directory) FEnd
|