تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
استخراج الأيقونات من الملفات التنفيذية
#1
كاتب الموضوع : نجيب المجيدي


تستطيع شراء قرص مضغوط يحتوي عدداً من الأيقونات لاستخدامها في برامجك وكذلك تستطيع الإبحار في الوب بحثاً عنها ومن الممكن أن
تستعين بأحد الأصدقاء قائلاً:
"يا منعاه أخوك في الله محتاج أيقونة , لاتردنا خائب لي منعك" (حلوه اللهجة الصنعانية !!! ) , ولكن هل تعلم أن ما تبحث عنه قد يكون بين يديك و أنت لا تعلم , نعم أنا أتحدث عن الأيقونات الموجودة داخل الملفات التنفيذية وموضوعنا اليوم سيكون حول كيفية استخراج هذه الأيقونات من الملفات التنفيذية , فإلى الموضوع...

في البداية سنقوم بالتصريح عن دوال API التالية:


كود :
Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" _
(ByVal lpszFile As String, _
ByVal nIconIndex As Integer, _
ByRef phiconLarge As Integer, _
ByRef phiconSmall As Integer, _
ByVal nIcons As Long) As Integer

Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" _
(ByVal hInst As Integer, _
ByVal lpszExeFileName As String, _
ByVal nIconIndex As Integer) As Integer

Declare Function DestroyIcon Lib "user32.dll" _
(ByVal hIcon As Integer) As Integer

الدالة ExtractIconEx تحتوي على خمسة ممررات عى النحو التالي:
lpszFile يستخدم لتمرير مسار الملف التنفيذي.
nIconIndex يستخدم لتمرير رقم فهرس المصدر المراد استخراجه , وإذا مررنا هنا -1 فستعيد الدالة العدد الكلي للأيقونات المحتواه في الملف.
phiconLarge مؤشر لمصفوفة من المقابض (handles) للأيقونات الكبيرة.
phiconSmall مؤشر لمصفوفة من المقابض (handles) للأيقونات الصغيرة.
nIcons يستخدم لتمرير عدد الأيقونات المراد استخراجها من الملف.

الدالة ExtractIcon تحتوي على ثلاثة ممررات على النحو التالي:
hInst يستخدم لتمرير مقبض التطبيق الذي قام باستدعاء الدالة.
lpszExeFileName يستخدم لتمرير مسار الملف التنفيذي.
nIconIndex يستخدم لتمرير رقم فهرس المصدر المراد استخراجه , وكما في الدالة السابقة إذا مررنا -1 فستعيد الدالة العدد الكلي للأيقونات المحتواه في الملف.

الدالة DestroyIcon تحتوي على ممرر واحد لتمرير رقم مقبض الأيقونة لتحريرها من الذاكرة.

ملاحظة: المعلومات أعلاه مختصرة , يرجى الرجوع لمكتبة MSDN للحصول على معلومات تفصيلية.
في المثال المرفق قمت باستخدام الدالة ExtractIconEx للحصول على عدد الأيقونات في الملف بالشكل التالي:


كود :
Private Function GetIconsCount(ByVal strFilePath As String) As Integer
Return ExtractIconEx(strFilePath, -1, 0, 0, 0)
End Function

و في الكود التالي جملة دوران من الصفر إلى العدد الذي أعادته الدالة السابقة , حيث يتم استخراج الأيقونات واحدة تلو الأخرى باستخدام الدالة ExtractIcon ثم كتابتها إلى المجلد الهدف , الذي يقوم المستخدم بتحديده , و أخيراً بعد حفظ كل أيقونة يجب استدعاء الدالة DestroyIcon مع تمرير مقبض الأيقونة لها و الذي أعادته الدالة ExtractIcon ,


كود :
Private Sub ExtractFromExec(ByVal fiSourceFile As IO.FileInfo)
Dim intTotalIcons As Integer
Dim intIconExtracted As Integer
intTotalIcons = GetIconsCount(fiSourceFile.FullName)
'Me.Text = intIconsCount.ToString '**********************************
prg.Maximum = intTotalIcons
For i As Integer = 0 To intTotalIcons - 1

intIconExtracted = ExtractIcon(Me.Handle.ToInt32, fiSourceFile.FullName, i)
If intIconExtracted > 0 Then
'Me.Text += " | " + intIconExtracted.ToString '**********************************
Dim msmStore As New IO.MemoryStream
Me.Icon = Icon.FromHandle(New IntPtr(intIconExtracted))
Application.DoEvents()
Me.Icon.Save(msmStore)

Dim b(msmStore.Length) As Byte
msmStore.Position = 0
msmStore.Read(b, 0, msmStore.Length)
msmStore.Close()

Try
Dim strIcon As New IO.FileStream(destinationFolder & i & ".ico", IO.FileMode.CreateNew)
strIcon.Write(b, 0, b.Length)
strIcon.Close()
intIconCount += 1

prg.Value = i + 1
Catch ex As Exception
lblNoOfIcons.Text = "Error..."
End Try

End If
DestroyIcon(intIconExtracted)
lblNoOfIcons.Text = "عدد الأيقونات المستخرجة: " & i.ToString
Next

End Sub
المثال في المرفقات


الملفات المرفقة
.rar   ExtractIcons.rar (الحجم : 15.79 ك ب / التحميلات : 110)
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  شرح كيفية برمجة( مثال نسخ الملفات من مكان انت تحدده الى مكان انت تحدده بامتداد انت تحدده) سعود 5 8,114 04-09-19, 04:32 AM
آخر رد: سعود
  التعامل مع الملفات RaggiTech 0 2,598 17-10-12, 09:16 PM
آخر رد: RaggiTech
  برنامج البحث عن الملفات الفارغه بجهازك وحذفها RaggiTech 0 2,489 17-10-12, 08:50 PM
آخر رد: RaggiTech
  مثال للبحث عن الملفات المخفية والغير مخفية داخل الكمبيوتر في الفيجول دوت نت 2008 RaggiTech 0 2,494 17-10-12, 08:38 PM
آخر رد: RaggiTech
  كود عرض مربع حوار خصائص الملفات والمجلدات RaggiTech 0 2,214 17-10-12, 07:27 PM
آخر رد: RaggiTech
  مثال رائع من مايكروسوفت يوضح اكواد التعامل مع الملفات و بتصميم ممتاز(80ك ب) RaggiTech 0 2,421 17-10-12, 07:19 PM
آخر رد: RaggiTech
  معرفة حجم مجلد مع جميع الملفات و المجلدات التي يحتوي عليها باستعمال ال Recursion RaggiTech 0 2,206 17-10-12, 06:47 PM
آخر رد: RaggiTech
  لنسخ الملفات RaggiTech 0 1,649 17-10-12, 06:18 PM
آخر رد: RaggiTech
  للبحث في المجلدات و الملفات بلغه الفجوال بيسك دوت نت -مكتمل- RaggiTech 0 2,611 17-10-12, 05:34 PM
آخر رد: RaggiTech
  القراءة والكتابة من الملفات RaggiTech 0 1,612 17-10-12, 05:01 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم