HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1118
瑞穂別ウインドウからのpget15解決


瑞穂

リンク

2011/11/18(Fri) 07:59:48|NO.43084

こんにちは。
HSPで作ったものとは別に動いているウインドウで、任意の座標にある1ドットのRGBの値を
取得することはできないでしょうか。
よろしくお願いします。



この記事に返信する


mamo

リンク

2011/11/18(Fri) 09:03:21|NO.43085

不正の助長はしたくないから、先に具体的な目的を書いたほうがレス付くと思う。



瑞穂

リンク

2011/11/18(Fri) 10:13:08|NO.43086

用途は、株式チャートのローソク足から値を取得するためです。
その数値を計算して、投資するかどうかを判定するプログラムを組みたいと思っています。
よろしくお願い致します。



ken2

リンク

2011/11/18(Fri) 11:54:26|NO.43089

ウィンドウキャプチャして、pgetすれば?



瑞穂

リンク

2011/11/18(Fri) 14:14:00|NO.43091

プログラムでキャプチャできればそれでいいんですが、手でやるのだとプログラミングする意味が
なくなってしまうもので・・・
プログラムではキャプチャは無理ですよね。



瑞穂

リンク

2011/11/18(Fri) 15:37:54|NO.43092

キャプチャできるフリーソフトをみつけました。
ありがとうございました。



fortunehill

リンク

2011/11/18(Fri) 15:40:42|NO.43093

瑞穂って@99円の?
ウインドウのハンドルを特定してキャプチャも出来るし
スクリーン全体キャプチャして位置特定するのも両方ともHSPで出来るよ。

マケスビならDDLで取得したデーター使うとか?
HETは無理かな。



WHOS

リンク

2011/11/18(Fri) 18:10:01|NO.43098

>>mamo氏
不正とは具体的に?



skyblue

リンク

2011/11/18(Fri) 19:49:57|NO.43102

>プログラムでキャプチャできればそれでいいんですが、手でやるのだとプログラミングする意味が
>なくなってしまうもので・・・
可能かどうかはわかりませんが、
該当のウインドウキャプチャのキーをキーボードイベントを発生させることにより
クリップボードにコピーすることができます。
同様の方法で、自動でユーザーの切り替えをするプログラムを作りました。



Cookies

リンク

2011/11/19(Sat) 10:45:56|NO.43112

キャプチャできるフリーソフトは存在するのだから、
HSPでもたぶん可能だと思うのは自然だと思うんですがねぇ。

WinAPI使うんならGetDCとかBitBltとか使えばできたはず。
作った気がする。



ken2

リンク

2011/11/19(Sat) 11:56:38|NO.43113

ウィンドウキャプチャの一例です。
詳しくは
http://chokuto.ifdef.jp/advanced/capturewindow.html

後は適当に。。。


; ======== API 関数の定義 ======== #uselib "user32.dll" #func GetDC "GetDC" int #func ReleaseDC "ReleaseDC" int,int #func GetForegroundWindow "GetForegroundWindow" #func GetClientRect "GetClientRect" int,int #func GetWindowRect "GetWindowRect" int,int #func MoveWindow "MoveWindow" int,int,int,int,int,int #func SetWindowLong "SetWindowLongA" int, int, int #func _EnableWindow "EnableWindow" int,int ;#cfunc GetWindowLong "GetWindowLongA" int, int #define objctl(%1,%2) _EnableWindow objinfo_hwnd(%1),%2 #uselib "gdi32.dll" #func BitBlt "BitBlt" int,int,int,int,int,int,int,int,int button "capture",*cap mes "キャプチャーしたいウィンドウをアクティブにしてから「capture」ぼたんを押す。” stop *cap gosub *preget BitBlt hdc2, 0, 0, sx, sy, hdcActive, 0, 0, $CC0020 ;buffer2にActWindowをcopy wx=ginfo_winx :wy=ginfo_winy screen 1,wx,wy gcopy 2,0,0,wx,wy title "キャプチャー画面" gsel 0,1 stop *preget gsel 0, -1 buffer 2,1,1 wait 50 GetForegroundWindow hwndActive = stat dim rectw, 4 GetWindowRect hwndActive, varptr(rectw) wx = rectw(2) - rectw(0) : wy = rectw(3) - rectw(1) dim rect, 4 ; RECT構造体 GetClientRect hwndActive, varptr(rect);FGWのクライアントエリア取得 sx = rect(2) - rect(0) : sy = rect(3) - rect(1) if sx=0:cy=0:else:cy=sy*320/sx if cy>265:cy=265 buffer 2, sx, sy, 0;現在の描画先バッファウィンドウをコピー先として初期化 GetDC hwndActive hdcActive = stat;ディバイスコンテキストのハンドル取得(hdc) hdc2=hdc ;buff2のhdc return



Cookies

リンク

2011/11/19(Sat) 12:48:40|NO.43114

>>ken2さん
ReleaseDC忘れてますよ〜



なたで

リンク

2011/11/19(Sat) 13:36:13|NO.43115

任意の座標にある1ドットのRGBの値を取得するだけなら実はこんな簡単にできます。
CreateDCとDISPLAYで検索してみると詳細がわかると思います。

#module #uselib "gdi32.dll" #cfunc PixelCreateDC "CreateDCA" sptr,nullptr,nullptr,nullptr #cfunc PixelGetPixel "GetPixel" sptr,sptr,sptr #func PixelDeleteDC "DeleteDC" sptr #deffunc getPixel int x,int y,local hdcDesktop,local colorref hdcDesktop = PixelCreateDC("DISPLAY") colorref = PixelGetPixel(hdcDesktop,x,y) color (colorref>>16)&0xff,(colorref>>8)&0xff,colorref&0xff PixelDeleteDC hdcDesktop return #global repeat wait 1 getPixel ginfo_mx, ginfo_my boxf loop



ken2

リンク

2011/11/19(Sat) 14:31:15|NO.43119

>なたでさん

オー、スマートですね。
getPixel使わせていただきます。

でもRとBは逆じゃないですか?



なたで

リンク

2011/11/19(Sat) 14:47:20|NO.43120

おお本当だ!
COLORREF型が0xRRGGBBだと勘違いしました。

こうですね。
color colorref&0xff,(colorref>>8)&0xff,(colorref>>16)&0xff

ご指摘ありがとうございます。



瑞穂

リンク

2012/1/24(Tue) 09:06:45|NO.44511

別の瑞穂です(笑)

ソースありがとうございました。
使わせて戴きます。
ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.