Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Int32
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim hTargetWin As Long '対象のウィンドウのハンドル
Dim hTargetDC As Long 'デバイスコンテキストへのハンドル
'①
hTargetWin = WindowFromPoint(10, 10)
'②
hTargetDC = GetDC(hTargetWin)
Dim lngcolor As Long
Dim RGB As Color
'③
lngcolor = GetPixel(hTargetDC, 10, 10)
ReleaseDC(hTargetDC, hTargetWin)
End Sub
メッセージボックスにRGB値を表示させたいのですが出来ません。
ここからMsgboxを追加したらいいと思うのですが思うように出来ません。
開発環境は?
> Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
これは、VB6/VBAの場合の宣言ですね。
もしも VB.NET なら、
Public Structure Point
Dim X As Integer
Dim Y As Integer
End Structure
Public Declare Function WindowFromPoint Lib "user32" (ByVal Pnt As Point) As IntPtr
のようになるのでしょう。
> Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Int32
これは VB6/VBA、VB.NET いずれの宣言でもありませんね。
VB6/VBA だとしたら、
Public Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
でしょうし、VB.NET だとしたら、
Public Declare Function GetDC Lib "user32" (ByVal hWnd As IntPtr) As IntPtr
になるかと。
また、GetPixel の宣言も、VB6/VBA向けの記述になっているようです。
> ここからMsgboxを追加したらいいと思うのですが思うように出来ません。
追加したらまずいでしょう。
Timer で定期的に メッセージが上がって来たら、邪魔じゃないですか?
元ねた
http://madia.world.coocan.jp/vb/vb_bbs/200409_04090098.html
ッポイですね。
引用したならばそのようなコメントを入れるべきです。
> 開発環境
大事そうですね。
丸付き数字は機種依存文字です。Web上での使用は控えてください。
引用したことを記入せず、コメント不足ですいませんでした。
開発環境はVB.NET です。
たとえば、その情報をtextに保存する方法はどのようにすればいいんでしょうか?
時間に制約がなさそうですので
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcn7/html/vaconfileaccesswithvbnet.asp
あたりをじっくりと読まれることをお勧めします。
>開発環境
>>大事そうですね。
大事なことだと思いますが...
解決することができました。ありがとうございます。
Dim file As New System.IO.StreamWriter("c:\test.txt")
file.WriteLine("Here is the first line.")
file.Close()
例えばここにgetpixelで取得したRGB値を記入したいのですが、どのようにすればいいでしょうか?
> 例えばここにgetpixelで取得したRGB値を記入したいのですが
RGBを取得したい対象はドコでしょうか?
Bitmapであるならば、APIを使わなくても簡単にできるんですけど。。。
(Graphicsでもやろうと思えばできるかな?)
>開発環境
>>大事そうですね。
この発言は、自分の予想ではなく、相手に開発環境の明示を促すように書いたつもりでした。
明示しなきゃ解決までなかなか行きませんよといいたかったわけです。
>Blueさん返信ありがとうございます。
例えばデスクトップの画面(1280*1024)において(10,10)の位置のRGB値を取得するにはどのようにしたらいいでしょうか?
また、ゲーム等の画面(640*480)において(10,10)の位置のRGB値を取得するにはどのようにしたらいいでしょうか?
>RGB値を取得するにはどのようにしたらいいでしょうか?
元ネタでも、このスレでも既に魔界の仮面弁士さんが答えてらっしゃいますけど。
http://madia.world.coocan.jp/vb/vb_bbs/200409_04090098.html
> デスクトップの画面
APIでですが、
GetDisktopWindowとGetWindowDCを使えば、ディスクトップのデバイスコンテキストが取得できます。
> ゲーム等の画面
も、
FindWindowとか使って、ウィンドウハンドルを取得できれば、デバイスコンテキストは取得できます。
>RGB値を取得
とは、Rがいくつで、Gがいくつでということでしょうか?
GetPixelどのような値を返しているか分かればこれは簡単だと思いますけど。
すいません。まだまだ分からないことばかりでした。
このようにしてみたのですが
Public Function GetPixel( _
ByVal x As Integer, _
ByVal y As Integer _
) As Color
x = 100
y = 100
End Function
End Class
実行してもなにも起こらないのですがなぜでしょうか?
また、これで(100,100)のRGB値は取得できているのでしょうか?
引数とか戻り値とかAPI宣言と一致していますか?
hDC(デバイスコンテキスト)指定しなきゃ、どこにたいしてのRGB値なんだか分からないですよ。
> 引数とか戻り値とかAPI宣言と一致していますか?
と、思ったらAPIの使い方もなっていないようですが。。。
すいません。APIの使い方も分かりません。
HP(VB中学校)を参考に勉強を進めているのですが、まださっぱり分かりません。まず、言葉の意味から調べないといけないということが分かりました。ありがとうございました。
ツイート | ![]() |