تم تحميل الصفحة في 1,5071135 ثانية
شرح شامل عن دوال : Multi Desktop API
إنضم
13 مارس 2013
المشاركات
2,820
الإعجابات
3,081
النقاط
113










السلام عليكم اعضاء وزوار المنتدى

في اطار حمة تنشيط قسم VB.NET رأيت ان اشرح موضوع ممتع وهو حول دوال التحكم في الـ Desktop
منذ دخولي المنتدى وانا اهوى دخول بروفايلات المبرمجين ههه حتى انني قربت احفظ كل مواضيعهم بالتفصيل . المهم وانا ادور في المواضيع صادفني رد الاستاذ Simon Benyo حول دوال Multi Desktop حيث قال انها خاصية مخفية في الوندوز بعدها بدأت رحلتي في البحث عن هذه الدوال و التحكم فيها و قد رأيت انعدام شرحها في المنتديات العربية و ندرتها في المنتديات الاجنبية
المهم قبل الدخول في الموضوع من الافضل
تحميل مكتبة لدوال API و شرحها بالتفصيل

لتحميل المكتبة : Download
لاجهزة 64 بت حمل هذا الملف وافتح به المكتبة : Download

ماهو الديسكتوب ؟
هو مثل ما نعرفه جميعا سطح المكتب العادي الذي يشمل جميع النوافذ المفتوحة بدا من
شريط المهام و ايقونات سطح المكتب .... (Explorer) الى باقي النوافذ المعتادة

واذا تم انشاء ديسكتوب جديد و فتح فانه يفتح معك ديسك توب فارغ تجد فيه الا الخلفية
يمكنك فتح فيه (Explorer) لاظهار الايقونات و شريط المهام ثم تعلم عليه بشكل عادي كانك فتحت الجهاز من جديد ثم في اي وقت تريد تقدر ترجع لدسكتوب قديم و ارجاع جميع النوافذ التي فتحتها سابقا و يمكنك انشاء عدد كبير من الدسك توب بكل سهولة

كيف يتم انشاء ديسك توب جديد ؟
الدالة التي تنشأ ديسك توب جديد تسمى : CreateDesktopA
نبحث عن هذه الدالة في المكتبة لنرى :


البرماتر الأول lpszDesktop :
وهو اسم الديسك توب وللاشارة كل ديسك توب له اسم يميزه و الديسكتوب الرئيسي الذي تستعمله عندما تفتح الكمبوتر اسمه : Default
البرامتر الخامس dwDesiredAccess :
وهوخصائص التحكم التي يمكنك الوصول اليها عن طريق مقبض الديسكتوب المرجع من هذه الدالة وسوف نستعمل GENERIC_ALL التي تعطينا جميع الصلاحيات لهذا الديسكتوب و قيمته &H10000000
باقي البرمترات لا تهمنا يمكن وضع قيمتها nothing او 0
والدالة ترجع لنا بمقض الديسكتوب الذي يمكننا من استعمال الديسكتوب من خلال دوال الديسك توب الاخرى
وقد شرحت سابقا ماهو المقبض ويمكنك متابعة الشرح :
http://www.dev-point.com/vb/t524924.html
الآن بعدما انشأنا الديسكتوب
كيف يمكننا اظهار وتشغيله الديسكتوب ؟
يمكنك اظهار الديسكتوب عن طريق دالة : SwitchDesktop



الدالة لها برامتر وحيد وهو مقبض الديسكتوب الذي ارجعته دالة انشاء الدسكتوب

CreateDesktopA ولكن اذا اردنا جلب مقبض دسكتوب موجود مسبقا و التحكم به سوف نسنعمل دالة OpenDesktopA التي سيلي شرحها لاحقا


تطبيق : انشاء ديسكتوب و اظهاره

كود Visual Basic
Public Class Form1
    'تعريف الدالتين CreateDesktopA و SwitchDesktop
    Declare Function CreateDesktopA Lib "user32" Alias "CreateDesktopA"  (ByVal lpszDesktop As String, ByVal lpszDevice As String, ByVal  lpDevMode As IntPtr, ByVal dwFlags As IntPtr, ByVal dwDesiredAccess As  IntPtr, ByVal lpSecAttrib As IntPtr) As IntPtr
    Declare Function SwitchDesktop Lib "user32" (ByVal deskh As IntPtr) As Boolean
    'ثابت التحكم الكامل بالديسكتوب
    Const GENERIC_ALL = &H10000000

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim DesktopHandle As Long = CreateDesktopA("MyNewDeskTop",  Nothing, Nothing, Nothing, GENERIC_ALL, Nothing) 'انشاء ديسكتوب جديد
        SwitchDesktop(DesktopHandle) ' تشغيل الديسكتوب و  اظهاره
    End Sub
End Class


جلب قائمة الديسكتوب التي تم انشائها:
سنستعمل في جلب قائمة الديسكتوب الدالة EnumDesktopsA



البرمتر الأول hwinsta :
مقبض الجلسة او المستخدم التي فيه هذه الديسكتوب و يمكن جلبه عن طريق دالة GetProcessWindowStation التي لا تحتاج اي برمترات
البرمتر الثاني lpEnumFunc :
وهو ادرس دالة CallBack التي سوف تعود لنا باسم الديسكتوب في برمتراتها
وفي تعريف دالة EnumDesktopsA يجب ان نعرف بروتوكول دالة الـ CalBack
تعريف بروتوكول الدالة و هو تبيان برمتراتها و حجم كل برمتر من الدالة
ويمكنك ذلك هكذا :

كود Visual Basic
        Private Delegate Function EnumCallBack(ByVal DesktopName As String, ByVal lParam As IntPtr) As Boolean

ملاحظة : حجم متغيرات الـ CallBack لا يجب ان تغييره اما اسمه و اسم البرمترات يمكنك ذلك
عند استدعاء دالة CallBack ستجد اسم الديسكتوب الأول في البرمتر الاول وبعدها يجب تمرير القيمة 1 او true للانتقال للديسكتوب الذي بعده و استدعاء نفس الدالة حتى انتهاء الديسكتوبات

كود Visual Basic
        Return True

ويجب تعريف بروتوكول دالة الـ callBack قبل تعريف دالة EnumDesktopsA
(ستفهم هذا بعد التطبيق العملي)

البرامتر الأخير :
لايهمنا :15:

تطبيق : جلب قائمة الديسكتوب ووضعها في ListBox :

كود Visual Basic
Public Class Form1
    'تعريف الدوال
    Private Declare Function GetProcessWindowStation Lib "User32" () As IntPtr
     Declare Auto Function EnumDesktopsA Lib "User32" (ByVal hWinSta As  IntPtr, ByVal edp As EnumCallBack, ByVal lParam As IntPtr) As Boolean
    'تعريف بروتوكل دالة الـ CallBack
    Delegate Function EnumCallBack(ByVal DesktopName As String, ByVal lParam As IntPtr) As Boolean

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        EnumDesktopsA(GetProcessWindowStation, AddressOf EnumPrc, Nothing) 'استدعاء دالة EnumDesktopsA 
    End Sub
    Function EnumPrc(ByVal DesktopName As String, ByVal lParam As IntPtr) As Boolean
        ListBox1.Items.Add(DesktopName) ' اضافة اسم الدسكتوب الى الليست بوكس
        Return True ' اعادة قيمة true لكي ينتقل الى الدسكتوب الذي بعده
    End Function
End Class


جلب مقبض ديسكتوب موجود مسبقا عن طريق دالة OpenDesktopA


البرمتر الأول lpszDesktop :
وهو اسم الديسكتوب الذي نريد جلب مقبضه
البرمتر الثاني :
لا نحتاجه :15:
البرمتر الثالث :
لا يهم ايضا :15:
البرمتر الرابع dwDesiredAccess :
وهو نفسه البرمتر الاخير في CreateDesktopA وشرحناه سابقا
وطبعا الدالة ترجع مقبض الديسكتوب و بمكنك التحكم فيه ايضا بدوال التحكم بالديسكتوب


فتح برنامج جديد في الديسكتوب :
اول شيء نفعله بعد انشاء الديسكتوب هو فتح بروسس explorer.exe لكي يظهر ايقونات سطح المكتب و شريط المهام و غيرها
وفي هذا سنستعمل دالة CreateProcessA




البرمتر الثاني :
وهو مسار الملف الذي نريد نشغيله في الديسكتوب
البرمتر الخامس :
نضعه true :15:

البرمتر التاسع :
وهو معلومات عن طريقة تشغيل البروسس التي ستضعها في ستركشر STARTUPINFO ما نحتاجه في هذا التركشر هو lpDesktop و وضع فيه اسم الديسكتوب المراد تشغي البروسس فيه
البرماتر العاشر : وهو يعود لنا بمعلومات البروسس في ستركشر PROCESS_INFORMATION
(بالمثال سيتضح المقال :30:)

تطبيق : فتح بروسس Explorer في ديسكتوب باسم 'MyNewDesktop'

كود Visual Basic
Imports System.Runtime.InteropServices.Marshal
Public Class Form1
    'تعريف الدوال
    Private Declare Function GetProcessWindowStation Lib "User32" () As IntPtr
     Declare Auto Function EnumDesktopsA Lib "User32" (ByVal hWinSta As  IntPtr, ByVal edp As EnumCallBack, ByVal lParam As IntPtr) As Boolean
    Private Declare Function CreateProcess Lib "kernel32" _
    Alias "CreateProcessA" _
    (ByVal lpAppName As String, _
    ByVal lpCommandLine As String, _
    ByVal lpProcessAttributes As Long, _
    ByVal lpThreadAttributes As Long, _
    ByVal bInheritHandles As Long, _
    ByVal dwCreationFlags As Long, _
    ByVal lpEnvironment As Long, _
    ByVal lpCurrentDirectory As Long, _
    ByVal lpStartupInfo As STARTUPINFO, _
    ByVal lpProcessInformation As PROCESS_INFORMATION) As Long
    'تعريف الستركشرات
    Structure STARTUPINFO
        Public cb As Long
        Public lpReserved As String
        Public lpDesktop As String
        Public lpTitle As String
        Public dwX As Long
        Public dwY As Long
        Public dwXSize As Long
        Public dwYSize As Long
        Public dwXCountChars As Long
        Public dwYCountChars As Long
        Public dwFillAttribute As Long
        Public dwFlags As Long
        Public wShowWindow As Long
        Public cbReserved2 As Long
        Public lpReserved2 As Long
        Public hStdInput As Long
        Public hStdOutput As Long
        Public hStdError As Long
    End Structure
    Structure PROCESS_INFORMATION
        Public hProcess As Long
        Public hThread As Long
        Public dwProcessId As Long
        Public dwThreadID As Long
    End Structure
    'تعريف بروتوكل دالة الـ CallBack
    Delegate Function EnumCallBack(ByVal DesktopName As String, ByVal lParam As IntPtr) As Boolean

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        EnumDesktopsA(GetProcessWindowStation, AddressOf EnumPrc, Nothing) 'استدعاء دالة EnumDesktopsA 
    End Sub
    Function EnumPrc(ByVal DesktopName As String, ByVal lParam As IntPtr) As Boolean
        If DesktopName = "MyNewDeskTop" Then 'اذا كان اسم هذا الدسكتوب هو MyNewDeskTop
            Dim st As New STARTUPINFO ' تعريف الستركشر 
            st.cb = SizeOf(st)
            st.lpDesktop = DesktopName 'وضع اسم الدسك توب في التركشر
            Dim PI As PROCESS_INFORMATION
             CreateProcess(Nothing, "c:\windows\explorer.exe", Nothing, Nothing,  True, Nothing, Nothing, Nothing, st, PI) 'تشغيل العملية في الديكستوب
        End If
        Return True ' اعادة قيمة true لكي ينتقل الى الدسكتوب الذي بعده
    End Function
End Class





وأخير بعد تم شرح أغلب دوال التحكم بالديسكتوب سأضع بين ايديك برنامج MultiDesktop Manger من برمجتي المتواضعة وفيه ملخص لكل ما تعلمناه في هذا الدرس





الموضوع من كتابتي من الصفر و من تعبي ، طلبي لكل شخص استفاد ان ينشر الموضوع على اوسع نطاق حتى ولو بنسخه ولصقه باي منتدى آخر ولا افرض عليك ذكر الحقوق لك الحرية التامة ، هدفي الوحيد هو اثراء المحتوى العربي ، وآسف على أي اخطاء املائة او برمجية
وأخيرا الاهداء :
U N C O D E R
Simon-Benyo
Native Call_
بيبرس شومن
JAAS
Z3r0n3
والى كل من تعلمت منه وافادني :30:
والسلام عليكم و رحمة الله تعالى وبركاته
 

CorrM

Just a Programmer
rankrankrankrankrankrank
إنضم
27 ديسمبر 2013
المشاركات
3,676
الإعجابات
7,016
النقاط
113
العمر
21
الإقامة
Egypt
رد: شرح شامل عن دوال : Multi Desktop API

بدون كلام بدون تعقيب بدون اى شئ انت رائع و مبدع

يختم بختم التميز
 
إنضم
10 مارس 2011
المشاركات
9,125
الإعجابات
11,898
النقاط
113
الإقامة
Zaregoto
رد: شرح شامل عن دوال : Multi Desktop API

طرح روعة لتعرف المبرمجين عليه
فعلاً شي جديد رح يفتح افاق على كل المبرمجين
كنت افكر بطرخ هذا الشيء لكنك سبقتني :yaho:
المهم ساحاول لاحقاً طرح امور مفصلة عن هذا الموضوع
شرح روعة و طرح متعوب عليه و مميز
شكراً لك
:42:
 
إنضم
13 مارس 2013
المشاركات
693
الإعجابات
602
النقاط
93
الإقامة
Ntdll.dll
رد: شرح شامل عن دوال : Multi Desktop API

بارك الله فيك ... تستحق لقب مبرمج محترف و متواضع :637477:
موضوع مفيد للمبتدئين و المحترفين ... جاري تقييمك إن أمكن يا بطل :42:
 
إنضم
18 يونيو 2014
المشاركات
209
الإعجابات
267
النقاط
63
الإقامة
أ‡أ،أ…أ£أ‡أ‘أ‡أٹ
رد: شرح شامل عن دوال : Multi Desktop API

بارك الله فيك

دوال Desktop رائعة

لكنها معقدة فيما يتعلق بفتح العمليات
حيث يجب أن تفتح العملية في سطح المكتب المطلوب كي يظهر :ohmygod:

تم تجربة البرنامج، يحصل معي خطأ ويعمل بشكل جزئي فقط
(غالبًا الخطأ في تشغيل العملية)

هذا سرد للدوال المتخصصة للتعامل مع Desktop والنوافذ التي بها
كود:
CloseDesktop
CloseWindowStation
CreateDesktop
CreateWindowStation
EnumDesktops
EnumDesktopWindows
EnumWindowStations
GetProcessWindowStation
GetUserObjectInformation
OpenDesktop
OpenInputDesktop
OpenWindowStation
SetProcessWindowStation
SetUserObjectInformation
SwitchDesktop
صار من الممكن إنشاء سطوح مكاتب :149:

:330:

طرح روعة لتعرف المبرمجين عليه
فعلاً شي جديد رح يفتح افاق على كل المبرمجين
كنت افكر بطرخ هذا الشيء لكنك سبقتني :yaho:
المهم ساحاول لاحقاً طرح امور مفصلة عن هذا الموضوع
شرح روعة و طرح متعوب عليه و مميز
شكراً لك
:42:
وأنا مثلك :330:
 
إنضم
12 سبتمبر 2013
المشاركات
1,169
الإعجابات
1,307
النقاط
113
الإقامة
StartUp
شرح رائع من شخص الرائع
صراحتاً يستحق الموضوع المميز
عاشت إيدك حبيبى
جارى القيام بالواجب
 
إنضم
13 مارس 2013
المشاركات
2,820
الإعجابات
3,081
النقاط
113
رد: شرح شامل عن دوال : Multi Desktop API

شكرا لمروركم جميعا :15: نورتو الموضوع
yones7x
حتى انا كنت اظنها معقدة لكن بعد عدة محاولات فهمتها
فقط حاول استخدام دالة CreateProcessA وحدها بدون ما تدخلها في اي ديسكتوب خارجي وستفهمها
+ 4 برمترات التي شرحتها مهمة و يجب ان تضعها مثل الشرح اما الباقي يمكنك وضعها nothing :10:
+
البرنامج يعمل عندي بدون أخطاء ، تأكد جيدا من لي عندك :30:
 

DR-WoWo

مُراقب عام تطوير المواقع
طاقم الإدارة
إنضم
4 أغسطس 2011
المشاركات
11,483
الإعجابات
16,203
النقاط
113
الإقامة
مكة المكرمة
رد: شرح شامل عن دوال : Multi Desktop API

ماشاء الله تبارك الرحمن

شرح مميز للدوال يا صديقي

استفدت كثير من موضوعك

جااري قيام بواجب :637477:
 

-DelFord Art-

.:: Legendary Designer ::.
rankrankrankrankrankrank
إنضم
15 أبريل 2013
المشاركات
4,758
الإعجابات
9,073
النقاط
113
العمر
23
الإقامة
جمهورية العرآق.
رد: شرح شامل عن دوال : Multi Desktop API

وعليكم السلام ,

يا اخي احب الشيء الجديد
وخصوصا من تحت اديك :17:
مبدع بمعنى الكلمة شرح مفيد
وسهل الفهم استفدت منه يا غالي
شكرا لك واتمنى توآصل في رحلة
شورحآت الــ API :17:

احلى تقييم + فايف ستآرز
( مع اني عآرفك ما تهتم لها :15: )

تحيآتي لك

:9:

 
إنضم
11 يناير 2012
المشاركات
7,483
الإعجابات
8,340
النقاط
113
الإقامة
04
رد: شرح شامل عن دوال : Multi Desktop API

شكرا لك صديقي دائما مواضيع قوية وشروحات جيدة
سأحتفض بدرس مع لقبلو حتى أراجعههم أشكرك خويا
:248:
 
إنضم
13 مارس 2013
المشاركات
2,820
الإعجابات
3,081
النقاط
113
رد: شرح شامل عن دوال : Multi Desktop API

وعليكم السلام ,

يا اخي احب الشيء الجديد
وخصوصا من تحت اديك :17:
مبدع بمعنى الكلمة شرح مفيد
وسهل الفهم استفدت منه يا غالي
شكرا لك واتمنى توآصل في رحلة
شورحآت الــ API :17:

احلى تقييم + فايف ستآرز
( مع اني عآرفك ما تهتم لها :15: )

تحيآتي لك

:9:

اهم شيء انكم استفدتم :15:
شكرا لمروركم :30:
 
إنضم
18 يونيو 2014
المشاركات
209
الإعجابات
267
النقاط
63
الإقامة
أ‡أ،أ…أ£أ‡أ‘أ‡أٹ
رد: شرح شامل عن دوال : Multi Desktop API

شكرا لمروركم جميعا :15: نورتو الموضوع
yones7x
حتى انا كنت اظنها معقدة لكن بعد عدة محاولات فهمتها
فقط حاول استخدام دالة CreateProcessA وحدها بدون ما تدخلها في اي ديسكتوب خارجي وستفهمها
+ 4 برمترات التي شرحتها مهمة و يجب ان تضعها مثل الشرح اما الباقي يمكنك وضعها nothing :10:
+
البرنامج يعمل عندي بدون أخطاء ، تأكد جيدا من لي عندك :30:
نعم، أعرف هذه الدالة، تطبيقها أسهل في الأوتوإت

نظرًا لأن آخر بارمترين تم عمل لهما ثابت

الأول والذي يمثل البارمتر الأخير: tagPROCESS_INFORMATION
والذي يحوي الـ Structure التالي:
كود:
"hwnd hProcess;hwnd hThread;int ProcessID;int ThreadID"
حيث يتم استدعائه بالدالة DllStructCreate بوضع الثابت بداخله أو القيمة الأصلية في الكود

وأيضًا للبارمتر ما قبل الأخير، وهو الثابت tagSTARTUPINFO
والذي يحتوي الـ Structure:
كود:
"int [COLOR=DarkGreen]Size[/COLOR];ptr [COLOR=Red]Reserved1[/COLOR];ptr [COLOR=DarkGreen]Desktop[/COLOR];ptr [COLOR=Red]Title[/COLOR];int X;int Y;int XSize;int  YSize;int XCountChars;" & _
    "int YCountChars;int FillAttribute;int  Flags;short ShowWindow;short Reserved2;ptr Reserved3;int StdInput;" &  _
    "int StdOutput;int StdError"
حيث يتم وضع حجم الهيكل في Resercved1
ووضع القيمة المخرجة لاسم سطح المكتب المطلوب في Title

أو يمكن إبقاء Structure كما هو واستخدام دالة DllStructSetData
في تعديل المدخلات المطلوبة في الهيكل بدون أخطاء
بعمل التالي:
كود:
DllStructSetData([COLOR=Red]$tStartup[/COLOR], '[COLOR=Blue]Size[/COLOR]', DllStructGetSize([COLOR=Red]$tStartup[/COLOR]))
DllStructSetData([COLOR=Red]$tStartup[/COLOR], '[COLOR=Blue]Desktop[/COLOR]', [COLOR=DarkGreen]$pText[/COLOR])
حيث $tStartup تمثل Structure المراد تعديله
والذي باللون الازرق للموقع المراد تعديله في الـ
Structure
أما بالأخضر pText$ يمثل مخرجة دالة CreateString والتي تعطي اسم لسطح المكتب

والـ Structures في الأوتوإت لآخر بارمترين مشابه لما وضعته في شرحك :10:
ومطابق للذي في c++، والسبب أن الأوتوإت مبنية عليه :330:

والمشكلة ليست في المعرفة أو التطبيق، لكن المشكلة في صعوبة الحفظ :ohmygod:
كما أن تصميم الدوال معقد نوعًا ما للدخول الكبير في الـ Structures واتصالات DLL

يمكن التسهيل على المطورين بعمل مكتبات جاهزة تحوي هذه الأشياء
ويتبقى على المطور تنفيذ دوال بسيطة فقط دون الدخول في تعقيدات

وآسف على التعقيد في كتابة هذا الرد :30:
 
إنضم
13 مارس 2013
المشاركات
2,820
الإعجابات
3,081
النقاط
113
رد: شرح شامل عن دوال : Multi Desktop API

نعم، أعرف هذه الدالة، تطبيقها أسهل في الأوتوإت

نظرًا لأن آخر بارمترين تم عمل لهما ثابت

الأول والذي يمثل البارمتر الأخير: tagPROCESS_INFORMATION
والذي يحوي الـ Structure التالي:
كود:
"hwnd hProcess;hwnd hThread;int ProcessID;int ThreadID"
حيث يتم استدعائه بالدالة DllStructCreate بوضع الثابت بداخله أو القيمة الأصلية في الكود

وأيضًا للبارمتر ما قبل الأخير، وهو الثابت tagSTARTUPINFO
والذي يحتوي الـ Structure:
كود:
"int [COLOR=DarkGreen]Size[/COLOR];ptr [COLOR=Red]Reserved1[/COLOR];ptr [COLOR=DarkGreen]Desktop[/COLOR];ptr [COLOR=Red]Title[/COLOR];int X;int Y;int XSize;int  YSize;int XCountChars;" & _
    "int YCountChars;int FillAttribute;int  Flags;short ShowWindow;short Reserved2;ptr Reserved3;int StdInput;" &  _
    "int StdOutput;int StdError"
حيث يتم وضع حجم الهيكل في Resercved1
ووضع القيمة المخرجة لاسم سطح المكتب المطلوب في Title

أو يمكن إبقاء Structure كما هو واستخدام دالة DllStructSetData
في تعديل المدخلات المطلوبة في الهيكل بدون أخطاء
بعمل التالي:
كود:
DllStructSetData([COLOR=Red]$tStartup[/COLOR], '[COLOR=Blue]Size[/COLOR]', DllStructGetSize([COLOR=Red]$tStartup[/COLOR]))
DllStructSetData([COLOR=Red]$tStartup[/COLOR], '[COLOR=Blue]Desktop[/COLOR]', [COLOR=DarkGreen]$pText[/COLOR])
حيث $tStartup تمثل Structure المراد تعديله
والذي باللون الازرق للموقع المراد تعديله في الـ
Structure
أما بالأخضر pText$ يمثل مخرجة دالة CreateString والتي تعطي اسم لسطح المكتب

والـ Structures في الأوتوإت لآخر بارمترين مشابه لما وضعته في شرحك :10:
ومطابق للذي في c++، والسبب أن الأوتوإت مبنية عليه :330:

والمشكلة ليست في المعرفة أو التطبيق، لكن المشكلة في صعوبة الحفظ :ohmygod:
كما أن تصميم الدوال معقد نوعًا ما للدخول الكبير في الـ Structures واتصالات DLL

يمكن التسهيل على المطورين بعمل مكتبات جاهزة تحوي هذه الأشياء
ويتبقى على المطور تنفيذ دوال بسيطة فقط دون الدخول في تعقيدات

وآسف على التعقيد في كتابة هذا الرد :30:
انا ليس لدي خبرة في الأتويت لكن شكرا لك على هذه الاضافات سيستفيد منها الاعضاء
الستراكشرات نجدها في المراجع مثل msnd ولسنا مظطيرن لحفضها لكن طريقة كتابتها تختلف ففي الـ c++ لست مظطرا لتعريفها فقط تكتب اسمها و تستعملها اما الـ VB.NET فيجب كتابتها كاملة اما الاوتويت فتتطلب تلك التعقيدات التي تكلمت عنها :15: (أصلا الاوتويت المفروض هي سيكربت و ليس لغة و المفروض ما نلقا فيها هذه الاشياء اصلا ههههههه)
اما بخصوص المكتبات الجهازة حقيقة هذا لا يسمى تطويرا فمن الافضل فهم الآلية المتبعة و تطبيقها ثم استخدام المكتبات لتسريع العملية و عدم تضيع الوقت :30:
اما تعقديات الستركشرات و تصميمها فيجب ان تعتاد على هذا ، الاسبوع لي فات دخلت في متاهة سركشرات PE وبالتحديد IAT و تهت هناك بعد مدة خرجت منها سالامات ههههههههه:30:
شكرا لمرورك الرائع زدت الموضوع نورا بالكم الهائل من المعلومات التي طرحتها
:15:
 

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

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

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

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