24-08-13, 02:58 AM
MSDOS كتب :ممكن اضع طريقة أخرى
الطريقة باستخدام PostMessage
تعتمد الطريقة على ارسال رسالة الى التطبيق الهدف بدلالة عنوان نافذته
يوجد كودين، واحد لارسال الرسالة والآخر لاستقبال الرسالة
كود ارسال الرسالة: يكون في البرنامج اللي بيتحكم في البرنامج الآخر
كود :
Const WM_USER = &H400
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myColorDialog As New ColorDialog
If myColorDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim hwnd As Integer = FindWindow(vbNullString, "عنوان نافذة البرنامج الهدف")
If hwnd <> 0 Then
PostMessage(hwnd, WM_USER, myColorDialog.Color.ToArgb, 0)
End If
End If
End Sub
كود استقبال الرسالة: ويكون في البرامج اللي تستقبل الرسالة وتنفذ العملية اللي تريدها
كود :
Const WM_USER = &H400
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Select Case m.Msg
Case WM_USER
Me.BackColor = Color.FromArgb(m.WParam)
End Select
MyBase.WndProc(m)
End Sub
كيف الفكرة إن شاء الله سهلة ومفيدة.
وبعد اقول 10 / 10

