[ VB.NET ] شرح تشغيل برنامج في داخل برنامجك

تم تحميل الصفحة في 1,9591173 ثانية
شرح تشغيل برنامج في داخل برنامجك

Red Hat

ExpErt DeveloPer
rankrankrankrank
إنضم
8 سبتمبر 2013
المشاركات
1,932
الإعجابات
1,493
النقاط
113
كود Visual Basic
Public Class Form1
    Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
    Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Private Const WM_SYSCOMMAND As Integer = 274
    Private Const SC_MAXIMIZE As Integer = 61488
    Dim proc As Process

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        proc = Process.Start("C:\WINDOWS\notepad.exe")
        proc.WaitForInputIdle()

        SetParent(proc.MainWindowHandle, Me.Handle)
        SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
    End Sub
End Class

 

CorrM

Just a Programmer
rankrankrankrankrankrank
إنضم
27 ديسمبر 2013
المشاركات
3,591
الإعجابات
6,878
النقاط
113
العمر
21
الإقامة
Egypt
رد: شرح تشغيل برنامج في داخل برنامجك

الكود رائع جدا جدا

لاكن المشكله انه لا يقبل سوى تطبيقات النظام

او بالاحرى لا يقبل تطبيقات الدوت نت
 
إنضم
25 أبريل 2012
المشاركات
3,113
الإعجابات
2,535
النقاط
113
الإقامة
.~JORDAN~.
رد: شرح تشغيل برنامج في داخل برنامجك

بارك الله فيك اخي العزيز ، كود رائع وجميل ، اضافة الى API's ... :42:

وبالنسبة للاخ CorrM ، لماذا لا تقبل تطبيقات الدوت نت ؟
 
إنضم
25 أبريل 2012
المشاركات
3,113
الإعجابات
2,535
النقاط
113
الإقامة
.~JORDAN~.
رد: شرح تشغيل برنامج في داخل برنامجك

الكود رائع جدا جدا

لاكن المشكله انه لا يقبل سوى تطبيقات النظام

او بالاحرى لا يقبل تطبيقات الدوت نت
عند التدقيق مجددا ، لا يوجد سبب منطقي حتى لا تقبل تطبيقات الدوت نت

لكن الخطا الذي حصل لديك بان الفنكشن "WaitForInputIdle" هي لا تفي بالغرض ، لذلك علينا استخدام IsWindowVisible API

ليصبح الكود كالتالي

كود:
    <DllImport("User32")> _
    Public Shared Function SetParent(hWndChild As IntPtr, hWndNewParent As IntPtr) As IntPtr
    End Function

    <DllImport("User32")> _
    Public Shared Function IsWindowVisible(hWnd As IntPtr) As Boolean
    End Function

    Private Sub Form_Load() Handles MyBase.Load
        Dim Proc As Process = Process.Start("C:\My.Net_Application.exe")

        Do Until IsWindowVisible(Proc.MainWindowHandle)
            Application.DoEvents()
        Loop

        SetParent(Proc.MainWindowHandle, Me.Handle)
    End Sub
لا تنسى بان تغلق البروسس الذي بداته = Form_Closing/Closed Event
 

CorrM

Just a Programmer
rankrankrankrankrankrank
إنضم
27 ديسمبر 2013
المشاركات
3,591
الإعجابات
6,878
النقاط
113
العمر
21
الإقامة
Egypt
رد: شرح تشغيل برنامج في داخل برنامجك

عند التدقيق مجددا ، لا يوجد سبب منطقي حتى لا تقبل تطبيقات الدوت نت

لكن الخطا الذي حصل لديك بان الفنكشن "WaitForInputIdle" هي لا تفي بالغرض ، لذلك علينا استخدام IsWindowVisible API

ليصبح الكود كالتالي

كود:
    <DllImport("User32")> _
    Public Shared Function SetParent(hWndChild As IntPtr, hWndNewParent As IntPtr) As IntPtr
    End Function

    <DllImport("User32")> _
    Public Shared Function IsWindowVisible(hWnd As IntPtr) As Boolean
    End Function

    Private Sub Form_Load() Handles MyBase.Load
        Dim Proc As Process = Process.Start("C:\My.Net_Application.exe")

        Do Until IsWindowVisible(Proc.MainWindowHandle)
            Application.DoEvents()
        Loop

        SetParent(Proc.MainWindowHandle, Me.Handle)
    End Sub
لا تنسى بان تغلق البروسس الذي بداته = Form_Closing/Closed Event
فعلا يا محمود تفكيرك صواب

لقد استبدلتها من قبل بـ Api و فعلا الكود اشتغل و رائع

و شكرا لأفاده الاخرين و تنبيهى

 

Red Hat

ExpErt DeveloPer
rankrankrankrank
إنضم
8 سبتمبر 2013
المشاركات
1,932
الإعجابات
1,493
النقاط
113
رد: شرح تشغيل برنامج في داخل برنامجك

الكود رائع جدا جدا

لاكن المشكله انه لا يقبل سوى تطبيقات النظام

او بالاحرى لا يقبل تطبيقات الدوت نت
شكرا على مرورك على تنبيه مفيد
 

Red Hat

ExpErt DeveloPer
rankrankrankrank
إنضم
8 سبتمبر 2013
المشاركات
1,932
الإعجابات
1,493
النقاط
113
رد: شرح تشغيل برنامج في داخل برنامجك

عند التدقيق مجددا ، لا يوجد سبب منطقي حتى لا تقبل تطبيقات الدوت نت

لكن الخطا الذي حصل لديك بان الفنكشن "WaitForInputIdle" هي لا تفي بالغرض ، لذلك علينا استخدام IsWindowVisible API

ليصبح الكود كالتالي

كود:
    <DllImport("User32")> _
    Public Shared Function SetParent(hWndChild As IntPtr, hWndNewParent As IntPtr) As IntPtr
    End Function

    <DllImport("User32")> _
    Public Shared Function IsWindowVisible(hWnd As IntPtr) As Boolean
    End Function

    Private Sub Form_Load() Handles MyBase.Load
        Dim Proc As Process = Process.Start("C:\My.Net_Application.exe")

        Do Until IsWindowVisible(Proc.MainWindowHandle)
            Application.DoEvents()
        Loop

        SetParent(Proc.MainWindowHandle, Me.Handle)
    End Sub
لا تنسى بان تغلق البروسس الذي بداته = Form_Closing/Closed Event
شكرا لك على مرور يا غالي بنسبة الاغلاق البروسس اسف لا انتبه له بسب سرعة
 

zOeCher Master

Beginner Developer
rank
إنضم
10 مايو 2016
المشاركات
9
الإعجابات
6
النقاط
3
العمر
22
الإقامة
Syria
ممكن الكود الكامل الذي يقبل برامج ال .net
لان ماعرفت اعدل عليه
 

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 1 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل