سوال در مورد vb.net

sicret

Member
می خواستم بدانم که چجوری می تونم یه پسوند فایل داشته باشم که وقتی روی اون کلیک میشه برنامه من باز بشه و محتویات اون فایل رو بتونم بهش دسترسی پیدا کنم
برای مثال وقتی روی یک فایل که پسوندش doc است کلیک می کنیم برنامه ورد مایکروسافت اجرا می شود منم می خوام مشابه همین کارو توی وی بی دات نت انجام بدم:rose:
 

the_king

مدیرکل انجمن
می خواستم بدانم که چجوری می تونم یه پسوند فایل داشته باشم که وقتی روی اون کلیک میشه برنامه من باز بشه و محتویات اون فایل رو بتونم بهش دسترسی پیدا کنم
برای مثال وقتی روی یک فایل که پسوندش 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("Software\Classes", 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("shell\open\command")
        regCommand.SetValue("", """" + appPath + """ ""%1""")
        regCommand.Close()
        reg.Close()
        classes.Close()
    End Sub

سه پارامتری که بایستی مشخص بشه به ترتیب پسوند (مثلا txt) ، نام پسوند (مثلا Text Documents) و
مسیر آیکون آن است (مثلا "C:\MyApp.exe" یا "C:\My Icons\Icon1.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

Member
حال اگر بخوایم اون Extesion رو به لیست نیو اضافه کنیم چه کار کنیم لیست نیو که می دونید چیه همون لیستی که توی راست کلیک هست مثلا باهاش میتونید پوشه ایجاد کنید با تشکر از زحمات شما:rose:
 

the_king

مدیرکل انجمن
حال اگر بخوایم اون Extesion رو به لیست نیو اضافه کنیم چه کار کنیم لیست نیو که می دونید چیه همون لیستی که توی راست کلیک هست مثلا باهاش میتونید پوشه ایجاد کنید با تشکر از زحمات شما:rose:

ابتدا یک توضیحی در مورد مراحل تشکیل شدن یک فایل با ساختار مورد نظر می دهم :
در پوشه Windows چند پوشه به نام های ShellNew و Templates وجود داره که اصولا نمونه خالی از فایل هایی که
ساختارشون خاص است در اونها قرار می گیره، مثلا در مسیر زیر :
کد:
C:\Windows\ShellNew
C:\ProgramData\Templates
اگر پسوند فایل مورد نظر شما می تواند 0 بایتی باشد که هیچ، مثلا یک فایل متنی txt می تواند 0 بایتی باشد، اما
اگر نمونه خالی آن فایل نیاز به محتویات خاصی دارد، یک نمونه از آن فایل را در پوشه ShellNew ذخیره کنید، مثلا :
کد:
C:\Windows\ShellNew\wwqfile.wwq

ما مسیر این فایل را در Registry ذخیره خواهیم کرد تا زمانی که فایل جدیدی از نوع wwq ایجاد شد، یک کپی از این
فایل در داخلش قرار گیرد.

پارامتر اول تابع زیر پسوند فایل (مثلا wwq) و پارامتر دوم مسیر فایل نمونه (مثلا C:\Windows\ShellNew\wwqfile.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("Software\Classes", 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 کردن ویندوز باشد.
 

the_king

مدیرکل انجمن
این که عمل نکرد آفای سعید شاید کدش مشکل دارد:rose:

عذر می خوام، مشکل در تابع AddNewExtension از این سطر بود :

کد:
        reg = classes.CreateSubKey(extension + ".Files")

لطفا به این کد تغییرش دهید :

کد:
        reg = classes.CreateSubKey("." + extension)
 

جدیدترین ارسال ها

بالا