واضح آرشیو وب فارسی:سایت ریسک: سوال در مورد vb.net sicret 17 بهمن 1389, 20:01می خواستم بدانم که چجوری می تونم یه پسوند فایل داشته باشم که وقتی روی اون کلیک میشه برنامه من باز بشه و محتویات اون فایل رو بتونم بهش دسترسی پیدا کنم برای مثال وقتی روی یک فایل که پسوندش doc است کلیک می کنیم برنامه ورد مایکروسافت اجرا می شود منم می خوام مشابه همین کارو توی وی بی دات نت انجام بدم:rose: the_king 18 بهمن 1389, 15:47می خواستم بدانم که چجوری می تونم یه پسوند فایل داشته باشم که وقتی روی اون کلیک میشه برنامه من باز بشه و محتویات اون فایل رو بتونم بهش دسترسی پیدا کنم برای مثال وقتی روی یک فایل که پسوندش doc است کلیک می کنیم برنامه ورد مایکروسافت اجرا می شود منم می خوام مشابه همین کارو توی وی بی دات نت انجام بدم:rose: برای ثبت کردن یک Extension جدید می توانید از کد زیر استفاده کنید : Private Sub AssociateExtension(ByVal extension As String, ByVal title As String, ByVal icon As String) Dim classes As Microsoft.Win32.RegistryKey Dim reg As Microsoft.Win32.RegistryKey Dim regIcon As Microsoft.Win32.RegistryKey Dim regCommand As Microsoft.Win32.RegistryKey Dim appPath As String appPath = Application.ExecutablePath classes = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SoftwareClasses", True) reg = classes.CreateSubKey("." + extension) reg.SetValue("", extension + ".Files") reg.Close() reg = classes.CreateSubKey(extension + ".Files") reg.SetValue("", title) regIcon = reg.CreateSubKey("DefaultIcon") If icon.Length = 0 Then icon = appPath regIcon.SetValue("", icon) regIcon.Close() regCommand = reg.CreateSubKey("shellopencommand") regCommand.SetValue("", """" + appPath + """ ""%1""") regCommand.Close() reg.Close() classes.Close() End Sub سه پارامتری که بایستی مشخص بشه به ترتیب پسوند (مثلا txt) ، نام پسوند (مثلا Text Documents) و مسیر آیکون آن است (مثلا "C:MyApp.exe" یا "C:My IconsIcon1.ico") که می تواند "" هم باشد. اگر مسیر آیکون را "" قرار دهید، از آیکون خود برنامه شما استفاده خواهد شد. مثلا از این به بعد فایل های wwq با برنامه شما باز شوند : AssociateExtension("wwq", "wwq Files", "") فایل هایی که قرار است با برنامه باز شوند در Command Line برنامه مشخص می شوند، پس موقع فراخوانی برنامه آنها را در رخداد Form1_Load مدیریت خواهید کرد. مثلا : Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try Dim filePath As String = Environment.GetCommandLineArgs(1).Trim If Len(filePath) > 0 And System.IO.File.Exists(filePath) Then MessageBox.Show(filePath) End If Catch ex As Exception End Try End Sub در مثال بالا صرفا نام آن فایل توسط MessageBox نمایش می یابد، اما شما می توانید هر بلایی که خواستید سر فایل مورد نظر در بیاورید، بازش کنید، ویرایش اش کنید و یا حذفش کنید. توجه داشته باشید که مسیر برنامه شما از Application.ExecutablePath خوانده شده و در Registry ثبت می شود، پس اگر فایل اجرایی برنامه را جابجا کرده و یا تغییر نام دهید، Explorer نمی تواند برنامه را برای باز کردن فایل ها پیدا کند. می بایستی AssociateExtension را بعد از هر جابجایی مجددا اجرا کنید. sicret 18 بهمن 1389, 22:24حال اگر بخوایم اون Extesion رو به لیست نیو اضافه کنیم چه کار کنیم لیست نیو که می دونید چیه همون لیستی که توی راست کلیک هست مثلا باهاش میتونید پوشه ایجاد کنید با تشکر از زحمات شما:rose: the_king 19 بهمن 1389, 11:45حال اگر بخوایم اون Extesion رو به لیست نیو اضافه کنیم چه کار کنیم لیست نیو که می دونید چیه همون لیستی که توی راست کلیک هست مثلا باهاش میتونید پوشه ایجاد کنید با تشکر از زحمات شما:rose: ابتدا یک توضیحی در مورد مراحل تشکیل شدن یک فایل با ساختار مورد نظر می دهم : در پوشه Windows چند پوشه به نام های ShellNew و Templates وجود داره که اصولا نمونه خالی از فایل هایی که ساختارشون خاص است در اونها قرار می گیره، مثلا در مسیر زیر : C:WindowsShellNew C:ProgramDataTemplates اگر پسوند فایل مورد نظر شما می تواند 0 بایتی باشد که هیچ، مثلا یک فایل متنی txt می تواند 0 بایتی باشد، اما اگر نمونه خالی آن فایل نیاز به محتویات خاصی دارد، یک نمونه از آن فایل را در پوشه ShellNew ذخیره کنید، مثلا : C:WindowsShellNewwwqfile.wwq ما مسیر این فایل را در Registry ذخیره خواهیم کرد تا زمانی که فایل جدیدی از نوع wwq ایجاد شد، یک کپی از این فایل در داخلش قرار گیرد. پارامتر اول تابع زیر پسوند فایل (مثلا wwq) و پارامتر دوم مسیر فایل نمونه (مثلا C:WindowsShellNewwwqfile.wwq) است که می تواند "" هم باشد : Private Sub AddNewExtension(ByVal extension As String, ByVal sample As String) Dim classes As Microsoft.Win32.RegistryKey Dim reg As Microsoft.Win32.RegistryKey Dim regNew As Microsoft.Win32.RegistryKey classes = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SoftwareClasses", True) reg = classes.CreateSubKey(extension + ".Files") regNew = reg.CreateSubKey("ShellNew") If sample.Length = 0 Then regNew.SetValue("NullFile", "") Else regNew.SetValue("FileName", sample) End If regNew.Close() reg.Close() classes.Close() End Sub مثلا : AddNewExtension("wwq", "") گمان کنم برای مشاهده کردن نتیجه نیاز به Restart کردن ویندوز باشد. sicret 19 بهمن 1389, 12:45این که عمل نکرد آفای سعید شاید کدش مشکل دارد:rose: the_king 19 بهمن 1389, 19:39این که عمل نکرد آفای سعید شاید کدش مشکل دارد:rose: عذر می خوام، مشکل در تابع AddNewExtension از این سطر بود : reg = classes.CreateSubKey(extension + ".Files") لطفا به این کد تغییرش دهید : reg = classes.CreateSubKey("." + extension) سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 339]