代码之家  ›  专栏  ›  技术社区  ›  HX_unbanned

Delphi:程序执行和内部过程/函数从命令调用或在相关扩展上使用DoubleClick

  •  0
  • HX_unbanned  · 技术社区  · 15 年前

    所以-最近,我遇到了一些问题,如果两个时间参数相同,那么确定从哪种方式调用程序,比如:/something/something。 我在runetime把icon和程序关联起来,我可以使用cmd来调用它,但是,每当我在关联文件上双击(用图标),program就会打开,但不会调用所需的rotine,因为我没有必要的触发器/属性/参数,如果执行是双击的,就不会运行……>应用程序名.exe/something/something。

    你能举出一个简单的例子,或者理论上写下所有要求的函数等吗?

    目前,正如您所猜测的,我使用了paramstr/paramcount/blablabla/findcmdlineswitch/和其他一些函数…但是…还是…:(

    2 回复  |  直到 15 年前
        1
  •  5
  •   Roddy    15 年前

    你能解释一下吗?

    认为 如果用户双击“mydocument.ext”的文档图标,则可以执行操作1;如果用户键入,则可以执行操作2。

    appname.exe mydocument.exe
    

    双击将使shell运行“open”动词,该动词在注册表中具有关联的“command string”。您最好将此命令字符串设置为…

    MyProgram.exe "%1" /doubleclicked
    

    …然后在运行时检查/doubleClicked标志。显然, 您无法阻止用户使用“/doubleClicked”选项键入命令,但这是shell的工作方式。

        2
  •  1
  •   Deltics    15 年前

    正如罗迪所说,参数开关是我认为唯一可靠的解决方案。但是请注意,如果用户创建了自己的快捷方式,这可能不适合您的需要。

    例如,如果用户创建的快捷方式在命令行中包含一些“文档”,您希望将其视为命令行调用还是“双击”。我猜是后者。

    如果是前者,那么你可以在这里停止阅读。:)

    但是如果 而后者,你可能需要投入更多的工作来(更)可靠地获得你想要的行为……

    这需要使用命令行开关来指示 命令行启动 ,而不是双击启动,因为有多种方法可以“有效地”双击,但只有一种方法可以从命令行运行某些内容——也就是说,使用命令行!(我认为“开始”菜单->运行…顺便说一下,是命令行启动。YMMV)

    所以,如果是我,我会为应用程序创建一个特定于命令行的启动程序。命令行启动程序实际上是一个非常简单的代码位,它接受给定的命令行,并在调用实际应用程序可执行文件之前简单地附加一个附加参数:

    例如

    myapp参数1参数2

    它简单地调用shellexecute,有效地:

    迈阿普吉 PARAM1 PARAM2 /CMD

    我自己也不会太担心有两个可执行文件,因为当用户通过GUI调用它时,他们更不关心代表你的“真实”应用程序的exe的实际名称,因为当然,它的GUI调用不涉及知道或需要知道名称。您的文件类型关联和快捷方式等都直接指向“real” MyAppGui.EXE 而不是 MyApp.EXE

    您的命令行引用只是指导用户使用 MyApp.EXE 从命令行调用应用程序。

    在应用程序中,如果找到命令行开关,那么它知道它是通过命令行启动程序启动的,否则它一定是双击/gui启动的。

    就大多数用户而言,他们甚至不需要知道涉及两个exe。在任何情况下,如果用户发现了你的技术(无论你选择哪种技术),你必须接受,他们可以通过制造命令行来欺骗你,以达到他们想要的任何目的。

    如果这对您很重要,那么命令行启动程序的方法可能会降低他们发现机制的可能性——知道有两个可执行文件还不够——他们还需要知道命令行启动程序添加的命令行开关——如果他们刚刚使用 MyAppGui.EXE 直接从命令行,不使用命令行启动程序 MyApp.EXE ,然后它仍然会像从GUI启动一样响应!

    另一方面,使用开关指示 图形用户界面启动 必须将所需的开关置于“公共视图”上。