4

コンピューターの起動時 (そしてもちろん、ユーザーがサインインした後) にアプリケーションを起動するにはどうすればよいでしょうか? いいえ、私はウイルスを作っているわけではありません。

レジストリの編集は良いアイデアのように聞こえますか?

私のOSはWindows8です。

ただし、考えられるすべての Windows OS でアプリケーションを利用できるようにします。

4

5 に答える 5

6

これを行う正しい方法は、アプリケーションの実行可能ファイルへのショートカットをユーザーのスタートアップ フォルダに追加することです。レジストリを変更する必要はありません (すべきではありません)。

上級ユーザーは、これを手動で行う方法をすでに知っていますが、インストーラーの一部として、および/またはアプリケーションの構成ダイアログとして提供したいオプションになる場合もあります。

C++ コードからこれを行うには、次の 2 つのことを行う必要があります。

  1. 現在のユーザーのスタートアップ フォルダーの場所を取得します。

    これは、SHGetKnownFolderPath関数を呼び出して、KNOWNFOLDERID関心のあるフォルダーの を指定することによって実現されます。この場合、FOLDERID_Startup.

    サンプルコード:

    std::wstring GetStartupFolderPath()
    {
        PWSTR pszPath;
        HRESULT hr = SHGetKnownFolderPath(&FOLDERID_Startup,
                                          0,     // no special options required
                                          NULL,  // no access token required
                                          &pszPath);
        if (SUCCEEDED(hr))
        {
            // The function succeeded, so copy the returned path to a
            // C++ string, free the memory allocated by the function,
            // and return the path string.
            std::wstring path(pszPath);
            CoTaskMemFree(static_cast<LPVOID>(pszPath));
            return path;
        }
        else
        {
            // The function failed, so handle the error.
            // ...
            // You might want to throw an exception, or just return an
            // empty string here.
            throw std::runtime_error("The SHGetKnownFolderPath function failed");
        }                            
    }
    

    ただし、 はSHGetKnownFolderPath使用を推奨する機能ですが、Windows Vista 以降でのみサポートされていることに注意してください。古いバージョンのオペレーティング システムをサポートする必要がある場合は、それが利用可能な新しいバージョンで動的に呼び出す必要があります。それ以外の場合は、SHGetFolderPath関数の呼び出しにフォール バックします。これは、異なるタイプの識別子であるCSIDL値を取ります。あなたが欲しいのは ですCSIDL_STARTUP

  2. アプリケーションの実行可能ファイルへのショートカットを作成します。

    これは、異なるシェル API 関数のセットを使用して実現されます。サンプル コードは、MSDN で既に十分に説明されているため、ここでは書きません: Shell Links

    アプリケーションの実行可能ファイルへのショートカットを作成するときに、ユーザーのスタートアップ フォルダーを宛先パスとして指定します。

他に注意すべき点は、実際には複数のスタートアップ フォルダーがあることです。各ユーザーには 1 つずつあります。これは、上記で を使用して取得したものFOLDERID_Startupです。約 99% の確率で、それはあなたが望むものです。そこにアプリへのショートカットを配置すると、そのユーザーがログオンしたときにアプリが自動的に起動されます。

ただし、すべてのユーザーが共有するグローバルスタートアップ フォルダーもあります。FOLDERID_CommonStartupこれは(または)で識別されCSIDL_COMMON_STARTUP、アイテムを追加するには管理者権限が必要です。もちろん、これは理にかなっています。ユーザーがコンピューターにログオンすると、そこに入力したものはすべて自動的に起動するからです。このようなグローバルな動作に影響を与えることができるのは、管理者だけです。いずれにせよ、あなたのアプリはこれを必要としない可能性があります。

于 2013-03-22T21:50:00.397 に答える
1

Windows では、アプリケーションへのショートカットをStartupフォルダーに配置するか、サービスとして実装することができます。

そして、「私はウイルスを作っていない」というのは有罪のように聞こえます...もしかしたらそれはキーロガーでしょうか? ;)

于 2013-03-22T21:18:40.967 に答える