CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

用自己的程序关联EXE文件,可以启动自己的程序,也可以监视启动的程序,可是问题来了。。。

楼主keyb(不信风情)2003-12-02 23:44:59 在 Delphi / Windows SDK/API 提问

在注册表里改EXE的关联     "%1"   %*   为   MyApp   "%1"   %*  
  取将自己的程序程序的参数   paramstr(1)   +   paramstr(2)   +   ....  
  可是,但用户点控制面板时,就不能打开部分程序了。因为有的CPL   调用是有参数的。  
  就算我读完   paramcount   也不能取得最后的参数。怎么办? 问题点数:50、回复次数:29Top

1 楼rlpcdk()回复于 2003-12-03 08:42:29 得分 0

关注Top

2 楼jxc163(一寒)回复于 2003-12-03 08:48:04 得分 0

黑客程序,关注Top

3 楼mentalpatient(按时吃药)回复于 2003-12-03 11:51:00 得分 0

我靠   我试了一下   还真有这个问题   以前都没注意到!  
   
  我认为参数取不全   是不是和     "%1"   %*     格式有关  
  是不是在加一些符号,就能得到其余的参数。  
   
  有问题我们可以探讨一下。  
   
  Top

4 楼keyb(不信风情)回复于 2003-12-04 23:13:53 得分 0

关于这个问题,我继续试了下去,发现它居然会使各种版本的WINDOWS无法关机。  
  我想原因是因为MYAPP接管了RUNDLL32.EXE的运行后却又无法正确传递所有的参数给它。  
  有什么办法呢?期待先生们的指点   :)  
   
  另:  
  TO:mentalpatient  
  一般我会这样写:  
    for   i   :=   1   to   paramcount   -   1   do    
    begin  
        ....  
    end;  
    尤其有趣的是:  
    这次我调烦了,写了个     paramcount   +   100     ,嘿嘿,系统居然没让我去死,仍旧照常运行。  
  看来只有绕看这个办法了,那我怎么才能知道用户要运行RUNDLL32.EXE,然后立即解除关联呢?   天啊!我可不想为了这个去把“冰河”反汇编一次。  
   
  Top

5 楼angelface(§<@#$&^%$>§)回复于 2003-12-07 18:48:07 得分 0

修改注册表就行了  
  function   GetAssociation(const   DocFileName:   String):   String;  
  var  
      FileClass:   String;  
      Reg:   TRegistry;  
  begin  
      Result   :=   '';  
      Reg   :=   TRegistry.Create(KEY_EXECUTE);  
      Reg.RootKey   :=   HKEY_CLASSES_ROOT;  
      FileClass   :=   '';  
      if   Reg.OpenKeyReadOnly(ExtractFileExt(DocFileName))   then  
      begin  
          FileClass   :=   Reg.ReadString('');  
          Reg.CloseKey;          
      end;  
       
      if   FileClass   <>   ''   then    
      begin  
          if   Reg.OpenKeyReadOnly(FileClass   +   '\Shell\Open\Command')   then  
              begin  
                  Result   :=   Reg.ReadString('');  
                  Reg.CloseKey;  
              end;  
      end;  
         
      Reg.Free;  
  end;Top

6 楼liyangyao970(纳兰容若)回复于 2003-12-07 19:05:07 得分 0

upTop

7 楼keyb(不信风情)回复于 2003-12-07 19:22:51 得分 0

to   angelface  
      非常感谢您能这么详细的贴出一段文件关联的代码,可你自己试试,当您关联了EXE后出问题不?Top

8 楼smalltalk(老徐)回复于 2003-12-07 20:41:25 得分 0

关键是你这个MyApp写的好不好,对与大多数程序,你应该将参数在完全传递到后面的exe中。应该用CreateProcess来创建新的进程。Top

9 楼zhuxud(圣东方)回复于 2003-12-07 20:50:21 得分 0

markTop

10 楼keyb(不信风情)回复于 2003-12-09 20:50:54 得分 0

正是因为我的MyApp传不全所有参数,我才有此一问的呀  
  望能赐教Top

11 楼keyb(不信风情)回复于 2003-12-13 21:29:49 得分 0

各位,麻烦发表一下自己的看法吧。Top

12 楼hsgrass37301(零点)回复于 2003-12-14 23:44:52 得分 0

upTop

13 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2003-12-15 00:51:20 得分 0

参数有空的话要用“号包起来的  
  例如”参数   1“Top

14 楼ekin(风语者)回复于 2003-12-16 22:33:55 得分 0

var  
  lphKey:   HKEY;  
  sKeyName:   string;  
  sKeyValue:   string;  
  begin  
  sKeyName   :=   ′myfile′;  
  sKeyValue   :=   ′我的文档′;  
  RegCreateKey(HKEY—CLASSES—ROOT,  
    pchar(sKeyName),   lphKey);  
  RegSetValue(lphKey,   ′′,   REG—SZ,    
  pchar(sKeyValue),   0);  
  sKeyName   :=   ′.xyz′;  
  sKeyValue   :=   ′myfile′;  
  RegCreateKey(HKEY—CLASSES—ROOT,  
    pchar(sKeyName),   lphKey);  
  RegSetValue(lphKey,   ′′,   REG—SZ,  
    pchar(sKeyValue),   0);  
  sKeyName   :=   ′myfile′;  
  sKeyValue   :=   ′c:\Windows\NotePad.exe   %1′;  
  RegCreateKey(HKEY—CLASSES—ROOT,    
  pchar(sKeyName),   lphKey);  
  RegSetValue(lphKey,   ′shell\open\command′,   REG—SZ,  
  pchar(sKeyValue),   MAX—PATH);  
  end;  
  Top

15 楼redlegend_126_com(redlegend)回复于 2003-12-17 11:02:45 得分 0

对呀,每次都修改注册表,一旦运行的时候,传递进程序名称,然后修改注册表,然后在运行那个程序,然后再该回去,就这样就没有问题了!Top

16 楼keyb(不信风情)回复于 2003-12-18 19:48:37 得分 0

我再次说明一下,我的问题不是如何关联EXE文件,请各位老兄不要再贴这样的代码了。  
   
  同时,我也知道启动EXE之前要把改动的关联修改还原,完毕以后再改成我自己的关联。  
   
  我的问题是如何将启动EXE的参数传递完全。   或者是说启动CPL控制面板的。  
  希望真正做过这样改动的朋友赐教,谢谢!!  
          ~~~~~~~~  
  to   mentalpatient(按时吃药)   朋友:  
      谢谢你能自己亲自这样试验一下才回复我,谢谢!Top

17 楼mentalpatient(按时吃药)回复于 2003-12-19 16:49:29 得分 0

TO:keyb(不信风情)    
   
  关于开关机的问题,我试了一下,没有问题。  
   
  你开关机出现问题,我估计是命令行格式问题。  
   
  也就是在运行命令行时,包括文件名的部分要用"   "将文件路径河文件名括进去。  
   
  至于参数不全的问题,我也没能解决,我怀疑和参数个数有关,因为我试了一下,只要参数  
  小于等于4,就没有问题,否则参数会不全。Top

18 楼keyb(不信风情)回复于 2003-12-19 20:27:50 得分 0

to   按时吃药  
          帖子是我先发的,关机是因为一开始我只传递了一个参数过去,嘿嘿,当然关不了,不过  
  后来我解决了。但是这个参数问题一直困惑着我。烦啊。!!!!  
          另:你做程序很用心吗?  
          因为看了半天就你一个人亲自实践了这个问题,前面的几位老兄也太想当然了。嘿嘿Top

19 楼Gide(一针见血说实话)回复于 2003-12-19 21:41:44 得分 0

markupTop

20 楼lx47(离心)回复于 2003-12-21 11:15:46 得分 0

markTop

21 楼mentalpatient(按时吃药)回复于 2003-12-22 13:46:40 得分 0

TO:keyb(不信风情)兄  
   
  你是不是想做一个类似木马的程序,我们可以一起探讨一下。  
  我的MSN   xuyinghot@hotmail.com.Top

22 楼TempterX(兄弟)回复于 2003-12-22 19:10:47 得分 0

请把你传递参数的完整代码贴出来.Top

23 楼jinjiajun(洛林)回复于 2003-12-22 21:29:44 得分 0

关注Top

24 楼keyb(不信风情)回复于 2003-12-24 17:15:57 得分 0

to   mentalpatient(按时吃药)    
      My   chinese   input   doesn't   work.  
      My   QQ   is   5590538.   please   add   my   name.  
  Top

25 楼keyb(不信风情)回复于 2003-12-25 19:43:58 得分 0

我的QQ是48890959  
  约个时间,聊聊吧Top

26 楼mentalpatient(按时吃药)回复于 2003-12-26 14:01:33 得分 0

呵呵~~~~~~~~~~~~~~  
   
  不好意思,我没有QQ,只有UC和MSN  
  你能不能用这两个,或注册一个。  
  Top

27 楼keyb(不信风情)回复于 2003-12-28 13:43:03 得分 0

我的UC是:48930548     聊聊吧  
  Top

28 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-12-28 14:19:44 得分 50

GetCommandLine();传给CreateProcess的第二个参数就可以了Top

29 楼keyb(不信风情)回复于 2004-01-02 18:58:44 得分 0

终于看到正确答案了,谢谢你   Eastunfail(浴血雏龙)==(恶鱼杀手)   (Top

相关问题

  • 文件关联
  • 监视文件夹
  • 怎样监视文件!
  • 共享文件夹监视
  • 文件关联与访问
  • Internet文件怎样关联
  • 怎么来关联文件。
  • 文件关联相关
  • 定义文件关联????
  • windows2000 文件关联问题

关键词

  • 文件
  • root
  • 程序
  • skeyvalue
  • fileclass
  • lphkey
  • 参数
  • skeyname
  • 关联
  • reg

得分解答快速导航

  • 帖主:keyb
  • Eastunfail

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo