没办法了,发了N多贴子,等了几个月都没有一个好办法解决,最好刺激一下CSDN里的高手吧。
我的问题是这样:
通过打开方式打开指定的文件,又能控制用户在打开方式里选择程序的关闭等进程操作。
在C#里想给程序指定一个文件名,比如1.txt 或1.doc 当用户执行一个操作时会弹出一个“打开方式”对话框,让用户可以选择一个系统内的程序来打开这个文件,目前我想到两种方式,一种是自己写一个与Windows打开方式一样的窗口,通过查找注册表来显示系统里安装的程序(问题是从注册表里查出来的程序列表和Windows里的内容不一样,名称,路径,图标都是问题)。另一种是调用rundll32 指定文件名来打开这个文件,因为调用windows的“打开方式”内容一样(只是当用户双击一个程序的时候C#代码就和这个程序断开联系了,因为不能得到rundll32的返回参数,也不知道用户到底选择用哪个程序打开我们指定的文件,也不能通过Process p=Process.Start("rundll32.exe", "shell32,OpenAs_RunDLL 1.txt"); 中的p来操作这个应用程序的线程,因为p对应的是rundll32 用户选择程序后rundll32就会自动关闭)。
这个问题困扰很多了,一直没有一个好的方案来解决这个问题(前题是我很菜,因为JAVA写这个代码的没有解决所以才学的C#)。
请高手帮帮忙吧,提提建议自己再憋也成。:)
我的问题是这样:
通过打开方式打开指定的文件,又能控制用户在打开方式里选择程序的关闭等进程操作。
在C#里想给程序指定一个文件名,比如1.txt 或1.doc 当用户执行一个操作时会弹出一个“打开方式”对话框,让用户可以选择一个系统内的程序来打开这个文件,目前我想到两种方式,一种是自己写一个与Windows打开方式一样的窗口,通过查找注册表来显示系统里安装的程序(问题是从注册表里查出来的程序列表和Windows里的内容不一样,名称,路径,图标都是问题)。另一种是调用rundll32 指定文件名来打开这个文件,因为调用windows的“打开方式”内容一样(只是当用户双击一个程序的时候C#代码就和这个程序断开联系了,因为不能得到rundll32的返回参数,也不知道用户到底选择用哪个程序打开我们指定的文件,也不能通过Process p=Process.Start("rundll32.exe", "shell32,OpenAs_RunDLL 1.txt"); 中的p来操作这个应用程序的线程,因为p对应的是rundll32 用户选择程序后rundll32就会自动关闭)。
这个问题困扰很多了,一直没有一个好的方案来解决这个问题(前题是我很菜,因为JAVA写这个代码的没有解决所以才学的C#)。
请高手帮帮忙吧,提提建议自己再憋也成。:)
解决方案 »
- 请问一下Crystal Report的排序方式为何??
- [C# 网络编程 高手请回答] 请问这两段代码有区别吗?
- 没有菜单栏的窗体不能移动
- 做一个类似QQ的自动登陆器,如何往其号码框和密码框输入呢?
- 关于c# form 里连续单击问题!
- vs 2008 新建项目出错!
- winform 文件上传,错误403
- 谁可以推荐几本C#的几本好书呢?或者是下载的网址?
- 新人学习C#时候遇到一个小问题,一直想不明白,是关于new的用法的
- 关于C# String.split(params char[] separator) 异常
- [急] 如何利用WebClient登陆163的邮件系统,取得地址字符串中的SID值???
- 使用jmail接收邮件,为何网页上不能显示出邮件正文内嵌入的图片
函数声明是这样的,它根本没有返回值
如果要弄的话,建议你别用C#,用C++或者Delphi,Hook住shell32.dll中的ShellExecuteExW,记住,只能用inline Hook,可以用lpExecInfo.hProcess获取进程句柄。
只得到这些数据,楼主你看需要些什么吧:
cbSize: DWORD;
fMask: ULONG;
Wnd: HWND;
lpVerb: PWideChar;
lpFile: PWideChar;
lpParameters: PWideChar;
lpDirectory: PWideChar;
nShow: Integer;
hInstApp: HINST;
{ Optional fields }
lpIDList: Pointer;
lpClass: PWideChar;
hkeyClass: HKEY;
dwHotKey: DWORD;
hIcon: THandle;
hProcess: THandle;
楼主真实的目的好像不止于此..
调用windows文件打开方式对话框
http://www.codeproject.com/KB/shell/openwith.aspx
调用windows文件打开方式对话框
http://www.codeproject.com/KB/shell/openwith.aspx
应该是的,我看就像是
我看了,因为没有返回值,好像和Process.start("rundll32.......")实现的功能一样