ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 14:08

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年5月04日(日) 22:41 
皆様 はじめましてKoboと申します。
ABで組みだして2ヶ月くらいです。
過去N88時代にはよくプログラムを組んでいたのですが
Cに乗り遅れ、ポインタやら構造体やらを理解せずに来ました。
なんとなく理解はしてきてはいるのですが、
未だメモ帳から文字を拾得することすらままなりません。
昔は父と独学しておりましたが今は相談する父もなくなり、
私自身も歳を取り頭が固くなったせいか理解力も低下しております。
壁を乗り越えるか、頭皮を掻き破るのが先かという状態です。
前置きが長くなりましたが、下記コードと私に何が足りないのか
ご教授いただけないかと恥を忍んで投稿させていただきました。
何卒よろしくお願いします。

#N88BASIC

dim hwin as HWND,hcwin as HWND
dim pqr as *MSG

hwin=FindWindow("Notepad","無題 - メモ帳")
print hwin
hcwin=GetWindow(hwin,GW_CHILD)
print hcwin

GetMessage(pqr.message,hcwin,0,0)

print GetWord(pqr.message)

end

コンパイルすると
test3.abp(11) - "pqr" 参照方法が違います
test3.abp(13) - "pqr" 参照方法が違います
test3.abp(13) - "pqr.message" 無効な識別子です
となります。
おそらくMSG構造体の扱いと、GetMessage文の第一パラメーターの
理解ができていないからだと思うのですが
ヘルプと質問板を2週間毎日にらめっこしても解決の糸口すら
見つけることができません。


通報する
ページトップ
   
投稿記事Posted: 2008年5月05日(月) 00:44 
オフライン

登録日時: 2005年5月31日(火) 18:51
記事: 473
お住まい: 新潟県
> #N88BASIC
>
> dim hwin as HWND,hcwin as HWND
> dim pqr as *MSG
>
> hwin=FindWindow("Notepad","無題 - メモ帳")
> print hwin
> hcwin=GetWindow(hwin,GW_CHILD)
> print hcwin
>
> GetMessage(pqr.message,hcwin,0,0)
>
> print GetWord(pqr.message)
>
> end
>
> コンパイルすると
> test3.abp(11) - "pqr" 参照方法が違います
> test3.abp(13) - "pqr" 参照方法が違います
> test3.abp(13) - "pqr.message" 無効な識別子です
> となります。
> おそらくMSG構造体の扱いと、GetMessage文の第一パラメーターの
> 理解ができていないからだと思うのですが
ただの構造体ならドット演算子を使って書いても良いんですけど、構造体ポインタはアロー演算子を使わなければなりません。
コード:
pqr->message
参照方法が違いますっていうのはここら辺で怒られてるんですね。

ウィンドウから文字列を取得するには、GetMessage()関数じゃなくてGetWindowText()関数を使います。

実際に動かしてませんが、これはどうでしょう?
コード:
#N88BASIC

dim hwin as HWND,hcwin as HWND
dim text as LPSTR
dim len as Long

hwin=FindWindow("Notepad","無題 - メモ帳")
print hwin
hcwin=GetWindow(hwin,GW_CHILD)
print hcwin

len=GetWindowTextLength(hcwin)+1
text=calloc(len)
GetWindowText(hcwin,text,len)

print text

free(text)

end 


通報する
ページトップ
投稿記事Posted: 2008年5月05日(月) 22:41 
 7 様早速のご指導感謝いたします。
アロー演算子と言う物は初耳でした。今頑張って調べているとこです。
さて、賜りましたソースコードを実行してみた次第です。
「print text」で出力されるのは数値のみなのです。これ自体はポインタなのだろうと
「print GetWord(text)」としてみると出力されるのは決まった数値だけに
なってしました。アスキーコードでもなさそうです。

GetWindowTextLength で返ってくる値が「1」でした。
文で+1しているので実質「0」となっており、ヘルプから察するに長さの取得に
失敗しているものと理解しました。

GetWindowText 自体は色々なヘルプの回答から知識にはありましたが
解説文内に
「この関数は、WM_GETTEXTメッセージを使用してテキストを取得します。他のアプリケーションが所有するウィンドウのテキストは取得することができません。」
と、あり「メモ帳」が他のアプリケーションに当たるだろうと思い使用を避けておりました。
GetWindowTextLength の解説文にも同様の説明がありましたので、
それではないかと感じております。

別角度から理解を試みようと、「メモ帳」に文字を送ることは成功したのですが
関係のあるだろう文法を調べると、また元の文法に戻ってくると。
袋小路状態です。

①「メモ帳」は他のアプリケーションに当たるのでしょうか?
②上手く動かないことに対して、注目すべき点はあっているのでしょうか?

お時間があるときにご指導いただければと思います。
引き続き頭皮を削りつつ勉強しております。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年5月06日(火) 15:05 
オフライン

登録日時: 2005年5月31日(火) 09:39
記事: 35
お住まい: 岐阜
横から失礼します。

試してませんが、

GetWindowText(hcwin,text,len)

の行を

SendMessage(hcwin,EM_GETLINE, 0, text)

に変えて、

print text

の行を

print MakeStr(text)

とかに変えたら出来ませんか?


通報する
ページトップ
投稿記事Posted: 2008年5月06日(火) 16:33 
オフライン

登録日時: 2005年5月31日(火) 18:51
記事: 473
お住まい: 新潟県
> 「print text」で出力されるのは数値のみなのです。これ自体はポインタなのだろうと
> 「print GetWord(text)」としてみると出力されるのは決まった数値だけに
> なってしました。アスキーコードでもなさそうです。
あぁ、そうでした。printで出力するとポインタ自体(?)が表示されちゃうんですよね。
これはMakeStr関数を使ってString型に変換して表示します。

今度はちゃんと動かして確認しました。
コード:
dim hwin as HWND,hcwin as HWND
dim text as LPSTR
dim len as Long

hwin=FindWindow("Notepad","無題 - メモ帳")
print hwin
hcwin=GetWindow(hwin,GW_CHILD)
print hcwin

len=SendMessage(hcwin,WM_GETTEXTLENGTH,0,0)+1
text=calloc(len)
SendMessage(hcwin,WM_GETTEXT,len,text)

print MakeStr(text)

free(text)

end


通報する
ページトップ
投稿記事Posted: 2008年5月06日(火) 19:56 
7 様 situmon様
無事に出力ができました。
できた瞬間には、壁が崩れた勢いと自分のアホさ加減に笑いがでました。
SendMessage文のSendの意味からウィンドウに文字を送るだけの文だと
思っていました。
また、WM_***はまだ知らない高度な命令文だと思っていました。
ヘルプにあった「wMsg メッセージ コードを指定します。」が「WM_***」だとは・・・
なにやら壁が10枚くらい一気に抜けた感じです。
MakeStr に関しても指摘された瞬間に「あー・・見たことある あれか!」と
GetWord にとらわれて考えがそちらに向きませんでした。

おそらくは、初歩の初歩の「Hello World」レベルに親切にお答え頂け
ありがたい気持ちで一杯です。頂きました1文1文が大きな勉強になりました。
いま、行き詰る時も出てきますでしょうが、袋小路に陥ったときは
Send~の時を思い出して頑張ります。
乱文駄文 失礼いたしました。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot], Bing [Bot] & ゲスト[25人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean