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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0607
ふ〜みんウインドウの捕獲方法6解決


ふ〜みん

リンク

2006/6/7(Wed) 18:22:00|NO.1014

aplselを使ってウィンドウを捕獲するにあたり、例えば「○○ - Mozilla Firefox」のような、
タイトルの前の部分が変わってしまい、後半部が固定というタイプのウィンドウを
タイトルの前半部に関わらず、確実に捕獲するほうほうってないですかね?



この記事に返信する


シリル

リンク

2006/6/7(Wed) 20:48:03|NO.1015

具体的にどのようなことをしたいのかがよく分からないので
なんともいえませんが、例えばMozillaのウィンドウを捕獲したいのなら、
aplsel "Mozilla",0

とすれば普通に可能なのではないでしょうか。



ふ〜みん

リンク

2006/6/7(Wed) 23:08:00|NO.1017

ウィンドウのタイトルがMozillaで始まってる場合はそれで捕獲できますが、
実際は「サイトの名前」+「Mozilla」ってゆー順番になってるので
aplsel "Mozilla",0

では捕獲できないんですよ。



Irisawa

リンク

2006/6/8(Thu) 01:51:52|NO.1021

Mozilla Firefoxをインストールしていないので確認していませんがaplselはFindWindowを
内部的に呼んでいるだけなので直接、FindWindowを呼び出しちゃいましょう。
Mozilla Firefoxのクラス名はMozillaWindowClassのようです。

http://www.towofu.net/mt/archives/2005/06/22_23_29.php


#uselib "user32.dll" #cfunc FindWindow "FindWindowA" sptr, sptr hMozilla = FindWindow("MozillaWindowClass", 0) stop

これでZ順で一番近いMozilla Firefoxのウィンドウハンドルを取得できるはずです。
(複数起動している場合はZ順で一番近いウィンドウのウィンドウハンドル以外は取得でき
ません)
ウィンドウハンドルさえ取得できればウィンドウの操作はできると思います。
ただ、ブラウザの場合は上手く操作できないかも?
(IEは内部コンポーネントにはCOM経由でないとアクセスできないようになっておりGeckoも
同様かも)



naznyark

リンク

2006/6/8(Thu) 02:27:42|NO.1022

タイトル名を指定せずにウィンドウを検索して
自前でタイトル名を調べる。

#include "hspext.as" screen 1, 320, 240, 1 : title "スクリーン1 - HSP : testwindow" screen 2, 320, 240, 1 : title "スクリーン2 - window"; これはヒットしない screen 3, 320, 240, 1 : title "testwindow - abcd スクリ−ン3" screen 4, 320, 240, 1 : title "スクリーン4 - testwindow" screen 5, 320, 240, 1 : title "スクリーン5 サンプル HSPtestwindow" screen 6, 320, 240, 1 : title "test window xyz スクリーン6"; これはヒットしない sdim name, 1024 sdim list_find, 1024, 64 count_find=0 repeat wait 0 aplsel "", cnt if stat=1 : break name=refstr if instr(name, 0, "testwindow") != -1 { list_find(count_find)=name count_find++ } loop gsel 0, 1 mes "== found window ==" repeat count_find mes list_find(cnt) loop mes "== end =="



ふ〜みん

リンク

2006/6/8(Thu) 13:07:42|NO.1026

Irisawaさん
なるほど、ありがとうございます。
ただ、これだとクラス名を調べる必要があるんですよね?
今はまだそこまでできないんで、もっと勉強して今後の参考にさせてもらいます。


naznyarkさん
まさにこんな感じです。
ありがとうございます。
window nameを""で指定する発想は思いつきませんでした。
でも、言われてみるとそうですね。



分かりにくい質問内容に丁寧に答えていただき、みなさんありがとうございます。
もっと、何をしたいのかをちゃんと伝えられるよう努力します。
ありがとうございました。



Irisawa

リンク

2006/6/8(Thu) 14:37:53|NO.1027

ウィンドウクラス自体は起動してこちらのプログラムで取得できます。

http://www.nitoyon.com/vc/tips/gui/select_window.htm

あと、MozillaWindowClassはGeckoエンジン部分のクラス名みたいですね。
Mozilla Firefoxのフレーム部分はMozillaUIWindowClassみたいです。


#uselib "user32.dll" #cfunc FindWindow "FindWindowA" sptr, sptr #cfunc FindWindowEx "FindWindowExA" int, int, sptr, sptr, ; Mozilla Firefox フレーム hMozillaUI = FindWindow("MozillaUIWindowClass", 0) ; Gecko エンジン本体 hMozilla = FindWindowEx(hMozillaUI, 0, "MozillaWindowClass", 0) stop



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