C#实现文件关联
和其他语言一样,C#实现文件关联同样需要直接操作注册表,即按规则分别设置文件扩展名,文档类型说明,友好名称,图标,调用方法等键值即可,网上随便查查就可以写出以下的代码。 using Microsoft.Win32; RegistryKey key = Registry.ClassesRoot.OpenSubKey(".jb");
if (key == null)
{
key = Registry.ClassesRoot.CreateSubKey(".jb");
key.SetValue("", "Jeebook.Reader.jb");
key.SetValue("Content Type", "application/jb"); key = Registry.ClassesRoot.CreateSubKey("Jeebook.Reader.jb");
key.SetValue("", "Jeebook Document"); RegistryKey keySub = key.CreateSubKey("DefaultIcon");
keySub.SetValue("", System.Windows.Forms.Application.StartupPath + "Jeebook.ico");
keySub = key.CreateSubKey("shell\\open\\command");
keySub.SetValue("", "\"" + System.Windows.Forms.Application.ExecutablePath + "\" \"%1\"");
} 相对来说,C#实现比较麻烦的是图标路径,一般文件类型注册的都是执行文件的资源,格式如下: 格式:, // 资源ID为正数,表示资源的索引号,否则为资源ID 在C++中很容易获取资源ID,但C#中还没搞清楚如何取道资源的ID,所以索性在程序执行目录下附带一个图标文件用于注册,这样倒也方便随时修改:) 此外,就是如何验证图标是否设置正确。现在的系统超爱缓存,除非LOG OFF级别的操作,否则手工修改注册表很难马上响应,当然通过程序调用应该刷新系统状态,这个下次有时间再研究吧 如果只是用于XP以下的程序,以上的代码就已经足够了。可惜的是,Vista以后引入了UAC,上面的代码在UAC下会弹出异常,这肯定不是我们希望的。 一种解决方法是通过创建一个Mainifest文件,添加以下脚本:
这样程序图标上会出现一个小盾牌,表示该程序需要在管理员模式下运行,每次运行都会自动弹出UAC的验证窗口。但这个对某些只是需要书写一次注册表的程序来说,每次都弹出提示是无法忍受的,那么如何能够通过代码弹出UAC验证窗口呢?
相关文档:
变量、常量及表达式变量和常量变量(静态、非静态、数组元素、值参数、引用参数、输出参数、局部变量)静态(static) 如 public static int x; 一旦静态变量所属的类被装载,直到包含该类的程序运行结束时它一直存在。非静态:不带有static修饰符声明的变量称为实例变量,如int a ;常量(attributes constnt-modifiers CO ......
利用WM_COPYDATA在应用程序间传递数据很简单,开销也小
一、传递数据部分
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace ThreeTorches
{
public struct Copydatastru ......
1.c++的到处函数只要在函数申明的时候加个导出关键字就可以了
2.参数类型问题,
一般的c++中char * 对应 c#中的string
而c++中 char **类型的参数对应c#中 ref string 这种一般都是用来返回字符串的!
3.函数入口问题,一般会出现 "找不到入口点" 这个问题不是由你引起的,而是系统自己把名字改了,改成什么样的名字建议你用 ......
大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功能呢?答案是肯定的,大家可以通过C#中的DllImport直接调用这些功能。
DllImport所在的名字空间 using System.Runtime.Inte ......