下面有兩個函數,壹個是關聯文件,壹個是刪除文件關聯。思路是這樣的,在程序安裝後第壹次運行程序時使用SaveReg()方法關聯文件,以後就不自動關聯了。在Form_Load事件裏先判斷是不是第壹次運行,然後用:
SaveReg(@"C:\youEXE.exe", ".jpg");
註意,上面的“C:\youEXE.exe”換成妳的程序的絕對地址,地址可以用代碼來獲取。
這樣只是關聯了文件,不知道妳有沒有在main函數裏設置獲取命令的語句,把Main()函數改成:
static void Main(string[] args)
{
}
不知道妳對這個熟不熟,當文件關聯後(比如.jpg文件),雙擊.jpg文件打開,程序的主函數會接受到打開命令,這些命令的字符串就存儲在數組string[] args裏面。其中args[0]裏是命令的條數,args[1]是第壹條命令,args[2]是第壹條命令的參數。比如雙擊.jpg文件打開後,這裏的:
args[0]=3;
args[1]="open";
args[2]="圖片地址";
那麽可以把args[2]中的圖片地址顯示出來就實現了妳要的雙擊文件打開了。
我暈,打字真累。。
下面的是關聯文件的兩個方法:
//註意要引用:using Microsoft.Win32;
/// <summary>
/// 設置文件關聯
/// </summary>
/// <param name="p_Filename">程序的名稱</param>
/// <param name="p_FileTypeName">擴展名 </param>
public static void SaveReg(string p_Filename,string p_FileTypeName)
{
RegistryKey _RegKey = Registry.ClassesRoot.OpenSubKey("", true); //打開註冊表
RegistryKey _VRPkey = _RegKey.OpenSubKey(p_FileTypeName);
if (_VRPkey != null) _RegKey.DeleteSubKey(p_FileTypeName, true);
_RegKey.CreateSubKey(p_FileTypeName);
_VRPkey = _RegKey.OpenSubKey(p_FileTypeName, true);
_VRPkey.SetValue("", "Exec");
_VRPkey = _RegKey.OpenSubKey("Exec", true);
if (_VRPkey != null) _RegKey.DeleteSubKeyTree("Exec"); //如果等於空 就刪除註冊表DSKJIVR
_RegKey.CreateSubKey("Exec");
_VRPkey = _RegKey.OpenSubKey("Exec", true);
_VRPkey.CreateSubKey("shell");
_VRPkey = _VRPkey.OpenSubKey("shell", true); //寫入必須路徑
_VRPkey.CreateSubKey("open");
_VRPkey = _VRPkey.OpenSubKey("open", true);
_VRPkey.CreateSubKey("command");
_VRPkey = _VRPkey.OpenSubKey("command", true);
string _PathString = "\"" + p_Filename + "\" \"%1\"";
_VRPkey.SetValue("", _PathString); //寫入數據
}
/// <summary>
/// 刪除文件關聯
/// </summary>
/// <param name="p_FileTypeName">擴展名 .VRD </param>
public static void DelReg(string p_FileTypeName)
{
RegistryKey _Regkey = Registry.ClassesRoot.OpenSubKey("", true);
RegistryKey _VRPkey = _Regkey.OpenSubKey(p_FileTypeName);
if (_VRPkey != null) _Regkey.DeleteSubKey(p_FileTypeName, true);
if (_VRPkey != null) _Regkey.DeleteSubKeyTree("Exec");
}