- ベストアンサー
初めてのソースコードでのAPI使用についての疑問
- 初めてAPIを使用してプログラミングしている際、クラス化やウィンドウハンドルについて理解できていない状況です。
- このソースコードを改善することは可能か疑問です。
- "AppActivate Label4.Caption"のような書き方が必要な理由や、より効果的な書き方について教えて欲しいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
試していないので、うまくいくかわからないですけど・・・ Label4.Caption = ActiveTitle = :'Dim ActiveTitle As Stringをプログラムの外で宣言 として sub command1_Click() AppActivate ActiveTitle end sub とすれば、よいのではないでしょうか? また、 Sub XXX() を Function XXX() に変更して Label4.caption = を XXX = に変更しアクティブなウィンドウのタイトルを取得したいところで ActiveTitle = XXX 'ActiveTitle は 上記と同様 としてもいいと思います。 Label4.Caption = _ '※→納得いかないところ Left(strWindowText, _ InStr(strWindowText, _ vbNullChar) - 1) の文の意味がわからない? ということではないですよね? APIの資料を見ていないので違うかもしれませんが、 lngResultはタスクIDではなかったような気がします。 >lngResult = GetWindowText( lngWindowHandleForeground, strWindowText,Len(strWindowText)) ??私の勘違いかもしれませんが、Len(strWindowText)の部分は、格納する変数の長さではなかったでしたっけ? これだと 0ですよね? Dim strWindowText As String * 256 とかになってるのでしょうか? strWindowTextにタイトルを格納し、残りの部分(タイトル名の終わりのみ?)にNullが入るので Label4.Caption = Left(strWindowText, InStr(strWindowText, vbNullChar) - 1) でNullを取り除いているような気がするのですが・・・ 間違っていたらすみません。 他の方の回答がなく、私の憶測が間違っているようなら、また回答します。 質問の意味が違うようなら補足してください。
その他の回答 (1)
- sha-girl
- ベストアンサー率52% (430/816)
Label4.Caption = _ '※→納得いかないところ Left(strWindowText, _ InStr(strWindowText, _ vbNullChar) - 1) ですが、VBはstring型(LPCSTR型)で文字列を宣言しますが C言語では配列でとります。 例えば char str[100]; (vbだと dim str as string*100みたいな感じ) とすると半角100文字分の文字列のスペースが確保できます。 vbのstring型では最初に何文字分データがあるという情報がはいっていますが Cのchar型にははいっていません。そこで終端文字というのが あり、その文字が来ればその文字列は終了という意味になります。 その終端文字というのがvbNullCharにあたります。 strWindowText が "abcdefg(終端文字)hijklmn"だった場合 Left(strWindowText, InStr(strWindowText, vbNullChar) - 1) とすると strWindowText が "abcdefg"となるのです。 #あとクラス化ではなくサブクラス化では?
お礼
すみません。ちょっと私にはむずかしいです。多分、strWindowText が配列か どうかでしょうか?私が勝手に削除し(^^ゞ、文字型にしてしまいましたm(__)m。 回答ありがとうございました。
お礼
回答ありがとうございました。 まだ自宅ではないので試せていないのですが、上記の方法試してご報告します。 >Dim strWindowText As String * 256 とかになってるのでしょうか? でした(^^ゞ。必要ないと思って* 256 はとってしまったのです。 よくわかりましたね。私はAPIが全然わからなくて、資料も300の技しかないですし。またよろしくお願いします。
補足
言われたとおりの方法でできました! またよろしくお願いします。