tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルSpy++に於いて
記事No3331
投稿日: 2006/03/20(Mon) 16:06
投稿者VBN5
[OSのVer]:Windows    [VBのVer]:VB.NET
 Ver=XP                       VB.NET=2005
Spy++に於いて
ファインダーツールをクリックし、調査対象のウィンドウの
タイトルバーまでドラッグしますとウィンドウの周りに枠線
が描かれます。これはどの様にすれば枠線を描く事がで
きるようになりますか教えて頂ければと願います。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: Spy++に於いて
記事No3334
投稿日: 2006/03/20(Mon) 17:02
投稿者魔界の仮面弁士
案1)中央が四角く透過されたフォームを重ねる。→TransparencyKey プロパティ, TopMostプロパティ
案2)中央が四角く刳り貫かれたフォームを重ねる。→Region プロパティ, TopMostプロパティ
案3)デバイスコンテキストを取得してから直接描画する。→ Graphics.FromHdc メソッド

[ツリー表示へ]
タイトルRe^2: Spy++に於いて
記事No3343
投稿日: 2006/03/20(Mon) 19:32
投稿者VBN5
案によるご回答ありがとうございした。
提供して頂きました案について調べてみましたが良くわかりませんでした。
もし、枠線を描く方法例がありましたら宜しくお願い致します。

[ツリー表示へ]
タイトルRe^3: Spy++に於いて
記事No3344
投稿日: 2006/03/20(Mon) 19:38
投稿者YAS
>タイトルバーまでドラッグしますとウィンドウの周りに枠線
>が描かれます。これはどの様にすれば枠線を描く事がで
>きるようになりますか教えて頂ければと願います。
>よろしくお願いします。

枠線の描き方だけ知りたいのですか?それともドラッグのところからですか?
対象のウィンドウはどのように取得できているのでしょうか。(ウィンドウハンドルですか?)

[ツリー表示へ]
タイトルRe^4: Spy++に於いて
記事No3345
投稿日: 2006/03/20(Mon) 19:59
投稿者VBN5
ご返答ありがとうございました。
マウスポインタの位置によるウィンドウハンドルは取得できています。
知りたいと思いますのは取得されましたウィンドウハンドルの範囲を四角枠線で描画したいのです。
そしてマウスポインタの位置から外れますと四角枠線での描画はしない状態にしたいと思っています。
宜しくお願い致します。

[ツリー表示へ]
タイトルRe^5: Spy++に於いて
記事No3346
投稿日: 2006/03/20(Mon) 21:37
投稿者魔界の仮面弁士
> マウスポインタの位置によるウィンドウハンドルは取得できています。
GetDC API 、GetDCEx API 、GetWindowDC API のいずれかを用いる事で、
ウィンドウのハンドルからデバイスコンテキストのハンドルを得る事ができます。

デバイスコンテキストさえ得る事ができれば、後は GDI 系の API で描画するか、
もしくは先の 案3 で Dim g As Graphics = Graphics.FromHdc(hTargetDC) にて描画できますね。

でもって、案1, 案2 で実装するなら、GetWindowRect API でウィンドウのサイズを得て、
そのサイズに合わせた「穴あきForm」を用意して、目的の座標に配置すれば OK かと。

> そしてマウスポインタの位置から外れますと四角枠線での描画はしない状態にしたいと思っています。
であれば、案1 / 案2の方が楽かも。枠線代わりに使っていた Form を非表示にするだけですし。

[ツリー表示へ]
タイトルRe^6: Spy++に於いて
記事No3348
投稿日: 2006/03/20(Mon) 22:00
投稿者VBN5
ご返答ありがとうございました。
穴あきFormについてお聞きしたいのですが、
穴あきFormの穴あき部分は半透明にするFormを用意すると考えればよいのでしょうか。
また、穴あきFormの枠も半透明になりませんでしょうか。
宜しくお願いします。

[ツリー表示へ]
タイトルRe^7: Spy++に於いて
記事No3350
投稿日: 2006/03/20(Mon) 22:36
投稿者YAS
> また、穴あきFormの枠も半透明になりませんでしょうか。

Me.Opacity = 0.5

とすれば枠も何も丸ごと半透明になります。

[ツリー表示へ]
タイトルRe^7: Spy++に於いて
記事No3351
投稿日: 2006/03/20(Mon) 22:54
投稿者魔界の仮面弁士
> 穴あきFormの穴あき部分は半透明にするFormを用意すると考えればよいのでしょうか。
や、少し違います。半透明にするのは、Opacity プロパティですが、先の 案1 に
書いたのは、指定した色の部分をくりぬくための「TransparencyKey プロパティ」です。

で…もしも Win9x にも対応させたいのであれば、案1 は使えないので、案2 で代用する、と。

[ツリー表示へ]
タイトルRe^8: Spy++に於いて
記事No3354
投稿日: 2006/03/20(Mon) 23:20
投稿者VBN5
ご返答ありがとうございました。
Win9x にも対応させたいと思いますので中央が四角く刳り貫かれたフォームを重ねる
案2にしたいと思います。 枠線を描く枠は一定でありませんので「刳り貫かれたForm」
を用意する為の記述はどの様にすれば良いか教えて頂ければ幸いです。
宜しくお願い致します。

[ツリー表示へ]
タイトルRe^9: Spy++に於いて
記事No3355
投稿日: 2006/03/20(Mon) 23:32
投稿者YAS
ここのTipsが参考になると思います。

hhttp://www.bcap.co.jp/hanafusa/dotnet/toumei.htm

[ツリー表示へ]
タイトルRe^10: Spy++に於いて
記事No3356
投稿日: 2006/03/20(Mon) 23:39
投稿者VBN5
ご返答ありがとうございました。
> hhttp://www.bcap.co.jp/hanafusa/dotnet/toumei.htm
は参考にさせてもらいます。ありがとうございました。

[ツリー表示へ]
タイトルRe^10: Spy++に於いて
記事No3358
投稿日: 2006/03/21(Tue) 02:57
投稿者魔界の仮面弁士
> ここのTipsが参考になると思います。
> hhttp://www.bcap.co.jp/hanafusa/dotnet/toumei.htm
これは、案1 の TransparentKey を用いる方法ですね。

>> Win9x にも対応させたいと思いますので中央が四角く刳り貫かれたフォームを重ねる
>> 案2にしたいと思います。

こんな感じかな。

Partial Public Class Form1
    Private Waku As Form
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Waku = New Form()
        Waku.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Waku.BackColor = Color.Yellow
        Waku.Size = New Size(300, 300)

        Dim R As New Region(New Rectangle(0, 0, 300, 300))
        R.Exclude(New Rectangle(10, 10, 280, 280))
        Waku.Region = R

        Waku.Show()
    End Sub
End Class

[ツリー表示へ]
タイトルRe^11: Spy++に於いて
記事No3359
投稿日: 2006/03/21(Tue) 03:04
投稿者YAS
> これは、案1 の TransparentKey を用いる方法ですね。

おっちょこちょいで申し訳ありません。

[ツリー表示へ]
タイトルRe^12: Spy++に於いて
記事No3360
投稿日: 2006/03/21(Tue) 08:20
投稿者VBN5
ご回答ありがとうございました。
希望するものと同じものでした。

>こんな感じかな。

>Partial Public Class Form1
>    Private Waku As Form
>     ・
>     ・
>End Class

一つお聞きしたいのですが、マウスポインタの位置(ウインドウハンドル)から外れますと
四角枠線の描画を消去して前の状態に戻したいと思っていますが可能でしょうか。
もし可能でしたらどの様にして前の状態に戻すことが出来ますか教えて頂けますと幸いです。
宜しくお願い致します。

[ツリー表示へ]
タイトルRe^13: Spy++に於いて
記事No3361
投稿日: 2006/03/21(Tue) 09:55
投稿者YAS
> 一つお聞きしたいのですが、マウスポインタの位置(ウインドウハンドル)から外れますと
> 四角枠線の描画を消去して前の状態に戻したいと思っていますが可能でしょうか。

マウスポインタの位置がウィンドウから外れたらフォームを非表示にするなりアンロードすれば
よいと思います。

Form1.Close もしくは Form1.Hide

[ツリー表示へ]
タイトルRe^14: Spy++に於いて
記事No3368
投稿日: 2006/03/21(Tue) 19:16
投稿者VBN5
ご返答ありがとうございました。
> Form1.Close もしくは Form1.Hide
参考例では
Button1をクリックしますと黄色で四角く刳り貫かれた枠になります。
Button2ボタンを設けButton2をクリックして黄色で四角く刳り貫かれた
枠を消去するようなことは可能でしょうか。

[ツリー表示へ]
タイトルRe: Spy++に於いて
記事No3369
投稿日: 2006/03/21(Tue) 21:26
投稿者YAS
>Button1をクリックしますと黄色で四角く刳り貫かれた枠になります。
>Button2ボタンを設けButton2をクリックして黄色で四角く刳り貫かれた
>枠を消去するようなことは可能でしょうか。

変なことかいてすみません。

Waku.Close()

でした。
Button2.Clickで消したければ
    Private Sub Button2_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button2.Click
        Waku.Close()
    End Sub
です。
枠に見えますが,要はただのフォームなんですから。

[ツリー表示へ]
タイトルRe^2: Spy++に於いて
記事No3370
投稿日: 2006/03/21(Tue) 21:57
投稿者VBN5
ご回答ありがとうございました。
> Waku.Close()
Button2ボタンを設けButton2をクリックして黄色で四角く刳り貫かれた
枠を消去できるようになりました。後はSpy++と同じ様にマウスポインタ
の移動したウインドウハンドルの範囲を枠表示出来る様に挑戦してみたい
と思います。

[ツリー表示へ]
タイトルRe^3: Spy++に於いて
記事No3371
投稿日: 2006/03/22(Wed) 02:16
投稿者VBN5
魔界の仮面弁士さん、YAS さん
何度にも渡り指導して下さいましてありがとうございました。
ご質問ですがWakuで横、縦サイズは下記の方法でわかりましたが
>Waku.Size = New Size(300, 300)
X,Y の起点位置を設定する場合の記述はどの様になりますでしょうか。
度々申し訳ありません。宜しくお願いいたします。

[ツリー表示へ]
タイトルRe^4: Spy++に於いて
記事No3372
投稿日: 2006/03/22(Wed) 02:51
投稿者魔界の仮面弁士
> X,Y の起点位置を設定する場合の記述はどの様になりますでしょうか。
フォームの位置を指定するには、幾つかの方法があります。


《デスクトップ作業域(タスクバー等を除いた領域)を基準にする場合》
方法1) SetDesktopLocation メソッドにて、デスクトップ作業域の座標を指定する。
方法2) DesktopLocation プロパティに、デスクトップ作業域の座標を Point 構造体で指定する。

《デスクトップ全体を基準にする場合》
方法3) Location プロパティに、表示先の座標を Point 構造体で指定する。
方法4) Leftプロパティ、Topプロパティに、表示先の座標を整数で指定する。

[ツリー表示へ]
タイトルRe^5: Spy++に於いて
記事No3373
投稿日: 2006/03/22(Wed) 03:26
投稿者VBN5
ご返答ありがとうございました。
下記などで使用していますので X,Y の起点位置を設定する方法は3)を希望します。
宜しくお願いいたします。

Type POINTAPI
    X As Long
    Y As Long
End Type

Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

    Call GetWindowRect(Form1.hwnd, nRect)

マウスポインタにより Poi.xとPoi.yに座標が入る
      GetCursorPos Poi
         ・
         ・
  Call GetWindowRect(Form1.hwnd, nRect)

[ツリー表示へ]
タイトルRe^6: Spy++に於いて
記事No3374
投稿日: 2006/03/22(Wed) 04:26
投稿者魔界の仮面弁士
> 下記などで使用していますので X,Y の起点位置を設定する方法は3)を希望します。
> 宜しくお願いいたします。
いや、「宜しく」って…何をです? (^^;

見た感じ、質問投稿でも解決報告でも無さそうですが……。


> Type POINTAPI
それは、旧VBの構文ですよね。

ここは VB.NET 用の掲示板なので、VB6 や VBA の話題ならば、
VB2.0〜6.0用掲示板の方をご利用下さい。

[ツリー表示へ]
タイトルRe^7: Spy++に於いて
記事No3375
投稿日: 2006/03/22(Wed) 05:27
投稿者VBN5
申し訳ありませんでした。
Spy++に於いて枠線を描く以外はVB6でしたが枠線を描く為、今回は
VB6からVB.NET2005にアップデートして新規に行いました。
方法3)の構造説明と思いましたが誤ってVBを記述してしまいました。
また、宜しくお願いいたしますにつきましては
X,Y の起点位置を設定する場合の記述についての意味でしたが
説明など不十分な所があり大変申し訳ありませんでした。
色々と、ご指導下さいましてありがとうございました。

[ツリー表示へ]