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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0319
wwアクティブウィンドウのタイトルを6解決


ww

リンク

2007/3/19(Mon) 20:18:49|NO.6433

私はHSPを使い始めて2,3日のド素人です。
アクティブになっているHSP以外のウィンドウのタイトルを取得するにはどうすればいいのでしょうか?
誰か教えてください。



この記事に返信する


GENKI

リンク

2007/3/19(Mon) 22:40:45|NO.6436

 標準命令だけでは難しい…というかむりです。
どなたかが作ったモジュールを利用するか、APIを駆使する必要があります。
いずれもあまりHSP初心者向きとは言えない方法です。
別の方法で考えるか、もう少しHSPに慣れてからのほうがいいかもしれません。

例えばこうすればタイトルの一部がわかっていれば正確なタイトルを取得できます。

#include "hspext.as" aplsel "H",a ;任意のウィンドウのタイトルの頭から数文字を指定する。 mes ""+refstr





と、書いてみたものの…こんなの回答になってないなー…。
一応、さくらさんところのモジュールで出来るような気がします。(出来たとしても初心者に扱えるかどうか…。)
ちなみに上級者向け回答だと、APIのGetForegroundWindowでアクティブなウィンドウのハンドルを取得してGetWindowTextでタイトル取得…かな。

うーむ、だめだ、どなたかフォローお願いします。m(_ _;)m



ww

リンク

2007/3/20(Tue) 11:58:04|NO.6439

ご回答ありがとうございます。
GetForegroundWindowでアクティブなウィンドウのハンドルは
#uselib "USER32.DLL"
#func GetForegroundWindow "GetForegroundWindow" GetForegroundWindow
ってやればstatに代入されるってことはわかるんですけど、
GetWindowTextってのはどう定義してどう使えばいいのかがわかりません。
教えてください。



Irisawa

リンク

2007/3/20(Tue) 14:53:00|NO.6441

GetForegroundWindowは必ず戻り値を受け取るので命令形式よりも関数形式(#cfunc)の方が
いいでしょう。
WinAPIはちょくとさんのページやVBのWinAPI関数説明サイトなどを見ればほとんどは
分かると思います(定数の説明などもあるので便利です)。

ちょくとのページ
http://yokohama.cool.ne.jp/chokuto/
Welcome to MASAPICO'S Page
http://nienie.com/~masapico/
WinAPI Database for VB Programmer
http://www.winapi-database.com/

など(他にもたくさんあるので探してみてください)。

使い方例


#uselib "user32.dll" #cfunc GetForegroundWindow "GetForegroundWindow" #cfunc GetWindowTextLength "GetWindowTextLengthA" int #func GetWindowText "GetWindowTextA" int, var, int exec "notepad.exe" hAct = GetForegroundWindow() len = GetWindowTextLength(hAct) sdim buf, len + 1 GetWindowText hAct, buf, len + 1 title buf stop



ww

リンク

2007/3/20(Tue) 15:51:31|NO.6443

関数形式ですか。どっかのページの説明が全部命令形式だったのでその通りやってました。
「ちょくとのページ」などを見ましたが、WinAPIってのは難しいですね〜。
やっぱりhsp始めて4日目の今の自分には無理っぽいので、また出直してからやります。
せっかく説明してくれたのにすいません。
本当にありがとうございました。



Kpan

リンク

2007/3/20(Tue) 20:20:52|NO.6444

ついで。
GetForegroundWindow関数+sendmsg命令 の組み合わせで。


#uselib "user32" #func GetForegroundWindow "GetForegroundWindow" #define WM_GETTEXT 0x000D sdim buf repeat await 2000 GetForegroundWindow sendmsg stat, WM_GETTEXT, 64, varptr (buf) mes buf loop



GENKI

リンク

2007/3/21(Wed) 21:46:48|NO.6470

ごめんなさい、HSP初心者の多言語ユーザーという落ちが読めませんでした。_| ̄|○ ハズカシ
すでに回答が出揃っているようなので、違う回答をひとつ。参考にどうぞ。

#include "user32.as" *main redraw 1 : await 17 : redraw 0 : color 255,255,255 : boxf : color : pos 0,0 GetForegroundWindow hnd = stat mes "アクティブウィンドウハンドル:" + hnd a = "" z = 128 GetWindowText hnd, varptr(a), z mes "アクティブウィンドウタイトル:" + a goto *main
commonフォルダにあるuser32.asには結構な数のAPI関数が登録されています。
ただ、このまま実行形式にするとファイルサイズがでかくなったと思うので、他の方がやっているように必要なAPIだけ登録したほうがいいと思います。



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