PDA

View Full Version : شناختن فایلهای ساخته شده توشط ویندوز



fazel-d
یک شنبه 04 مرداد 1388, 13:26 عصر
من یه برنامه نوشتم که یکسری فایل ایجاد می کنه با یه پسوند دلخواه
حالا می خوام کاری کنم که این فایلها توسط ویندوز شناخته بشن و با کلیک کردن بر روی آنها برنامه من که از اون فایلها پشتیبانی می کنه اجرا بشه . دقیقا مثل فایل ها صوتی که با کلیک کردن اونها مثلا Jetaudio اجرا میشه!

fazel-d
شنبه 10 مرداد 1388, 21:22 عصر
تاریخ امروز 10 مرداده ها!!!!!!

منصور بزرگمهر
شنبه 10 مرداد 1388, 22:01 عصر
یک API است که اینکار را می کند:


Private Const SW_HIDE = 0
Private Const SW_SHOW = 5
Private Const SW_MINIMIZE = 3
Private Const SW_MAXIMIZE = 6
Private Const SW_NORMAL = 1
Private Const SW_SHOWDEFAULT = 10


Private Declare Function ShellExecuteA Lib "shell32.dll" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
اين تابع يک فايل دلخواه را در يک برنامه مرتبط باز مي کند
اگر تابع کار خود را با موفقيت انجام دهد مقدار بر گشتي يک اشاره گر از محدوده ساخته شده و در غير اينصورت مقدار بر گشتي صفر خواهد بود

hwnd : هندل پنجره اي که تابع بايد تحت آن اجرا شود
lpOperation : نوع عملي که بايد روي فايل انجام گيرد ( اين اعمال وقتي روي فايل مورد نظر راست کليک کنيد ظاهر مي شوند )
lpFile : فايل مورد نظر (فقط نام فايل با پسوند)
lpParameters : پارامتر هاي ديگري که ممکن است برنامه مورد نظر به آنها احتياج داشته باشد
lpDirectory : دايراکتوري شامل فايل مورد نظر
nShowCmd : نحوه نمايش برنامه مرتبط
SW_HIDE : مخفي
SW_SHOW : غير مخفي
SW_MINIMIZE : کمينه
SW_MAXIMIZE : بيشينه
VSW_NORMAL : اندازه عادي
SW_SHOWDEFAULT : اندازه پيش فرض



این هم عکس آن پیدا کردن کدام برنامه متعلق به کدام فایل است :


Private Declare Function FindExecutableA Lib "shell32.dll" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long



اين تابع برنامه مرتبط با يک فايل خاص را بر مي گرداند
اگر تابع با خطايي مواجه شود مقدار بازگشتي صفر و در غير اينصورت مقدار بازگشتي يک اشاره گر از قلم ساخته شده خواهد بود

lpFile : فايل مورد نظر
lpDirectory : فولدر پيش فرض
lpResult : اين بافر توسط تابع مقدار دهي مي شود حاوي آدرس فايل اجرايي مرتبط با فايل مورد نظر خواهد بود. مقدار اين بافر را با اندازه کافي بلند در نظر بگيريد ( اين بافر را با رشته اي از جاي خالي مقدار دهي کنيد. براي مثال ( Space ( 255 )

ولی منظورت از

تاریخ امروز 10 مرداده ها!!!!!!
چیه . اگر کسی بلد باشد، پاسخ می دهد در غیر اینصورت خیر

fazel-d
یک شنبه 11 مرداد 1388, 15:57 عصر
یک API است که اینکار را می کند:

اون وقت موضوع قابل بحث هم CSharp هست!!!!!

لطفا در مورد کد ها توضیح بیشتری بدین. ممنون می شم/

DLL_DLL
یک شنبه 11 مرداد 1388, 17:47 عصر
Windows Explorer > Tools > Folder Opstions > File Type

منصور بزرگمهر
یک شنبه 11 مرداد 1388, 18:44 عصر
به ادرس زیر برو توضیحاتی در مورد API داده است.
لابد می دانی API چیست. یعنی دسترسی به توابع ویندوز که با C++ نوشته شده است،(و البته هر تابع دیگر سی)

http://barnamenevis.org/forum/showthread.php?t=168579

تذکر : توابع API در قسمت عمومی کلاس یعنی بالای کلاس نوشته می شود.

smk311
یک شنبه 11 مرداد 1388, 19:36 عصر
اون وقت موضوع قابل بحث هم CSharp هست!!!!!

لطفا در مورد کد ها توضیح بیشتری بدین. ممنون می شم/



برای استفاده از API ها ، می توانید به سایت http://www.pinvoke.net مراجعه کرده و نام تابع مورد نظر را در آن جستجو کنید تا معادل مناسب برای استفاده در C# را پیدا کنید.
استفاده از

using System.Runtime.InteropServices;
فراموش نشود.

fazel-d
جمعه 23 مرداد 1388, 14:14 عصر
ممنون از آقا/خانم DLL_DLL
واقعا عالی بود

Windows Explorer > Tools > Folder Opstions > File Type
اما اگه بخواهیم همین کار رو با نصب برنامه در کامپیوتر مقصد انجام بدیم (اتوماتیک) راهی داره؟

اما یه سوال دیگه:
چه طوری میتونم آیکن برنامه رو به منوی سیستم (همون راست کلیک بر روی فایل) اضافه کنم. مثل برنامه McAfee که بر روی منو اضافه میشه؟

Saeed.Masoumi
جمعه 23 مرداد 1388, 16:58 عصر
اما اگه بخواهیم همین کار رو با نصب برنامه در کامپیوتر مقصد انجام بدیم (اتوماتیک) راهی داره؟

اما یه سوال دیگه:
چه طوری میتونم آیکن برنامه رو به منوی سیستم (همون راست کلیک بر روی فایل) اضافه کنم. مثل برنامه McAfee که بر روی منو اضافه میشه؟






using Microsoft.Win32;

RegistryKey hkey_cls_root = Registry.ClassesRoot;
hkey_cls_root.CreateSubKey(".ext");
RegistryKey ext = hkey_cls_root.OpenSubKey(".ext",true);
ext.SetValue("", "Your_file_type");
ext.CreateSubKey("DefaultIcon");
RegistryKey default_icon = ext.OpenSubKey("DefaultIcon", true);
default_icon.SetValue("", @"You_icon_adr");
//Add somthing in Context Menu
ext.CreateSubKey("shell");
RegistryKey _shell = ext.OpenSubKey("shell", true);
_shell.CreateSubKey("Your_pro_name");
RegistryKey yor = _shell.OpenSubKey("Your_pro_name", true);
yor.CreateSubKey("command");
RegistryKey cmd = yor.OpenSubKey("command", true);
cmd.SetValue("", "Your_programm_adr");
//-------- for always open with this
RegistryKey hkcu = Registry.CurrentUser;
RegistryKey sft = hkcu.OpenSubKey("Software",true);
RegistryKey mic = sft.OpenSubKey("Microsoft", true);
RegistryKey win = mic.OpenSubKey("Windows", true);
RegistryKey crver = win.OpenSubKey("CurrentVersion", true);
RegistryKey expl = crver.OpenSubKey("Explorer", true);
RegistryKey fext = expl.OpenSubKey("FileExts", true);
fext.CreateSubKey(".ext");
RegistryKey ur_ext = fext.OpenSubKey(".ext", true);
ur_ext.SetValue("Application", "your_program");



.ext پسوند فایلت باید به همین صورت بنویسی یکنی نقطه (دات) سپس نام پسوند سعی کن سه حرفی باشه هرچند ویندوز براش مهم نیست
ببین می شه اینو خلاصه تر نوشت ولی اینطوری نوشتم راحت تر درکش کنی
در ضمن اگر می خوای یه چیزی تو مایه های Winrar که میاد به همه نوع فایل و پوشه یک گزینه جدید در کلیک راستشان اضافه می کند بسازی بگو بعدا برات اونم بگم الان حسش نیست

fazel-d
سه شنبه 03 شهریور 1388, 18:56 عصر
default_icon.SetValue("", @"You_icon_adr");

آدرس آیکون رو باید مطلق بدم. یعنی جایی که فایل .exe من وجود داره؟


RegistryKey yor = _shell.OpenSubKey("Your_pro_name", true);
نام فایل EXE هست یا هر نامی؟


ur_ext.SetValue("Application", "your_program");نام فایل EXE هست یا هر نامی؟


قرار دادن برنامه رد راست کلیک رو هم اگه زحمت بکسید ممنون می شم

Saeed.Masoumi
چهارشنبه 04 شهریور 1388, 00:49 صبح
سلام ببین
آدرس آیکن رو می تونی به اشکال زیر بدی:



%SystemRoot%\system32\SHELL32.dll,144
یا
c:\x.ico



راستشو بخوای exe رو تا حالا امتحان نکردم :لبخند:
حالا فایلت هرچی می خوای باشه مهم نیست ولی معنی نمیده که مثلا برنامت رو با یک عکس باز کنی امیدوارم منظورم رو خوب گفته باشم :لبخند:
برای اون مسئله هم اینجا یک سر بزن نمی خوام تاپیک تکراری ایجاد شه:
http://barnamenevis.org/forum/showthread.php?t=170495