デルフィ:プログラムの実行と、CMD からの内部プロシージャ/関数の呼び出し、または関連する拡張機能の Doubleclick の使用
-
18-09-2019 - |
質問
それで、最近、両方のパラメータが同じである場合に、プログラムがどちらの方法で呼び出されたかを判断するいくつかの問題を実行しました。次のようなものです。/何か/何か。ルーンタイムにアイコンをプログラムに関連付け、cmdを使用してそれを呼び出すことができますが、関連付けられたファイル(アイコン付き)をダブルクリックすると、プログラムは単に開きますが、必要なトリガー/属性/パラメータがないため、必要なロチンを呼び出しません実行が実行ではなくダブルクリックで行われた場合...> アプリ名.exe /何か /何か。
簡単な例を挙げるか、必要な関数などをすべて理論的に書いていただけますか。
現在、ご想像のとおり、ParamStr / ParamCount / blablabla / FindCMDLineSwitch / およびその他の関数を使用しています。しかし ...まだ ...:(
解決
あなたは少し説明することはできますか?
私はがはアクション#1を行うことができるようにしたいと思うなら、「mydocument.ext」、およびアクション#2のためのドキュメントアイコン上のユーザdoubleclicksであれば、彼のタイプ
appname.exe mydocument.exe
ダブルクリックは、シェルがレジストリ内の関連する「コマンド文字列を」持っている「オープン」動詞を、実行していきます。あなたの最善の策は何かに、このコマンド文字列を設定することがあるような...
MyProgram.exe "%1" /doubleclicked
...そして/実行時にフラグをダブルクリックさを確認してください。明らかに、 このオプションを「/ダブルクリックさ」が、それはシェルが動作する方法です。
を使用してコマンドを入力してユーザーを防ぐことができます方法はありません他のヒント
Roddy が示唆しているように、パラメーター スイッチが唯一の信頼できる解決策だと思います。ただし、ユーザーが独自のショートカットを作成する場合、これはニーズに合わない可能性があることに注意してください。
つまりユーザーがコマンド ラインに「ドキュメント」を含むショートカットを作成した場合、それをコマンド ラインの呼び出しとして扱うか、「ダブルクリック」として扱うかを指定します。私の推測では後者です。
前者であれば、ここで読むのをやめても構いません。:)
しかし、もしそれが は 後者の場合、必要な動作を (より) 確実に得るために、もう少し作業が必要になる場合があります。
これには、コマンド ライン スイッチを使用して次のことを示す必要があります。 コマンドライン起動, ダブルクリックで起動するのではなく、「効果的に」ダブルクリックする方法は複数ありますが、コマンド ラインから何かを実行する方法は 1 つだけです。つまり、コマンド ラインを使用するだけです。([スタート]メニュー -> [ファイル名を指定して実行]を検討します...ちなみに、コマンドライン起動になります。うんうん)
したがって、私であれば、アプリケーション用のコマンドライン固有のランチャーを作成します。コマンド ライン ランチャーは、実際には、指定されたコマンド ラインを取得し、実際のアプリケーション実行可能ファイルを呼び出す前に追加のパラメーターを追加するだけの非常に単純なコードです。
例えば
myapp param1 param2
これは単に ShellExecute を効果的に呼び出すだけです。
myappgui パラメータ1 パラメータ2 /cmd
私自身は、実行可能ファイルが 2 つあることについてはあまり気にしていません。ユーザーは、GUI 経由でアプリを呼び出すときに、「実際の」アプリを表す実行ファイルの実際の名前にはあまり関心がありません。もちろん、その GUI 呼び出しでは、その実行ファイルの名前を知る必要はありません。 、または名前を知る必要があります。ファイルタイプの関連付けやショートカットなどはすべて「実際の」ファイルを直接ポイントしているだけです myappgui.exe, 、 それよりも myapp.exe
コマンドラインリファレンスは単にユーザーに次のコマンドを使用するよう指示するだけです。 myapp.exe コマンドラインからアプリを起動します。
アプリケーションでは、コマンド ライン スイッチが見つかった場合、コマンド ライン ランチャー アプリケーション経由で起動されたことがわかります。それ以外の場合は、ダブルクリック/GUI による起動である必要があります。
大多数のユーザーにとっては、2 つの exe が関係していることを知る必要すらないかもしれません。いずれにせよ、ユーザーがあなたのテクニックを発見した場合、それがどのようなものであっても、ユーザーが望む目的を達成するためにコマンドラインを作成することでそのテクニックを偽装できることを受け入れなければなりません。
それが重要な場合は、コマンド ライン ランチャーのアプローチを使用すると、おそらくメカニズムを発見する可能性が少し低くなります。実行可能ファイルが 2 つあることを知っているだけでは十分ではありません。また、コマンド ラインで使用するコマンド ライン スイッチについても知る必要があります。ランチャーが追加 - 使用したばかりの場合 myappgui.exe コマンドラインランチャーを使用せずにコマンドラインから直接 myapp.exe, 、その後も、GUI から起動されたかのように応答します。
一方、スイッチを使用して GUIの起動 その必要なスイッチを「パブリックビュー」に設定する必要があります。