PDA

View Full Version : سوال: استخراج آیکون هر نوع فایل



AmirAmiri
جمعه 24 خرداد 1387, 17:58 عصر
سلام دوستان احتیاج به کدی دارم که بشه باهاش آیکون هر فایلی رو بدست آورد واسه اکسپلورر میخوام.
تو سایت جستجو کردم ولی فقط استخراج آیکون exe و dll پیدا کردم که تسط آقا مهران گذاشته شده بود ولی من میخوام که آیکون هر فایلی رو نشون بده دقبقا مثل اکسپلورر ویندوز...
ممنون میشم کمک کنید فرقی نمیکنه که کدش با VB6 باشه یا VB.Net هر کدوم بود اشکال نداره.
ممنون از زحمتتون. :چشمک:

Bahram0110
جمعه 24 خرداد 1387, 18:24 عصر
سلام
فايل هاي اجرايي و dll‏ و ... آيكونش تو خودشه و بايد استخراجش كني
ولي براي بقيه فايل ها مثل mp3,‎ dat,‎ txt,‎ ‎... شما بايد از طريق رجيستري آدرس آيكون را بدست بياريد

موفق باشيد

AmirAmiri
جمعه 24 خرداد 1387, 18:30 عصر
سلام
فايل هاي اجرايي و dll‏ و ... آيكونش تو خودشه و بايد استخراجش كني
ولي براي بقيه فايل ها مثل mp3,‎ dat,‎ txt,‎ ‎... شما بايد از طريق رجيستري آدرس آيكون را بدست بياريد

موفق باشيد

اگه ممکنه یه نمونه کد بزارید.
کجای رجیستری باید برم و از کجاش آیکون رو پیدا کنم؟
خواهش میکنم کلّی صحبت نکنید و راهنمایی درست و حسابی کنید طوریکه اگه یه نفر آماتور هم اومد و این تاپیک رو خوند، بتونه به راحتی آیکون فایلها رو بدست بیاره.
خواهش میکنم با تمامه جزئیات توضیح بدید.
ممنون...

Bahram0110
جمعه 24 خرداد 1387, 20:13 عصر
سلام
الان در شرايطي نيستم كه كد بذارم (دليلش بماند!)
شما توي pscode.com‏ دنبال explorer,‎ windows explorer,‎ ‎... بگرد به نتيجه مي رسي

البته يه راه خيلي ساده براي اينكار اينه كه از يه سري آيكون پيش فرض براي اينكار استفاده كني...

در ضمن يه اشتباه لپي اون بالا پيش اومد:‎ ‎آيكون فايل هاي dll هم تو خودشون نيست، بايد تو رجيستري دنبالش بگردي.

مهران رسا
شنبه 25 خرداد 1387, 10:55 صبح
سلام .

حالا شما مثلاً آیکون bmp رو واسه چی می خوای استخراج کنی ؟!!
مگه آیکون فایل های bmp و یا jpg ویا txt توی یک ویندوز با هم فرقی هم دارن ؟!

به جای اینکه خودت رو توی دردسر بندازی و دنبال استخراج آیکون این فایل ها باشی به پست زیر یه سری بزن !!

http://barnamenevis.org/forum/showpost.php?p=511866&postcount=2

Bahram0110
شنبه 25 خرداد 1387, 12:26 عصر
سلام .

حالا شما مثلاً آیکون bmp رو واسه چی می خوای استخراج کنی ؟!!
مگه آیکون فایل های bmp و یا jpg ویا txt توی یک ویندوز با هم فرقی هم دارن ؟!


سلام
بله ممكنه فرق داشته باشن
txt, bmp, jpg, zip, mp3,...
حتي آيكون زرد رنگ فولدرها هم مي تونه فرق داشته باشه

AmirAmiri
شنبه 25 خرداد 1387, 13:20 عصر
سلام .

حالا شما مثلاً آیکون bmp رو واسه چی می خوای استخراج کنی ؟!!
مگه آیکون فایل های bmp و یا jpg ویا txt توی یک ویندوز با هم فرقی هم دارن ؟!

به جای اینکه خودت رو توی دردسر بندازی و دنبال استخراج آیکون این فایل ها باشی به پست زیر یه سری بزن !!

http://barnamenevis.org/forum/showpost.php?p=511866&postcount=2

:تشویق: :تشویق: :تشویق:

خسته نباشید آقا مهران من که آیکون نخواسته بودم چرا خودت رو به زحمت انداختی؟ :بامزه:
عزیزه دل من میخواستم چیزی شبیه برنامه زیر درست کنم که به کمک Bahram0110 عزیز تونستم.

http://pscode.com/upload_PSC/screenshots/PIC2003119103276889.jpg

از همه شما تشکر میکنم. به زودی برنامه رو با VB6 هم مینویسم و اگر تو سایت چنین برنامه ای بنود میزارم واسه دانلود. این با VB.Net هستش.

Mbt925
شنبه 25 خرداد 1387, 13:31 عصر
کلید HKEY_CLASSES_ROOT حاوی همه ی فرمت ها و اطلاعات مربوط به اون هاست.

یه مثال کاربردی می زنم که اگه باهوش باشید ، می تونید علاوه بر رسیدن به پاسخ سوالتون ، یه مطلب جدید هم یاد بگیرید:

فرض کنید یه برنامه نوشتیم و می خوایم یه فایل با فرمت خاص براش تعریف کنیم، تا هر وقت کاربر روی فایل هایی با اون فرمت کلیک کرد، برنامه ی ما اجرا بشه و اون فایل رو باز کنه.
مثلا فرمت .MBT

مراحل کار رو شرح میده :

1. زیر کلید گفته شده، کلیدی به صورت . + نام فرمت ایجاد کنید.
برای این مثال کلید به اسم


.MBT

ایجاد می کنیم.

2. زیر این کلید ، کلیدی به نام Shell ایجاد کنید.
3. زیر این کلید ، کلیدی به نام Open و زیر کلید Open ، کلیدی به نام Command بسازید.
4.توی کلید Command یه مقدار به نام Default قرار داره ، مقدارش رو برابر با مسیر فایل اجرایی برنامتون قرار بدید.


http://mbt925.googlepages.com/CreateNewFileExtenScrShot.jpg


حالا هر وقت روی فرمت .MBT کلیک بشه، برنامه ی شما اجرا میشه ، فقط کافیه از طریق متد Command مسیرش رو بگیرید و عملیات مورد نظر رو روش انجام بدید.

----------

حال می خوایم برای فایل مربوط به برناممون ، یه آیکون در نظر بگیریم. یعنی فایل هایی به فرمت .MBT به یه شکل خاص نمایش داده بشن.

زیر کلید .MBT که ساختیم ، یه کلید به اسم DefaultIcon ایجاد کنید و مسیر آیکون موردنظرتون رو توش بنویسید.

نتیجه ی این عملیات :

http://mbt925.googlepages.com/CreateDefaultIconScrShot.jpg

Mbt925
شنبه 25 خرداد 1387, 13:35 عصر
:تشویق: :تشویق: :تشویق:

خسته نباشید آقا مهران من که آیکون نخواسته بودم چرا خودت رو به زحمت انداختی؟ :بامزه:
عزیزه دل من میخواستم چیزی شبیه برنامه زیر درست کنم که به کمک Bahram0110 عزیز تونستم.

از همه شما تشکر میکنم. به زودی برنامه رو با VB6 هم مینویسم و اگر تو سایت چنین برنامه ای بنود میزارم واسه دانلود. این با VB.Net هستش.

دوست عزیز ، این برنامه فقط از لیست ویو استفاده کرده و آیکون هیچ فایلی رو بدست نیاورده

AmirAmiri
شنبه 25 خرداد 1387, 14:30 عصر
دوست عزیز ، این برنامه فقط از لیست ویو استفاده کرده و آیکون هیچ فایلی رو بدست نیاورده

چرا اتفاقا برای بدست آوردن آیکون فایلها از توابع API استفاده کرده.
مگه ListView چنین امکانی داره که بشه باهاش آیکون برنامه ها رو دقیقا مثله ویندوز نشون داد؟؟؟!!!
این حرف شما واقعا عجیبه. :متعجب:
با ListView که نمیشه همینطوری آیکونها رو نشون داد حتما باید بهش آیکون بدیم مثلا آیکونی که تو ImageList قرار داره البته باید قبلش ImageList رو با ListView ست کنیم.
حالا خیلی جالبه که این برنامه چطوری تونسته با توبع API اینکارو انجام بده در حالیکه من میخواستم از طریق ریجیستری اینکارو انجام بدم به این صورت که :

اول باید پسوند مورد نظر مثلا BMP رو در مسیر Root پیدا میکردم و بعد داخل پوشه DefaultIconمسی آیکون و Dll آیکون رو بدست می آوردم و آیکون رو استخراج میکردم که اونم با استفاده از تابع ExtractIcon انجام میشد تا اینجا هیچ مشکلی نبود یعنی خودم تا اینجا رو نوشته بودم و بلد بودم اما مشکل اینجا بود که پسوند مثلا JPG در رجیستری به اینصورت نوشته شده بود jpegfile ولی پسوند فایلها به اینصورت بودن jpg. حالا برنامه باید از کجا متوجه میشد که باید در مسیره زیر دنباله آیکونه اون پسوند بگرده و اونجا کلید پیشفرض رو باز کنه؟


HKEY_CLASSES_ROOT\jpegfile\DefaultIcon
حالا فرض میگیریم که این پسوند رو به صورت از پیش تعیین شده در برنامه با نام jpegfile تعیین کرده باشیم و حتی به آخره پسوند txt هم "file" اضافه میکنیم تا بشه "txtfile" اما اگه برنامه ای بود که آیکونش رو تو شاخه "PicturePreview\DefaultIcon" ذخیره میکرد برنامه من از کجا باید اون مسیر رو پیدا میکرد؟ به همین خاطر اومدم و این تاپیک رو مطرح کردم تا شاید کسی فکر بهتری داشته باشه ولی خودم از همون اول روشم رو نگفتم تا فکرها به سمت رجیستری نره و ایده های حدید مطرح بشه اما برنامه ای که عکسش رو گذاشتم خیلی جالبه چون اصلا با رجیستری کاری نداره و فقط با استفاده از توابع API همچون :


SHGetFileInfo و SendMessage
تونسته به راحتی آیکون تمامه فرمت ها و تمامه فایلهارو بدست بیاره البته طرز کارش کمی پیچیدس اما کاربرد داره.
-------------------------------------------------------

با تشکّر فراوان از آقای Mbt925 عزیز به خاطر آموزشه جالبشون. منم نمونه ی همین آموزش رو تو وبلاگم گذاشته بودم که با دستورهای وی بی همراهه و کامل هست ( اختصاص پسوند فایلها به برنامه (مبحث مهم) (http://v-basic.mihanblog.com/More-14.ASPX) )
-------------------------------------------------------

موفق و پیروز باشید...

Mbt925
شنبه 25 خرداد 1387, 14:45 عصر
ببخشید ، به یه دلیل خاص چنین اشتباهی شد.

مهران رسا
شنبه 25 خرداد 1387, 14:57 عصر
:تشویق: :تشویق: :تشویق:
خسته نباشید آقا مهران من که آیکون نخواسته بودم چرا خودت رو به زحمت انداختی؟ :بامزه:


دیگه بیشتر از این ما رو شرمنده نکن امیر جان ...

قصدم کمک بود عزیز .

AmirAmiri
شنبه 25 خرداد 1387, 20:01 عصر
دوستان یه نگاه به این سورس بندازن ببینن چرا تو VB6 کار نمیکنه در حالیکه نمونه همین کد تو دات نت براحتی کار میکنه بدونه هیچ مشکلی. من تمامه متغیر ها و تمامه دستورات رو تغییر دادم و به زبان VB6 نوشتم اما نمیدونم چرا کار نمیکنه و آیکونه مثلا Notepad رو نشون نمیده.
لطفا اگه میتونید درستش کنید اگه نمیتونید که بریم سره وقته همون رجیستری و اینکه چطوری آیکون رو از تو رجیستری تشخیص بدیم.

با تشکّر...

vbhamed
شنبه 25 خرداد 1387, 23:52 عصر
پاسخ
فكر كنم برنامه زير بهتر مشكلت رو حل كنه ! :چشمک:

Mbt925
یک شنبه 26 خرداد 1387, 13:46 عصر
نمونتون اصلاح شد.

در ضمن نمونه ی کامل برای این موضوع:

http://barnamenevis.org/forum/showthread.php?p=537147#post537147