2

GetModuleFileNameを使用してアプリケーションへの絶対パスを取得し、RegOpenKeyExRunOnceを使用してレジストリキーを開き、 RegSetValueExを使用して値を設定します。

if (RegOpenKeyEx (HKEY_CURRENT_USER, 
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce",0, KEY_SET_VALUE, &hk1) == ERROR_SUCCESS) 

{ 
    RegSetValueEx(hk1, // subkey handle 
                  "", // value name 
                  0, // must be zero 
                  REG_SZ, // value type 
                  (LPBYTE) &path, sizeof(DWORD)); // length of value data    
    RegCloseKey(hk1); 
} 

ただし、システムを再起動した後、アプリケーションが起動しません。

4

4 に答える 4

3

いくつかの方法があります:

  • アプリケーションをスタートアップ フォルダに配置します。これは非常に簡単な方法です。システム (PC) が再起動されると、アプリケーションが開始されます (これにはログインが必要です)。
  • Windows タスク プランナーを使用します。
  • アプリケーションをサービスにします。

常に実行する必要がある場合は、最後のオプションをお勧めします。ただし、サービス処理を追加する必要があります。

于 2012-12-28T09:45:11.303 に答える
1

タスク スケジューラを使用してタスクを作成し、コンピュータの起動時にアプリケーションを実行できます。

  1. [スタート] ボタン 、[コントロール パネル]、[システムとセキュリティ]、[管理ツール] の順にクリックし、[タスク スケジューラ] をダブルクリックして、タスク スケジューラを開きます。管理者のパスワードまたは確認を求められた場合は、パスワードを入力するか、確認を行います。

  2. [アクション] メニューをクリックし、[基本タスクの作成] をクリックします。

  3. タスクの名前とオプションの説明を入力し、[次へ] をクリックします。

  4. [コンピューターの起動時] をクリックし、[次へ] をクリックします。

  5. プログラムを自動的に開始するようにスケジュールするには、[プログラムの開始] をクリックし、[次へ] をクリックします。

  6. [参照] をクリックして起動するプログラムを見つけ、[次へ] をクリックします。

  7. [完了] をクリックしたときに、このタスクの [プロパティ] ダイアログを開くチェック ボックスをオンにして、[完了] をクリックします。

  8. [プロパティ] ダイアログ ボックスで、[ユーザーがログオンしているかどうかにかかわらず実行する] を選択し、[OK] をクリックします。

ソース:

Windows 7 - タスクのスケジュール

PS: これらの手順を実行するには、管理者としてログオンする必要があります

于 2012-12-28T09:43:18.637 に答える
0

選択したソリューションを使用する際に留意すべき点がいくつかあります。

  • アプリケーションは、システムの起動時に起動するのではなく、現在のユーザーがログオンしたときに起動します。
  • キーに書き込む場合RunOnce、操作は1回だけ実行されます。ユーザーがログオンしたときにアプリケーションを常に起動する場合は、代わりにRunキーを使用する必要があります。

上記に加えて、値を作成する場合は、名前を付ける必要があります。RegSetValueExlpValueNameのパラメータのドキュメントから:

lpValueNameisNULLまたは空の文字列の場合、""関数はキーの名前のない値またはデフォルト値のタイプとデータを設定します。

デフォルトの(名前のない)値は、(Default)regeditを使用しているときに表示される値です。これを機能させるには、値の名前を指定する必要があります。これは、そのキーの下の他の値と競合しないように一意である必要があります。

あまり技術的ではありませんが、アプリケーションの自動起動機能の実装は、十分に検討した後でのみ実行する必要があります。

于 2012-12-28T14:18:42.463 に答える
0

に間違ったパラメータ値を渡していますRegSetValueEx()。代わりに次のように使用する必要があります。

TCHAR path[MAX_PATH+1] = {0}
GetModuleFileName(NULL, path, MAX_PATH);

if (RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce"), 0, KEY_SET_VALUE, &hk1) == ERROR_SUCCESS) 
{ 
    RegSetValueEx(hk1, // subkey handle 
                  TEXT("MyApp"), // value name 
                  0, // must be zero 
                  REG_SZ, // value type 
                  (LPBYTE) path,
                  (lstrlen(path)+1) * sizeof(TCHAR)); // length of value data, in bytes
    RegCloseKey(hk1); 
} 
于 2012-12-28T22:01:46.370 に答える