【问题标题】:Delphi: Program Execution and internal procedure/function calling from CMD or using Doubleclick on associated extensionDelphi:从 CMD 或使用双击关联扩展的程序执行和内部过程/函数调用
【发布时间】:2010-11-20 02:09:08
【问题描述】:

所以 - 最近我遇到了一些问题,以确定从哪种方式调用程序,如果两次参数相同 - 例如:/something /something. 我在运行时将图标与程序相关联,我可以使用 cmd 来调用它,但是,每当我双击关联文件(带有图标)时,程序就会打开,但不会调用所需的 rotine,因为我没有必要的触发器/属性/参数如果执行是双击而不是运行...> appname.exe /something /something.

你能举个简单的例子吗?或者理论上写的都是所需的功能等。

目前,您可以猜到,我使用 ParamStr / ParamCount / blablabla / FindCMDLineSwitch / 和其他一些函数......但是......仍然...... :(

【问题讨论】:

    标签: delphi parameters function cmd procedures


    【解决方案1】:

    你能解释一下吗?

    认为如果用户双击“mydocument.ext”的文档图标,您希望能够执行操作#1,如果他键入,则执行操作#2

    appname.exe mydocument.exe
    

    双击将使外壳程序运行“打开”动词,该动词在注册表中具有关联的“命令字符串”。最好的办法是将此命令字符串设置为...

    MyProgram.exe "%1" /doubleclicked
    

    ... 然后在运行时检查 /doubleclicked 标志。明显地, 没有办法阻止用户使用“/doubleclicked”选项输入命令,但这就是 shell 的工作方式。

    【讨论】:

    • 是的。这正是我所需要的。嗯……该死,但我认为这个基本的 /dl 参数毕竟是最好的解决方案……
    • 同意Argalatyr。这个问题在阅读罗迪的回答之前我什么都不懂。
    【解决方案2】:

    正如 Roddy 所建议的,参数切换是我认为唯一可靠的解决方案。但请注意,如果用户创建自己的快捷方式,这可能不适合您的需求。

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

    如果是前者,那么您可以在此处停止阅读。 :)

    但如果它后者,那么您可能需要多做一些工作以(更)可靠地获得您想要的行为......

    这将涉及使用命令行开关来指示命令行启动,而不是双击启动,因为有多种“有效”双击的方法,但只有一种方法可以运行某些东西从命令行 - 也就是说,使用命令行! (顺便说一下,我认为 Start Menu -> Run... 是命令行启动。ymmv)

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

    例如

    myapp param1 param2

    它只是有效地调用 ShellExecute:

    myappgui param1 param2 /cmd

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

    您的命令行参考只是指示用户使用 myapp.exe 从命令行调用您的应用。

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

    就您的大多数用户而言,他们甚至可能永远不需要知道其中涉及两个 exe。在任何情况下,您都必须接受,如果/当用户发现您的技术时(无论您选择哪种方式),他们都可以通过制造命令行来实现他们想要的任何目的来欺骗它。

    如果这对您很重要,命令行启动器方法可能会降低他们发现该机制的可能性 - 知道有两个可执行文件是不够的 - 他们还需要知道命令行开关您的命令行启动器添加 - 如果他们只是直接从命令行使用 myappgui.exe,而不使用命令行启动器 myapp.exe,那么它仍然会响应就好像它是从 GUI 启动的一样!

    另一方面,使用开关来指示GUI 启动需要将所需的开关置于“公共视图”上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 2014-04-21
      • 1970-01-01
      • 2012-12-20
      • 2013-11-23
      • 2017-08-06
      相关资源
      最近更新 更多