0

プログラムCintaNotesに「Windowsの起動時に実行」オプションを追加する必要がありますが、その「クリーンさ」を犠牲にしたくありません。これは100%ポータブルなフリーウェアであり、システムに痕跡を残してはなりません。スタートアップショートカットから実行を自動検出し、システムトレイに自動的に最小化するというアイデアを思いつきました。それを行う方法はありますか?私はC++と生のWinapiを使用しています。

したがって:-レジストリへの書き込みはありません-コマンドラインパラメータはありません

ありがとう!

UPD:問題は、システムトレイを最小化する方法ではありません!問題は、レジストリとコマンドラインパラメータを使用せずに、プログラムを通常の実行とスタートアップフォルダのショートカットから実行することをどのように区別できるかということです。

4

4 に答える 4

3

あなたの「清潔さ」はせいぜい人工的な構造のようです。スタートアップ フォルダーにショートカットを作成するようにユーザーに指示している場合は、既に足跡を残していることになります (正直なところ、「myprog.exe」と「myprog.exe -m」の違いはほとんどありません)。 . その場合、どこから走っているかを自動的に検出しようとするよりも簡単な方法がいくつかあります。

プログラムにメニューオプションを提供するだけで(「インストール」)、必要なプログラムエントリ(スタート、すべてのプログラム、CintaNotes)を含む固定ディスクの場所(フラッシュドライブではなく)にソフトウェアがインストールされます。

As part of that process (or even after install), you can let them specify "Start with Windows" and then you create the start-up folder shortcut for the user with a command line option so your program can tell if it's running that way. There's no point in allowing "Start with Windows" unless the program's available (i.e., on the fixed disk, not the flash drive).

Your user need never have to worry about creating shortcuts at all, let alone ones with parameters. And this gives your program the control over how it's run - two modes, "installed" (and start minimized) or "running without installing first" (and start normal).

プログラムを起動するスタートアップ フォルダー項目がそのショートカットである可能性が高いため、実行可能ファイルのディレクトリを見つけるようなことはうまくいきません。そのため、そのパスはありません。

これは、間違った質問をする典型的なケースだと思います。あなたの特定の質問に答えて、私は言います: いいえ、いくつかのコマンド ライン パラメーターなしで、スタートアップ フォルダー エントリから起動されたことを伝える方法はありません。しかし、私は前に間違っていたので、妻に聞いてください:-)。他の誰かが方法を知っているかもしれません。

コメントには十分なスペースがないため、これを編集に追加します。

あなたが尋ねる:

プログラムがフラッシュドライブから実行されていることを検出したときに、「Windows の起動時に開始」オプションを無効にすることについてどう思いますか? 見分ける方法はあると思います。

インストールするまで自動実行を許可する意味がないので、これは良い考えです (フラッシュドライブがそこにない可能性があるため)。1 つの可能性:

1/ フラッシュから実行する場合、実行可能ファイルをダブルクリックして通常のウィンドウで実行するため、「myprog.exe」から開始します。これにより、「固定ディスクにインストールする」オプションが表示されますが、「Windows で開始する」オプションは表示されません。インストール プロセスの一環として、インストールされたコピーを "Start with Windows" に設定することは許可できますが、現在実行中のコピーは設定できません。

2/ Start/AllPrograms に項目を作成するため、インストールしたプログラムは "myprog.exe -i" として実行するように設定できます。これにより、「固定ディスクへのインストール」が無効になりますが、「Windows で開始」を切り替えることができます。(ユーザーによる) 明示的な実行を通常の状態で開始するか最小化して開始するかを選択できます ((3) を参照)。

3/ StartUp のショートカットは "myprog.exe -s" にすることができます (ここでも、作成したので、これを制御します)。これは (2) と同じですが、最小化された状態で開始されます ((2) が最小化された状態で開始された場合、(2) と (3) の間に区別はなく、異なるコマンド ライン オプションを使用する理由もありません)。

そうすれば、各オプションは、必要に応じて異なる動作を持つことができます。

于 2009-01-19T07:46:04.750 に答える
3

あなたはすでに問題を解決していますが、プログラムがショートカットから起動されたかどうかを検出できると言いたかっただけです。ショートカット パスを取得したら、それをスタートアップ フォルダーと比較できます。

Undocumented CreateProcessの「実行可能ファイルがショートカットから開始されたかどうかを検出する」セクションを参照してください。

于 2010-11-11T12:36:15.457 に答える
1

このキーのレジストリを確認してください。HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Runを実行し、アプリケーションのパスを値として使用して新しい文字列キーを追加します。トレイへのアプリケーションを最小化するためにNOTIFYICONDATA構造を使用します。

于 2009-01-19T06:35:17.013 に答える
0

次のように最小化されたアプリケーションを起動するために引数を使用してみませんか。

YourProgram.exe -m
于 2009-01-19T06:31:37.800 に答える