如何在程序里实现双击打开一个.ica文件?双击一个.ica 文件,就可以打开这个文件,好象是一个应用程序的窗口.
我现在想在程序中用程序实现这个双击打开?
如何操作呢?
我现在想在程序中用程序实现这个双击打开?
如何操作呢?
解决方案 »
- 利用Socket实现局域网内文件数据库的数据查询?
- 客户端请求config文件下载失败,IIS要如何配置?下午升级,急啊!
- bitsbird 多谢解决了smartphone的问题,请进来接分
- C#下读取UDL文件连接数据库的问题,请各位高手赏光,急!!!!
- “/”应用程序中的服务器错误。 其中的堆栈跟踪怎么解读??
- 获取webbrowser显示的内容到粘贴板
- c# postMessage 想传递不同的参数类型??
- 小问题
- 谁有<<ADO.NET高级编程>>(Professional ADO.NET)的源代码
- 在C#中如何调用Delphi写的COM组件?
- VS2005 无法启动
- C# winform 打开 Excel 后,如何释放其占用的资源?
如果是的话,告诉我邮箱,我给你一个例子。
[email protected]
hkey_Classes_Root
下面新建一个.ica的项
然后新建一个default的 value=ica的键值 然后再现键一个tlh的项
然后在下面新建一个shell的项
然后在下面再新建一个open的项
然后在下面再新建一个command的项目
然后在下面新建一个defalut的键值 value=""\Program Files\TBS\PatchClient\你的应用程序.exe"" ""%%1""
这样你在运行点.ica文件的时候会把路径传给应用程序.exe
从b.exe的 main(string[] args)里面取得 然后给你清洁工的代码........其实就你在程序打包的时候写进去就可以了 using Microsoft.Win32;
using System.Runtime.InteropServices; [DllImport("shell32.dll")]
private static extern void SHChangeNotify(uint wEventId, uint uFlags,
IntPtr dwItem1, IntPtr dwItem2);
private const uint SHCNE_ASSOCCHANGED = 0x08000000;
private const uint SHCNF_IDLIST = 0x0000;
private const uint SHCNF_FLUSH = 0x1000; private bool registryShell = false; // 是否关联文件 private void RegistryShell()
{
registryShell = true;
RegistryKey vRegistryKey = Registry.ClassesRoot.CreateSubKey(".xxx");
vRegistryKey.SetValue("", "xxx Document");
vRegistryKey = Registry.ClassesRoot.CreateSubKey(
@"xxx Document\shell\open\command",
RegistryKeyPermissionCheck.ReadWriteSubTree);
vRegistryKey.SetValue("", Application.ExecutablePath + " \"%1\"");
vRegistryKey = Registry.ClassesRoot.CreateSubKey(
@"xxx Document\DefaultIcon",
RegistryKeyPermissionCheck.ReadWriteSubTree);
vRegistryKey.SetValue("", Application.ExecutablePath + ",0"); SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST ¦ SHCNF_FLUSH,
IntPtr.Zero, IntPtr.Zero);
} private void UnregistryShell()
{
registryShell = false;
bool changeRegistry = false;
RegistryKey vRegistryKey = Registry.ClassesRoot.OpenSubKey(".xxx");
if (vRegistryKey != null)
{
changeRegistry = true;
vRegistryKey.Close();
Registry.ClassesRoot.DeleteSubKeyTree(".xxx");
} vRegistryKey = Registry.ClassesRoot.OpenSubKey("xxx Document");
if (vRegistryKey != null)
{
changeRegistry = true;
vRegistryKey.Close();
Registry.ClassesRoot.DeleteSubKeyTree("xxx Document");
}
if (changeRegistry)
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST ¦ SHCNF_FLUSH,
IntPtr.Zero, IntPtr.Zero);
} private bool IsRegistryShell()
{
RegistryKey vRegistryKey = Registry.ClassesRoot.OpenSubKey(".xxx");
if (vRegistryKey == null) return false;
vRegistryKey = Registry.ClassesRoot.OpenSubKey(
@"xxx Document\shell\open\command");
if (vRegistryKey == null) return false;
if (vRegistryKey.GetValue("").ToString().ToLower() !=
Application.ExecutablePath.ToLower() + " \"%1\"") return false;
return true;
}
// 处理程序参数
private void Form1_Load(object sender, EventArgs e)
{
string[] vCommands = Environment.GetCommandLineArgs();
if (vCommands.Length > 1)
{
OpenDocument(vCommands[1]);
}
}