0

したがって、最近、プログラムがどちらの方法で呼び出されたかを判断する際に、パラメータが同じであるかどうかを判断する際に問題が発生しました。たとえば、/ something/somethingのようになります。runetimeでアイコンをプログラムに関連付け、cmdを使用して呼び出すことができますが、関連付けられたファイル(アイコンを使用)でdoubleclikcを実行すると、プログラムは単に開きますが、必要なトリガー/属性/パラメーターがないため、必要なrotineを呼び出しません実行がダブルクリックされた場合、実行ではなく...> appname.exe / something/something。

簡単な例を挙げたり、必要な関数などを使って理論的にすべてを記述したりできますか。

現在、ご想像のとおり、ParamStr / ParamCount / blablabla /FindCMDLineSwitch/およびその他の関数を使用しています...しかし...それでも...:(

4

2 に答える 2

5

少し説明してもらえますか?

ユーザーが「mydocument.ext」のドキュメントアイコンをダブルクリックした場合はアクション#1を実行し、ユーザーが入力した場合はアクション#2を実行できるようにしたいと思います。

appname.exe mydocument.exe

ダブルクリックすると、シェルは「open」動詞を実行します。この動詞には、レジストリに「コマンド文字列」が関連付けられています。最善の策は、このコマンド文字列を次のように設定することです...

MyProgram.exe "%1" /doubleclicked

...次に、実行時に/doubleclickedフラグを確認します。明らかに、ユーザーが「/ doubleclicked」オプションを使用してコマンドを入力するのを防ぐ方法はありませんが、それがシェルの動作方法です。

于 2009-08-16T20:04:47.787 に答える
1

Roddyが示唆しているように、パラメータスイッチが唯一の信頼できる解決策だと思います。ただし、ユーザーが独自のショートカットを作成する場合、これはニーズに合わない可能性があることに注意してください。

つまり、ユーザーがコマンドラインに「ドキュメント」を含むショートカットを作成した場合、それをコマンドライン呼び出しまたは「ダブルクリック」として処理しますか。私の推測では、後者です。

前者の場合は、ここで読むのをやめることができます。:)

しかし、後者の場合、必要な動作を(より)確実に取得するために、もう少し作業を加える必要があるかもしれません。

これには、ダブルクリック起動ではなくコマンドラインスイッチを使用してコマンドライン起動を示す必要があります。これは、ダブルクリックを「効果的に」実行する方法は複数ありますが、コマンドラインから何かを実行する方法は1つだけです。つまり、コマンドライン!(ちなみに、スタートメニュー->実行...はコマンドライン起動だと思います。ymmv)

したがって、私であれば、アプリケーション用のコマンドライン固有のランチャーを作成します。コマンドラインランチャーは、実際には、実際のアプリケーション実行可能ファイルを呼び出す前に、指定されたコマンドラインを取得し、追加のパラメーターを追加するだけの非常に単純なコードです。

例えば

myapp param1 param2

これは、ShellExecuteを効果的に呼び出すだけです。

myappgui param1 param2 / cmd

GUIを介して呼び出すときに、ユーザーが「実際の」アプリを表すexeの実際の名前にあまり関心がないため、私自身は2つの実行可能ファイルを使用することにあまり関心がありません。 、または名前を知る必要があります。ファイルタイプの関連付けやショートカットなどはすべて、myapp.exeではなく、「実際の」myappgui.exeを直接指しているだけです

また、コマンドラインリファレンスは、myapp.exeを使用してコマンドラインからアプリを呼び出すようにユーザーに指示するだけです。

アプリケーションで、コマンドラインスイッチが見つかった場合は、コマンドラインランチャーアプリケーションを介して起動されたことがわかります。それ以外の場合は、ダブルクリック/GUI起動である必要があります。

ユーザーの大多数に関する限り、2つのexeが関係していることを知る必要さえないかもしれません。いずれにせよ、ユーザーがあなたのテクニックを発見した場合(どちらを選択しても)、コマンドラインを作成してユーザーが望む目的を達成することでそれをスプーフィングできることを受け入れる必要があります。

それがあなたにとって重要である場合、コマンドラインランチャーのアプローチはおそらく彼らがメカニズムを発見する可能性を少し低くします-2つの実行可能ファイルがあることを知っているだけでは十分ではありません-彼らはまたあなたのコマンドラインのコマンドラインスイッチを知る必要がありますランチャーは追加します-コマンドラインランチャーmyapp.exeを使用せずに、コマンドラインから直接myappgui.exeを使用した場合でも、GUIから起動されたかのように応答します。

一方、GUIの起動を示すためにスイッチを使用するには、必要なスイッチを「パブリックビュー」に配置する必要があります。

于 2009-08-17T03:52:02.657 に答える