[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/04/24(Mon) 12:46
投稿者名:ジュン
Eメール:
URL :
タイトル:
すべて選択(青色状態)の確認
よろしくお願いいたします。

ホームページを POSTMESSAGE(IE_HWND,&H111,&HA044,0)  により
すべて選択(青色状態)にしています。
すべて選択した場合に青色状態(選択状態)になているか調べたいのですが
調べるにはどのようにすれば確認できますか。
ご指導を、よろしくお願いいたします。

投稿時間:2006/04/24(Mon) 14:11
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: すべて選択(青色状態)の確認
未確認ですが、EM_GETSEL では取得できませんか?

投稿時間:2006/04/24(Mon) 15:51
投稿者名:ジュン
Eメール:
URL :
タイトル:
Re^2: すべて選択(青色状態)の確認
花ちゃん さん
ご返答下さいましてありがとうございました。 
お世話になります。
おかげ様で足がかりをつかむ事ができました。

調べて下記にしてみました。

EM_GETSEL = &HB0
EM_GETSEL を送れば、現在選択されているテキストの位置を知ることができるとありました。
例:開始文字位置(0),と終了文字位置(10)にしてみました。

        RET = POSTMESSAGE(IE_HWND,&H111,&HA044,0) 'すべて選択
    lngRet = SendMessage(IE_HWND, &HB0 , 0, 10)

疑問点
すべて選択されている場合でも、すべて選択されていない場合でも関係なく
lngRetには数値が代入されました。
すべて選択されている場合、すべて選択されていない場合の区別は
lngRetでは確認できないのでしょうか。
すべて選択(有/無)区別の確認につきまして何か考えれれます事がありましたら
宜しくお願い致します。

投稿時間:2006/04/24(Mon) 16:15
投稿者名:ジュン
Eメール:
URL :
タイトル:
Re^3: すべて選択(青色状態)の確認
追記しました。
現在選択されている’テキスト’の位置とありましたので直接ホームページからは
すべて選択の区別(すべて選択されているかいないか)は
確認できないと思ってよいのでしょうか。

投稿時間:2006/04/24(Mon) 18:50
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: すべて選択(青色状態)の確認
逆にお聞きしますが、RET = POSTMESSAGE(IE_HWND,&H111,&HA044,0) ですべて
選択した時に部分的にしか選択できないような場合があるのでしょうか?

すべて選択されているか、いないかの2つしか答えがないのなら
EM_GETSEL で、選択範囲のスタートが 0 で エンド が 0 以上ならすべて選択されて
いると判断してよいのでは。

>     lngRet = SendMessage(IE_HWND, &HB0 , 0, 10)

上記では当然取得できません。

Private Declare Function SendMessageRef Lib "user32.dll" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal MSG As Long, wParam As Long, lParam As Long) As Long
Private Const EM_GETSEL = &HB0


    Dim Ret As Long
    Dim StrIndex As Long
    Dim EndIndex As Long
    Ret = SendMessageRef(IE_HWND, EM_GETSEL, StrIndex, EndIndex)
    Debug.Print StrIndex, EndIndex

投稿時間:2006/04/24(Mon) 22:05
投稿者名:ジュン
Eメール:
URL :
タイトル:
Re^4: すべて選択(青色状態)の確認
花ちゃん さん
ご返答ありがとうございます。
少し手間どいまして遅くなり申し訳ありませんでした。
詳細なご説明をして頂きお礼を申し上げます。
> RET = POSTMESSAGE(IE_HWND,&H111,&HA044,0)
> 部分的にしか選択できないような場合があるのでしょうか?につきましては
’すべて選択されているか’又は’すべて選択されていないか’の
どちらかです。すみませんでした。

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'テストソース
Private Declare Function APIFINDWINDOW Lib "user32" Alias "FindWindowA" (
ByVal LPCLASSNAME
As String, ByVal LPWINDOWNAME As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (B
yVal hWnd As Long,
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessageRef Lib "user32.dll" Alias "SendMessageA&q
uot; (ByVal hWnd As
Long, ByVal MSG As Long, wParam As Long, lParam As Long) As Long
Private Const EM_GETSEL = &HB0

Private Sub Form_Load()

    Dim Ret As Long
    Dim StrIndex As Long
    Dim EndIndex As Long
    Dim IE_HWND As Long

IE_HWND = APIFINDWINDOW("IEFrame", vbNullString)
If IE_HWND <> 0 Then
          Ret = PostMessage(IE_HWND, &H111, &HA044, 0) 'すべて選択
   Ret = SendMessageRef(IE_HWND, EM_GETSEL, StrIndex, EndIndex)
    Debug.Print StrIndex, EndIndex
    
   End If

End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ご提供して下さいましたソースよりテストソースを作成実行してみました。
> Debug.Print StrIndex, EndIndex
              @ A
              52            52
              50            0
              50            50
              54            54
              90            90

容量の多い"IEFrame"でも容量の少ない"IEFrame"でも@、Aはあまり変わらず
上記の開始文字位置と終了文字位置表示は正しいのでしょうか。
又すべて選択を実行しなくともスタートが 0 で エンド が 0 にはなりませんでした。

もし何かお気づきの点がありましましたら、ご指導を願えれば幸いです。
宜しくお願い致します。

投稿時間:2006/04/24(Mon) 23:11
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: すべて選択(青色状態)の確認
> もし何かお気づきの点がありましましたら、ご指導を願えれば幸いです。

解決策は ?? ですが
どうも、取得しているハンドルがまずいようですね。

投稿時間:2006/04/25(Tue) 00:06
投稿者名:ジュン
Eメール:
URL :
タイトル:
Re^6: すべて選択(青色状態)の確認
花ちゃん さん
ご返答下さいましてありがとうございました。
> どうも、取得しているハンドルがまずいようですね。
すべて選択の情報は直接webページからでは取得はできなく
あくまで’テキスト’からの取得ハンドルによって取得される
ものと認識しました。勉強になりました。
いろいろとご指導下さいまして本当にありがとうございました。

投稿時間:2006/04/25(Tue) 20:18
投稿者名:ジュン
Eメール:
URL :
タイトル:
Re^5: すべて選択(青色状態)の確認
お陰様で解決する事ができました。
お礼を申しあげます。
> どうも、取得しているハンドルがまずいようですね。
"Internet Explorer_Server" の取得ハンドルにしますと
’すべて選択されているか’又は ’すべて選択されていないか’
の切り分けができるようになりました。
ありがとうございました。

投稿時間:2006/04/28(Fri) 15:15
投稿者名:ジュン
Eメール:
URL :
タイトル:
再度に渡り質問させてもらいました。
お世話になります。
再度に渡り質問させてもらいました。
’すべて選択されているか’又は’すべて選択されていないか’の
2通りどちらかの確認につきまして、StrIndex, EndIndexの情報からは
判断することはできませんでした。

質問
取得するハンドルは"Internet Explorer_Server" で良いでしょうか。
宜しくお願い致します。


Private Declare Function APIFINDWINDOW Lib "user32" Alias "FindWindowA" (
ByVal lpClassName
As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (B
yVal hWnd As Long,
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessageRef Lib "user32.dll" Alias "SendMessageA&q
uot; (ByVal hWnd As
Long, ByVal MSG As Long, wParam As Long, lParam As Long) As Long
Private Const EM_GETSEL = &HB0
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (B
yVal hWnd As Long,
ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindowEx& Lib "user32" Alias "FindWindowExA&q
uot; (ByVal
hWndParent&, ByVal hWndChildAfter&, ByVal lpszClass$, ByVal lpszWindow$)
Private Declare Function FindWindow& Lib "user32" Alias "FindWindowA"
(ByVal lpClassName$,
ByVal lpWindowName$)


Private Sub Command1_Click()
    Dim Ret As Long
    Dim StrIndex As Long
    Dim EndIndex As Long
    Dim IE_HWND As Long

IE_HWND = FindWindow("IEFrame", vbNullString)
If IE_HWND <> 0 Then
          Ret = SendMessage(IE_HWND, &H111, &HA044, 0) 'すべて選択
  
   child = FindWindowEx(IE_HWND, 0, "Shell DocObject View", vbNullString)
child = FindWindowEx(child, 0, "Internet Explorer_Server", vbNullString)
  
   Ret1 = SendMessageRef(child, EM_GETSEL, StrIndex, EndIndex)
  
Text1 = Str$(StrIndex)
Text2 = Str$(EndIndex)
Text3 = Str$(child)

If StrIndex = 1 Then Ret = PostMessage(IE_HWND, &H111, &HA220, 0)

    Debug.Print StrIndex, EndIndex
    
    End If
End Sub

投稿時間:2006/04/29(Sat) 23:41
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
回答ではありませんが
>取得するハンドルは"Internet Explorer_Server" で良いでしょうか。
"Internet Explorer_Server" はデスクトップのウィンドウの子ウィンドウのクラス名なので
当然無理ですね。

すべて選択されているかどうかを取得しなければならない理由等によっては代替策が
あるかも知れません。

投稿時間:2006/04/30(Sun) 00:38
投稿者名:ジュン
Eメール:
URL :
タイトル:
Re: 回答ではありませんが
花ちゃん さん
度々、ご返答くださいましてありがとうございます。
"Internet Explorer_Server"で無いことが確認できました。お礼を申し上げます。
>すべて選択されているかどうかを取得しなければならない理由等
申し遅れましたが現在はホームページ゛をすべて選択→コピー→VBのテキストに転送しています。
しかしホームページ゛が画面分割されている場合はすべて選択してもされませんのでコピーできず
テキストに転送できません。そこで画面分割されている場合は転送を実行する前に転送する画面の
所をクリックする必要をメッセージ表示出来ればと思っています。
なにか代替策はありませんでしょうか。ご指導願えれば幸いです。宜しくお願い致します。

投稿時間:2006/04/30(Sun) 08:23
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^2: 回答ではありませんが
> なにか代替策はありませんでしょうか。ご指導願えれば幸いです。宜しくお願い致します。

下記にここのフレームページを取得するサンプルが投稿されているので
それを使用して各フレームページを取得してから別々にコピーされたら
いかがでしょうか?

hhttp://www.bcap.co.jp/hanafusa/logbbs/wforum.cgi?mode=allread&no=3822

当サイトのトップページなら hhttp://www.bcap.co.jp/hanafusa/ を指定すると
/hanafusa/index.html
/hanafusa/menu.htm
/hanafusa/category.htm
/hanafusa/top.htm
/hanafusa/top01.htm
のように取得できます。
これなら隠れている部分も確実の取得する事ができますが。

投稿時間:2006/04/30(Sun) 11:05
投稿者名:ジュン
Eメール:
URL :
タイトル:
Re^3: 回答ではありませんが
花ちゃん さん
何度も、ご返答くださいましてありがとうございました。
>hhttp://www.bcap.co.jp/hanafusa/logbbs/wforum.cgi?mode=allread&no=3822
のホームページを紹介して頂きまして、お礼を申し上げます。
拝見いたしましたが今の自分ではフレームで区切られたブラウザーについて
は難しく全体を整理する事はできませんでした。せっかく紹介して頂きましたが
申し訳ありませんでした。何度か読み返えしを繰り返してみたいと思います。
いろいろとご丁寧なご指導をして頂きまして本当にありがとうございました。

投稿時間:2006/04/30(Sun) 13:26
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4: 回答ではありませんが
Form1 に WebBrowser コントロールを貼り付けて下記コードを試して見て下さい。

Option Explicit
Private Sub Form_Load()
    WebBrowser1.Navigate2 "hhttp://www.bcap.co.jp/hanafusa/"
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Debug.Print pDisp.Document.location.href
End Sub

投稿時間:2006/04/30(Sun) 14:30
投稿者名:ジュン
Eメール:
URL :
タイトル:
Re^5: 回答ではありませんが
花ちゃん さん
ご返答くださいましてありがとうございます。
> WebBrowser1.Navigate2 "hhttp://www.bcap.co.jp/hanafusa/"
WebBrowser1の所でコンパイル エラー変数が定義されていません。とメッセージされました。
変数の定義がありましたらご指導願えればと思います。
まだ、基本的なことが分かっていませんので宜しくお願い致します。

投稿時間:2006/04/30(Sun) 16:13
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^6: 回答ではありませんが
> > WebBrowser1.Navigate2 "hhttp://www.bcap.co.jp/hanafusa/"
> WebBrowser1の所でコンパイル エラー変数が定義されていません。とメッセージされました。

No.6376 の投稿の最初にも書いておりましたが。

メニューのプロジェクト→コンポーネント→からMicroSoft Internet Controls にチェック
を入れて WebBrowser1 コントロール(地球の絵のアイコン)を Form1 に貼り付けていますか?

投稿時間:2006/04/30(Sun) 17:33
投稿者名:ジュン
Eメール:
URL :
タイトル:
Re^7: 回答ではありませんが
花ちゃん さん
ご返答くださいましてありがとうございました。
> メニューのプロジェクト→コンポーネント→からMicroSoft Internet Controls にチェック
> を入れて WebBrowser1 コントロール(地球の絵のアイコン)を Form1 に貼り付けていますか?
お陰様で動作する事ができるようになりました。
当サイト様のトップページ hhttp://www.bcap.co.jp/hanafusa/ を指定してみました。
/hanafusa/category.htm
/hanafusa/top01.htm
/hanafusa/top.htm
/hanafusa/menu.htm
/hanafusa/
のように隠れている部分も確実に取得する事ができ画面分割が確認できました。
この度は長くに渡りご指導をして頂き大変お手数をお掛けいたしました。
今後も当サイト様のホームページを利用させて頂く機会がありましたら宜しくお願い致します。
本当にありがとう御座いました。お礼を申し上げます。