PDA

View Full Version : بدست آوردن مقدار رنگی پیکسل زیر کرسر ماوس



Ehsansh
پنج شنبه 15 تیر 1391, 11:32 صبح
سلام.میخوام یه برنامه بنویسیم مثل Pixie
کارش اینه که ماوس هر جا که بره حتی خارج از محیط برنامه، کد RGB رنگ اون پیکسل رو میده.
چطوری میتونم این کار بکنم؟

the king
پنج شنبه 15 تیر 1391, 16:13 عصر
سلام.میخوام یه برنامه بنویسیم مثل Pixie
کارش اینه که ماوس هر جا که بره حتی خارج از محیط برنامه، کد RGB رنگ اون پیکسل رو میده.
چطوری میتونم این کار بکنم؟

لطفا یک تایمر Timer1 روی فرم قرار دهید. موقع اجرای برنامه نگاهی به عنوان فرم بندازید :


Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Int32) As Int32
Private Declare Function GetDesktopWindow Lib "user32.dll" () As Int32
Private Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Int32, ByVal x As Int32, ByVal y As Int32) As Int32
Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Int32, ByVal hdc As Int32) As Int32

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim hWnd As Int32 = GetDesktopWindow()
Dim hDC As Int32 = GetDC(hWnd)
Dim c As Color = Color.FromArgb(GetPixel(hDC, MousePosition.X, MousePosition.Y))
c = Color.FromArgb(0, c.B, c.G, c.R)
ReleaseDC(hWnd, hDC)
Me.Text = c.ToString()
End Sub

ROSTAM2
پنج شنبه 15 تیر 1391, 16:41 عصر
مگه با Event --> MouseMove از شئ نمي شه استفاده كرد؟؟؟ چرا تايمر؟؟؟‌ ؟؟ ؟

the king
پنج شنبه 15 تیر 1391, 17:11 عصر
مگه با Event --> MouseMove از شئ نمي شه استفاده كرد؟؟؟ چرا تايمر؟؟؟‌ ؟؟ ؟

در عنوان سوال شون فرمودند ماوس هر جا که بره حتی خارج از محیط برنامه، وقتی ماوس جای دیگری Capture باشه رخدادی در برنامه ما
فراخوانی نمیشه. در ضمن جایی از صفحه که انیمیشن داره ماوس جابجا نمیشه اما رنگ ها باید عوض بشه.

Ehsansh
یک شنبه 18 تیر 1391, 17:37 عصر
لطفا یک تایمر Timer1 روی فرم قرار دهید. موقع اجرای برنامه نگاهی به عنوان فرم بندازید :


Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Int32) As Int32
Private Declare Function GetDesktopWindow Lib "user32.dll" () As Int32
Private Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Int32, ByVal x As Int32, ByVal y As Int32) As Int32
Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Int32, ByVal hdc As Int32) As Int32

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim hWnd As Int32 = GetDesktopWindow()
Dim hDC As Int32 = GetDC(hWnd)
Dim c As Color = Color.FromArgb(GetPixel(hDC, MousePosition.X, MousePosition.Y))
c = Color.FromArgb(0, c.B, c.G, c.R)
ReleaseDC(hWnd, hDC)
Me.Text = c.ToString()
End Sub



یعنی اولین باره یه سئوال پرسیدم اینقدر راحت یکی مارو به جواب رسوند. دمت گرم دادا... این حس رو با یک کلید تشکر نمیشد منتقل کرد واسه همین پست زدم :)

ebraham
شنبه 24 تیر 1391, 03:29 صبح
منهم هم کلید تشکر را زدم هم خواستم اینجا ازتون تشکر کنم واقعن کدتون عالی بود . ممنون.