الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ارجو شرح كود الستيرش كت

مغلق
بدأه مبرمج مبتدا في 2 أغسطس 2007 · 29 رد · 1,966 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

في احد المواضيع طلب كيفية عمل ستيرش كت وجاوب الاخ محمد السيد بكيفية عمل سترش كت للبرنامج ووضع مرفق

لكن انا لم افهم من اكواده شيئا لذلك اتمنى تشرحوا لي هذا الكود :

Option Explicit

Private Const CSIDL_PROGRAMS = &H2				'Start Menu\Programs
Private Const CSIDL_STARTUP = &H7
Private Const ERROR_SUCCESS = 0&
Private Const CSIDL_DESKTOPDIRECTORY = &H10

Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As Long) As Long
Private Declare Function OSfCreateShellLink Lib "vb6stkit.dll" Alias "fCreateShellLink" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArguments As String, ByVal fPrivate As Long, ByVal sParent As String) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)

Public Function GetSpecialFolder(hWnd As Long, CSIDL As Long) As String

Dim pidl As Long
Dim Pos As Long
Dim sPath As String
On Error GoTo ErrHandler

'fill the pidl with the specified folder item
If SHGetSpecialFolderLocation(hWnd, CSIDL, pidl) = ERROR_SUCCESS Then
	'initialize & get the path
	sPath = Space$(260)
	If SHGetPathFromIDList(ByVal pidl, ByVal sPath) Then
		'check for a null
		Pos = InStr(sPath, Chr$(0))
		If Pos Then 'strip it
			GetSpecialFolder = Left$(sPath, Pos - 1)
		End If
		Call CoTaskMemFree(pidl)
	End If
End If

Exit Function

ErrHandler:
Err.Clear
Resume Next

End Function

Public Sub CreateShortCut()

Dim sDeskPath As String
Dim Pos As Integer
Dim strDestination As String
Dim strLinkName As String
Dim strFullPath As String
Dim strComLineArgs As String
Dim strPrivate As Boolean
Dim strParent As String

sDeskPath = GetSpecialFolder(Me.hWnd, CSIDL_DESKTOPDIRECTORY)
Pos = InStrRev(sDeskPath, "\")
strDestination = "..\.." & Mid(sDeskPath, Pos)
strLinkName = App.EXEName & ".exe"
strFullPath = App.Path & "\" & App.EXEName & ".exe"
strComLineArgs = ""
strPrivate = True
strParent = "$(Programs)"

OSfCreateShellLink strDestination, strLinkName, strFullPath, strComLineArgs, strPrivate, strParent

End Sub

Private Sub RunAtStartUp()

Dim strProgramsFolder As String
Dim strStarUpFolder As String
Dim FileToKill As String
Dim Pos As Integer
Dim strDestination As String
Dim strLinkName As String
Dim strFullPath As String
Dim strComLineArgs As String
Dim strPrivate As Boolean
Dim strParent As String
Dim lngKey As Long
Dim lngCurKey As Long
Dim strSubKey As String
Dim strValue As String
On Error Resume Next

'get path to the current user's Programs\StarUp folder
strProgramsFolder = GetSpecialFolder(Me.hWnd, CSIDL_PROGRAMS)
Pos = InStrRev(strProgramsFolder, "\")
strProgramsFolder = ".." & Mid(strProgramsFolder, Pos)

strStarUpFolder = GetSpecialFolder(Me.hWnd, CSIDL_STARTUP)
Pos = InStrRev(strStarUpFolder, "\")
strStarUpFolder = Mid(strStarUpFolder, Pos)
strStarUpFolder = strProgramsFolder & strStarUpFolder

strDestination = strStarUpFolder
strLinkName = App.EXEName & ".exe"
strFullPath = App.Path & "\" & App.EXEName & ".exe"
strComLineArgs = ""
strPrivate = True
strParent = "$(Programs)"
OSfCreateShellLink strDestination, strLinkName, strFullPath, strComLineArgs, strPrivate, strParent

End Sub

اتمنى شرح وافي يا شباب بحيث عيوني تصير حمراء من القراءة

startingprogremmer.jpg
#2

اولا انا مش فاهم العنوان ماذا يعني :lol:

لكن اليك بالشرح الوافي الكامل

GetSpecialFolder من اسمها تقوم بارجاع المجلدات الخاصة في النظام مثل WINDOWS SYSTEM32 PROGRAMS DESKTOP الخ

CreateShortCut لعمل اختصار على سطح المكتب وكما تعلم ان سطح المكتب هو مجلد خاص حيث تم احضار موقعه واستخدم OSfCreateShellLink لعمل الاختصار

RunAtStartUp وضع اختصار في start -->programs-->startup وهي ايضا مجلد خاص

وبقية الاشياء كلها Mid left instr دوال تعرفها :P

#3

اخ مبمج مبتدا اسمها Short cut ايه ستيرش كت دى الى ات بتحكى عليها

اظن ان الاخ طارق اوضح الدوال واوعى تقول مش فاهم

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#4

مش فاهم

انظر :

Private Const CSIDL_PROGRAMS = &H2				'Start Menu\Programs
Private Const CSIDL_STARTUP = &H7
Private Const ERROR_SUCCESS = 0&
Private Const CSIDL_DESKTOPDIRECTORY = &H10

لم افهمه

Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As Long) As Long
Private Declare Function OSfCreateShellLink Lib "vb6stkit.dll" Alias "fCreateShellLink" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArguments As String, ByVal fPrivate As Long, ByVal sParent As String) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)

اوعى ايه ؟؟؟ مش فاهم اصلا lip مش فاهمه

startingprogremmer.jpg
#5

انا اقصد شرح وافي اي شرح سطر سطر :) انا مش فاهم اي شيء

يعني بتقولي ماذا يعني السطر الاول لا استطيع اقولك شيء

startingprogremmer.jpg
#6

بالنسبة Declare Function هذه دوال من الويندوز api اي من المكتبات الاساسية في الويندوز واكثر شيء بعرف فيهن هم مبرمجي السي

وبالنسبة ل

Private Const CSIDL_PROGRAMS = &H2 'Start Menu\Programs

فيه تعريف ثابت عند تمريره الى ال api يرجع مكان Start Menu\Programs

واذا بدك تعرف كل سطر ما ذا يعني عليك ب F8 ومراقبة كل تغيير على كل سطر

#7

&H2 هل هو ستارت منيو ؟؟

startingprogremmer.jpg
#8

شلون تقصد F8 ??

يعني اذهب الى runtime ??

لن افهم شيئا لان بعض الاسطر لا تفهل شيئا

startingprogremmer.jpg
#9

&h2 هو رمز عند تمريره ل GetSpecialFolder يرجع Start Menu\Programs

و &H7 يرجع برامج البدء

وقصدت من f8 ان تعمل debug للبرنامج خطوة بخطوة حتى ترى ماذا يحصل

#10

ارجو شرح هذا

 0&
و
 &H10
startingprogremmer.jpg
#11

جربت ان اكتب

text1.text = &H2

لكن النتيجة 2

جربت ان اكتب

text1.text = &H7

النتيجة 7

لماذا !!!!

startingprogremmer.jpg
#12

0& و &H10 وغيرها التي تبدأ ب &H

هذه ارقام hexadecimal والتي تتكون من 0 الى f (تجدها في صفحات الانترنت كثيرا للالوان) ولو كتبتها بالنظام العشري لا مشكلة في النهاية سيتم التحويل .

هذه القيم او الثوابت فائدتها عند التمرير الى الدالة SHGetSpecialFolderLocation حيث كل رقم يعني مجلد ما على سبيل المثال (الارقام للتوضيح فقط )

0 = windows

1 = system32

2 = programs

3 =temp

....

16 = سطح المكتب

#13

اخ مبرمج مبتدا طبعا لن يتغير العدد من 0 الى 9

اى انك لو كتبت مثلا

اقتباس
text1.text = &H9

سيعطيك 9

اما لو كتبت

اقتباس
Text1.Text = &Hc

سيعطيك الرقم 12 جرب وقول لى

على فكرة نظام ال Hex هو المستخد فى البرمجة طبعا لا اتحدث عن الفى بى حيث انها تتعامل بالعشرى

كل 1 بايت = رقمين بالنظام السادس عشر

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#14
اقتباس
بالنظام السادس عشر

:wacko: :blink:

ما هو النظام السادس عشر ؟؟

startingprogremmer.jpg
#15

لماذا يعطيني 12 ؟؟ عندما اكتب Text1.Text = &Hc

startingprogremmer.jpg
#16

ما هو Lib "shell32.dll" ؟؟

startingprogremmer.jpg
#17

النظام السادس عشر يبدا بالعد من 0 الى f اى بالنظام العادى ( العشى ) من 1 الى 15

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#18
If SHGetSpecialFolderLocation(hWnd, CSIDL, pidl) = ERROR_SUCCESS Then

ماذا تعني هذي الجملة

اسمحو لي بصراحة انا مو فاهم شيء

startingprogremmer.jpg
#19
اقتباس
0 = windows

1 = system32

2 = programs

3 =temp

....

هل انا احدد الارقام ام الوندوز 0 و الprogrem 2 ??

startingprogremmer.jpg
#20

الأرقام بتاعة الثوابت و دوال الـ APIs و غيره كلها حاجات ثابته للويندوز ( تختلف أختلافات طفيفة من أصدار لآخر ) و كلها موجودة فى الـ MSDN و الـ API Viewer بتاع الـ KPD Team و غيره من المصادر و هتلاقى كتير جدا على النت .

موضوع يمكن يفيدك : How To Get Started Programming with the Windows API (LONG)

#21

اخي الموقع مايكرسوفت

الصفحة انجليزية لم افهمها جيدا ترجمتها بقوقل لكن تعرف ان الترجمة ليست جيدة جدا

اقتباس
ما هو Lib "shell32.dll" ؟؟

ايضا اريد دروس لتعامل مع API من البداية

انا FUNCTION اعرف بانه لتعريف متغير ويستخدم بدل DIM BYVAL

مثال :

FUNCTION HS (BYVAL A AS LONG,BYVAL B AS LONG) AS LONG
HS = A + B -100 / 2
END FUNCTION

واستطيع بال FUNCTION عمل مكتبة

ااما :

Private

Const

Declare

Public

فانا لا اعرفها

ارجو شرحها او دروس لها

بالنسبة لل FUNCTION فانا تعلمته من هنا

startingprogremmer.jpg
#22

shell32.dll هي مكتبة من الويندوز موجودة في system32 لكي تستخدمها في برنامجك هناك طريقة ثابته وهي :

Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

وهي تبدأ ب Declare Function

ثم اسم الدالة ثم lib ثم اسم المكتبة "shell32.dll" ثم المتغييرات التي تحتاجها هذه الدالة

const هي تعريف لثابت مثل

const BI =3.14

حيث تستطيع استخدام bi في برنامج بدل كتابة الرقم في كل مرة

private خاص تستخدمها فقط داخل الفورم او الموديول الحالي

public عام تستخدمها من اي مكان في برنامجك

#23
اقتباس
انا FUNCTION اعرف بانه لتعريف متغير ويستخدم بدل DIM BYVAL

الـ Function تستخدم لأنشاء Function , مالها ومال المتغيرات !

حالو تتغلب على مشكلة الـ English لأنك مش هتلاقى مصادر كويسة غير بيها.

راجع برمجة دوال الـ API , ملحوظة لا أعرف الكاتب و لا الكتاب و لا أضمن المادة العلمية , أنا عملت لك بحث و خلاص.

#24

مشكووورين على المساعدة

انا احس ان هذا الطريق يؤدي من المبتدئين الى الاحتراف

startingprogremmer.jpg
#25

شكرا لكم اخواني علي كل المعلومات دي

بس مش فاهم الكود ده يعني بيعمل ايه؟؟؟؟

هذا الموضوع مغلق.

مواضيع مشابهة