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

مشكلة في استخراج الأيقوانات من الملفات التنفيذية

مغلق
بدأه MiCcSoft في 11 يونيو 2006 · 11 رد · 787 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لقد صنعت برنامج لاستخراج الأيقونات من الملفات التنفيذية لكن

أين المشكلة ؟ المشكلة أنه بعد استخراج الأيقونات اشغلها بنجاح

على الويندوز أحاول تشغلها على أي برنامج لا تعمل لأنها معطوبة

مع العلم أنني استخرج الايقونات من ملف Shell32 ويكون حجمها كلها حوال 810 kb

واسخرجها بوساطة برنامج أخر فيطلع حجمها 22 mg فما الحل ؟

Icon_Manager.zip

#2

بسم الله الرحمن الرحيم

أخى الكريم

معذرة لعدم اسنطاعتى الشرح الآن وذلك لظروف طارئة

بالمرفقات نسخة بها تعديل بسيط وليس كامل

والله المستعان

Icon_Manager.rar

#3

أخي الكريم أولا قمت بصنع محمول من Icon ‘لى bitmap دون فائدة لأن الفيجوال يقدم هذه الميزة

حسنا حاول استخدم اللملفات التي قدمت باستخراجها حيث أذهب داخل الفيجوال ستديو إلى My project

ثم أختر أيقونة من احد الأيقونات المستخرجة !

#4
moudar345 كتب:
أخي الكريم أولا قمت بصنع محمول من Icon ‘لى bitmap دون فائدة لأن الفيجوال يقدم هذه الميزة

حسنا حاول استخدم اللملفات التي قدمت باستخراجها حيث أذهب داخل الفيجوال ستديو إلى My project

ثم أختر أيقونة من احد الأيقونات المستخرجة !

بسم الله الرحمن الرحيم

أولا أخى العزيز

أشكرك على ردك ومعذرة مرة أخرى لأنى كنت متسرعا فى الاجابة

لقد قمت بعمل دالة للتحويل من Icon الى bitmap

وذلك لأن دالة الفيجوال لا نسمح بتحديد اللون الشفاف Transparent color

ولو أنك استخدمت دالة الفيجوال مباشرة فسوف تلاحظ وجود خلفية سوداء فى ال Icon

ثانيا

لقد قمت بتقسيم الاجراء الى قسمين

الاول خاص بال Icon فقط

والثانى خاص بباقى الامتدادات

والله المستعان

Icon_Manager.rar

#5

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

#6
moudar345 كتب:
لكن عند استخراج الايقونات تطلع بخلفية سودة

أخى العزيز

إن هذه المشكلة توجد فى ال Icons لا تعد مشكلة حيث أن الفيجوال يجعل اللون الذى يوجد فى البيكسل الاول من يسار الصورة

( Pixel(0,0

يجعله لونا شفافا

ومن الممكن القيام لدالة صعيرة لتحويل هذا اللون الى أى لون آخر

وإذا أردت ذلك أخبرنى

والله المستعان

#7

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

قطعة من الأيقونة فقط !

وأنا حذفت الخلفية السوداء من الاول وهذه ليست مشكلتي فما الحل ؟

#8

لم أفهم ماذا تقصد بأنه يقوم باستخراج

قطعة من الأيقونة فقط !

أرجو التوضبح

ولى سؤال لك ولكنه خارج الموضوع

وهو كيف تضيف روابط لمواضيعك السابقة ؟ حيث أننى حديث العهد بالمنتديات

وشكراً

#9

أخي الكريم الأيقونة مقسمة إلى عدة أقسام تحتوي على :

صورة

أيقونة 16و16 لون

أيقونة 32و32 لون ......

وبالنسبة للسؤال الثاني اذهب إلى لوحة التحكم - تعديل التوقيع الشخصي

هناك ستجد صورة

hyperlink.gif

أنقر عليها وضع الرابط والاسم لكن المنتدى الأن في حالة صيانة لذا انتظر

#10

شكراً لك على ردك ونوضيحك

ومع أنى لم اتعمق فى هذا المجال

إلا أنه يوجد لدى بعض الأكواد الخاصة بذلك الموضوع ولكنها بالفيجوال بيسيك 6

لذا ساحاول الرجوع إليها ومعرفة كيفية عمل ذلك

ولكن ما يحضرنى الآن هو هذه الدالة التى تستخرج ال

Icon

من الملف مع إمكانية الحصول على

Small or large Icon size

Option Explicit On
Option Strict On

Imports System.Runtime.InteropServices


Public Class Class1

#Region " Enums "

	''' <summary>
	''' Indicates the icon size to get.
	''' </summary>
	Public Enum enumIconSize

		''' <summary>
		''' The small generic file icon.
		''' </summary>
		SmallIcon = 1

		''' <summary>
		''' The large generic file icon.
		''' </summary>
		LargeIcon = 0
	End Enum

#End Region


	<StructLayout(LayoutKind.Sequential)> _
	 Public Structure SHFILEINFO

		Public hIcon As IntPtr
		Public iIcon As Integer
		Public dwAttributes As Integer
		<MarshalAs(UnmanagedType.LPStr, SizeConst:=260)> Public szDisplayName As String
		<MarshalAs(UnmanagedType.LPStr, SizeConst:=80)> Public szTypeName As String

		Public Sub New(ByVal B As Boolean)
			hIcon = IntPtr.Zero
			iIcon = 0
			dwAttributes = 0
			szDisplayName = vbNullString
			szTypeName = vbNullString
		End Sub

	End Structure



	<Flags()> Public Enum SHGFI
		SmallIcon = &H1
		LargeIcon = &H0
		Icon = &H100
		DisplayName = &H200
		Typename = &H400
		SysIconIndex = &H4000
		UseFileAttributes = &H10
	End Enum

	Public Declare Auto Function SHGetFileInfo Lib "shell32" (ByVal pszPath As String, ByVal dwFileAttributes As Integer, ByRef psfi As SHFILEINFO, ByVal cbFileInfo As Integer, ByVal uFlagsn As SHGFI) As Integer


#Region " DefaultFileIcon "


	''' <summary>
	''' Returns the default icon representation of 
	''' specified file. 
	''' </summary>
	''' <param name="filePath">
	''' The path to the file to extract the
	''' default icon.
	''' </param>
	''' <param name="iconSize">
	''' The size of the returned icon.
	''' Defaule is enumIconSize.SmallIcon
	''' </param>
	''' <returns>
	''' Te default icon representation of 
	''' specified file. 
	''' </returns>
	Public Overloads Shared Function DefaultFileIcon( _
		ByVal filePath As String, _
		ByVal iconSize As enumIconSize) _
	As System.Drawing.Icon

		Dim info As New SHFILEINFO(True)
		Dim cbSizeInfo As Integer = Marshal.SizeOf(info)
		Dim flags As SHGFI = _
			SHGFI.Icon Or _
			SHGFI.UseFileAttributes
		flags = CType(flags + iconSize, SHGFI)
		SHGetFileInfo(filePath, 256, info, cbSizeInfo, flags)
		Return System.Drawing.Icon.FromHandle(info.hIcon)
	End Function



	''' <summary>
	''' Returns the default icon representation of 
	''' specified file. 
	''' </summary>
	''' <param name="filePath">
	''' The path to the file to extract the
	''' default icon.
	''' </param>
	''' <returns>
	''' Te default icon representation of 
	''' specified file. 
	''' </returns>
	Public Overloads Shared Function DefaultFileIcon( _
		ByVal filePath As String) _
	As System.Drawing.Icon
		Return DefaultFileIcon(filePath, enumIconSize.SmallIcon)
	End Function

#End Region

End Class

والله المستعان

#11

نعم دور على تلك الأكواد وهذا الكود الذي اعطيتني ياه يقوم باستخراج

الأيقونة بتاع الملف لا الأيقونات المخزنة بداخله دفنها الله عقدتني !!!

#12

أعتقد ان هذا البرنامج من البرامج الرائعة فى التعامل مع ال Icons

ولكنه بالفيجوال بيسيك 6

فإذا لم تتعامل مع الفيجوال بيسيك 6 من قبل

فقط امنحنى بعض الوقت لتحوبله الى الدوت نت

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…