4

「autostart」オプションを持つ C++ でアプリケーションを開発しています。ユーザーがそのオプションを設定すると、次回の Windows ブートおよびユーザー ログオン時に Windows によって開始されるように、プログラムは Windows 内の何かを変更する必要があります。また、ユーザーがこのオプションの設定を解除した場合、プログラムは元に戻す必要があります。

アプリをサービスとして実行する必要はないので、ユーザーのログオン後に特定のユーザーのアカウントで実行するだけで十分です。それで、Windowsにアプリを実行させる最良の方法は何ですか. 次回の起動時およびユーザー ログオン時に? スタートアップフォルダーを使用するためのアドバイスをグーグルで検索しました。それは最も素晴らしく無害な方法ですか?

もしそうなら、私は2つの質問があります:

  1. スタートアップ フォルダを検出する方法。SHGetSpecialFolderLocation()の出力に満足できません。WinXP プラットフォームのテストで「HOME」ディレクトリ (C:\Documents and settings\%username%) が返されるようです。
  2. そこにC ++を使用して.lnkファイルを作成する方法は? .exe ファイル全体をコピーするのは悪い考えだと思います。

実際、私のプログラムはクロスプラットフォームですが、オプション「自動起動」は Windows のみになります。

アップデート

  1. SHGetSpecialFolderLocation を試し、Windows7 で適切な値を取得しました: "C:\Users\Pavel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" .h.

  2. レジストリ (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run) とスタートアップ フォルダーを使用する間の最善の解決策 (良いプログラミングの観点から) は何ですか?

4

3 に答える 3

4

のようなレジストリ キーを使用することをお勧めしますHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run。ここで、ソフトウェアの名前とメインの実行可能パスの値を使用して文字列値を作成します。これで十分です。.lnk ファイルを作成するよりもはるかに簡単 - レジストリ編集 API は C++ から簡単にアクセスできます

アップデート:

@Ben が示唆したように、タスクにはHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run. これにより、現在のユーザーに対してのみアプリが自動起動されますが、最初の提案ではすべてのユーザーに対してこれが行われます。

更新 2:

また、自動起動を実装するためにどの方法を選択しても、ウイルス対策ソフトウェアで問題が発生する可能性があることに注意してください.

于 2011-10-09T22:19:59.957 に答える
1

明確にするために、スタートアップ フォルダの項目は起動時ではなく、ログイン時に発生します。それはあなたが望んでいるように聞こえますが、私は条件をまっすぐにしたいだけです.

実際にはSHGetSpecialFolderPathCSIDL_STARTUP定数が必要だと思います。ドキュメントを正しく読んでいれば、必要なパスが得られるはずです。

于 2011-10-09T22:21:46.293 に答える
0

SHGetSpecialFolderPath を使用してスタートアップ フォルダーへのパスを決定します (Michael Kohne の回答を参照)。

次に、このフォルダにショートカットを作成するためにIShellLinkを使用します。

編集:レジストリで Run キーを使用する方が信頼性が高いと思います。

于 2011-10-10T08:48:07.010 に答える