用C#编写一个程序,要求打开一个自己画有圆的图片,可以测量出圆的直径 80

 我来答
axqsp79
2010-12-23 · TA获得超过1484个赞
知道答主
回答量:281
采纳率:100%
帮助的人:247万
展开全部
VS的安装部署不太好用,如果要在安装的时候就进行文件关联可以去找一些专门的安装打包工具来打包,在安装的时候可以设置用命令来修改注册表进行文件关联。下面要说的方法不是这种。

下面有两个函数,一个是关联文件,一个是删除文件关联。思路是这样的,在程序安装后第一次运行程序时使用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");

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式