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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0215
くえアクティブウインドウの色取得6未解決


くえ

リンク

2007/2/15(Thu) 17:23:51|NO.5707

HSP側から、別のアプリケーションを操作するプログラムを作っています。
現在アクティブになっているウインドウのドットの色を取得したいのですが、
どのようにしたらいいのでしょう?
例えば、HSPから、ウインドウズに付いているグラフィック編集ソフトの
ペイントを起動して、その編集中のペイントのある座標の色を取得したいのです。
どうも、pgetでは出来ないようなのですが。。。
よろしくお願いします。



この記事に返信する


ふほ

リンク

2007/2/16(Fri) 09:16:58|NO.5714

ぱっと思いついた事を書きますが、

altキーを押しながらprintscreenキーを押すとアクティブウインドウのスクリーンショットが
クリップボードに入るので、これを利用してですね。

windowsapiのほうからキーを押して、クリップボードから画像を受け取って、
それからpgetすると言うのはどうでしょうか。

読んだ瞬間に思ったことを書いただけで詳しく調べてないので、
もっと簡単な方法があるかもしれませんが(笑



にょろろ

リンク

2007/2/16(Fri) 16:25:18|NO.5724

ありがとう御座います。
ただ、処理がかなり重くなりそうですね^^;
今まで、UWSCってソフトのマクロを書いて動かしてたのですが、
あれは裏に行ったアプリケーションには、コマンドが送れないので、
なんとか、HSPでウインドウのハンドルを取得して、そこにコマンド
を送り続ければ、操作したいアプリが裏に行っても出来るかなと思った
のですが。。。



Irisawa

リンク

2007/2/16(Fri) 18:48:49|NO.5730

WinAPIのGetPixelを使用すればいいのでは?


#uselib "user32.dll" #cfunc FindWindow "FindWindowA" sptr, sptr #cfunc GetDC "GetDC" int #uselib "gdi32.dll" #cfunc GetPixel "GetPixel" int, int, int #define ctype GetRValue(%1) ((%1 ) & 0xff) #define ctype GetGValue(%1) ((%1 >> 8) & 0xff) #define ctype GetBValue(%1) ((%1 >> 16) & 0xff) randomize color rnd(256), rnd(256), rnd(256) boxf 50, 0, 100, 50 color 0, 0, 0 rgb = GetPixel(GetDC(FindWindow("hspwnd0", 0)), 50, 0) mes strf("R: %x", GetRValue(rgb)) mes strf("G: %x", GetGValue(rgb)) mes strf("B: %x", GetBValue(rgb)) stop



くえ

リンク

2007/2/16(Fri) 19:56:43|NO.5731

ありがとう御座います。
テストプログラムを書いてみました。
ペイントを起動して、赤、青、緑のボックスを書いて、動かしてみたのですが、
うまく動かないようです。
左と上のメニューの部分は考慮して、座標を見てるんですが。。。
度々すみません。。。


#include "hspext.as" #uselib "user32" #func keybd_event "keybd_event" int, nullptr, int #cfunc FindWindow "FindWindowA" sptr, sptr #cfunc GetDC "GetDC" int #uselib "gdi32.dll" #cfunc GetPixel "GetPixel" int, int, int #define ctype GetRValue(%1) ((%1 ) & 0xff) #define ctype GetGValue(%1) ((%1 >> 8) & 0xff) #define ctype GetBValue(%1) ((%1 >> 16) & 0xff) *main screen 0,640,480 aplsel "無題 - ペイント" if stat: { mes "ペイントを起動してください" wait 100 end } repeat 640 rgb = GetPixel(GetDC(FindWindow("無題 - ペイント", 0)), cnt+70, 100) pos 0,0 cls mes "x="+cnt mes strf("R: %x", GetRValue(rgb)) mes strf("G: %x", GetGValue(rgb)) mes strf("B: %x", GetBValue(rgb)) wait 10 loop



Irisawa

リンク

2007/2/16(Fri) 22:29:38|NO.5736

まず、ペイントのクラス名は mspaintapp です。
ただし、実際のところはその子に AfxFrameOrView42u というクラス名のウィンドウがあり
更にその子の Afx:1000000:8 というクラス名のウィンドウに描画されているようですね。
(↑WinXPの場合)

いろいろ複雑な構造のようで、ちょっと上手く取得できませんでした。
調べれば分かるかも知れませんがこれ以上はちょっと面倒なので、申し訳ありませんが
対応できません。
他によい情報を持っている人がいらっしゃいましたら補足お願いします。



くえ

リンク

2007/2/17(Sat) 01:57:18|NO.5739

ああ、すみません。
完全に勘違いしてたみたいですね。
引数はクラス名ですか。
お手数おかけしたようで、申し訳ありません。
ありがとうございました。



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