2013-03-26 33 views
10

Javaを使用して強制的にコンピュータをシャットダウンする方法はわかっています。たとえば、次のコードは、強制シャットダウンのために正常に動作します:強制的にコンピュータを自動的に起動しますか?

public static void main(String arg[]) throws IOException{ 
    Runtime runtime = Runtime.getRuntime(); 
    Process proc = runtime.exec("shutdown -s -t 0"); 
    System.exit(0); 
} 

さて、私が(シャットダウン状態にある)コンピュータを起動強制したい場合は、特定の時間に、で行うことが可能であると仮定Javaやその他の言語?

答えて

15

起動を開始するには何かが必要です。これを引き起こす最善の方法はWake On Lanです。

Javaでこれを行う場合は、thisが良いリソースかもしれません。

+3

これには必ずLAN接続が必要です。 _a java program_がLAN接続なしでPCを起動できれば素晴らしいだろう。 – Apurv

+2

多分私はここに何かを見逃していますが、理解しているように、あなたはオフになっているPCでソフトウェアを実行したいですか? –

+2

はい...そのようなもの...同様に、私たちの携帯電話が自動的にオンになると、特定の時間にアラームが設定されている場合。 –

4

wake on lanに加えて、マザーボードに接続され、電源を制御するだけでなく、ネットワーク接続を介してシリアルコンソール出力を提供するサーバーグレードのハードウェアで動作するIPMIデバイスがあります。このコンピュータは常時稼働していますが、あなた自身のコードを読み込むことはできません。

リモートからこのデバイスを制御して、javaなどの言語を使用していないサーバーの電源を制御できます。

http://en.wikipedia.org/wiki/Intelligent_Platform_Management_Interface

3

あなたのBIOSは、高度な電源管理(APM)のバージョン1.2以降をサポートしている場合、タイマーに基づいてスリープ/スタンバイ]または休止状態から目を覚ますことが可能であるべきです。 Windowsでは、エンドユーザーがタスクスケジューラを使用してこれを行うことができます。プログラムで実行する場合は、Task Scheduler interfacesを使用できます。仮に

#include <mstask.h> 
#include <time.h> 

int main() { 
    HRESULT hr = CoInitialize(NULL); 
    if (SUCCEEDED(hr)) { 
    ITaskScheduler *scheduler; 
    hr = CoCreateInstance(CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskScheduler, (void**)&scheduler); 
    if (SUCCEEDED(hr)) { 
     ITask *task; 
     hr = scheduler->NewWorkItem(L"Wake Timer", CLSID_CTask, IID_ITask, (LPUNKNOWN*)&task); 
     if (SUCCEEDED(hr)) { 
     WORD index; 
     ITaskTrigger *trigger; 
     hr = task->CreateTrigger(&index, &trigger); 
     if (SUCCEEDED(hr)) { 
      time_t t = time(NULL) + 120; 
      struct tm *ltime = localtime(&t); 

      TASK_TRIGGER triggertime; 
      memset(&triggertime, 0, sizeof(triggertime)); 
      triggertime.cbTriggerSize = sizeof(TASK_TRIGGER); 
      triggertime.wBeginYear = ltime->tm_year+1900; 
      triggertime.wBeginMonth = ltime->tm_mon+1; 
      triggertime.wBeginDay = ltime->tm_mday; 
      triggertime.wStartHour = ltime->tm_hour; 
      triggertime.wStartMinute = ltime->tm_min; 
      triggertime.TriggerType = TASK_TIME_TRIGGER_ONCE; 
      trigger->SetTrigger(&triggertime); 
      trigger->Release(); 
     } 

     task->SetFlags(TASK_FLAG_DELETE_WHEN_DONE|TASK_FLAG_SYSTEM_REQUIRED|TASK_FLAG_RUN_ONLY_IF_LOGGED_ON); 
     task->SetAccountInformation(L"", NULL); 

     IPersistFile *file; 
     hr = task->QueryInterface(IID_IPersistFile, (void**)&file); 
     if (SUCCEEDED(hr)) { 
      file->Save(NULL, TRUE); 
      file->Release(); 
     } 
     task->Release(); 
     } 
     scheduler->Release(); 
    } 
    CoUninitialize(); 
    } 
    return 0; 
} 

あなたの場合:

私はここでは、Javaを介してこれを行うだろうか知らないが、将来的に最大2分のコンピュータを復帰するタスクを作成するいくつかの例のCコードですWindowsでこれを行うことができますが、他のオペレーティングシステムには同等のAPIが必要です。

1

私はインターネット上に浮かんでいる同様の質問を見つけることができたので、ここにリンクを投稿して、役に立つかどうか確認します。 (これは私が見つけたスレッドでした:http://www.coderanch.com/t/440680/gc/interact-Windows-Task-Scheduler-Java

まず、Javaは仮想マシンで実行する必要のある言語であると付け加えます.2つの方法はありません。私は、BIOSレベルに近いところでプログラミングするなど、「低レベル」のプログラミングに精通していません。

質問が明白にJavaに関するものだったので、私が研究から思いつくことができる最高のものは、JAVA-COM(JACOB)http://sourceforge.net/projects/jacob-project/を使用して(もしあなたが本当に何かのためにJavaを使いたければ) Windowsのタスクスケジューラhttp://msdn.microsoft.com/en-us/library/aa383581%28VS.85%29.aspxにCOM言語でフックする(AF

私が知っている限り、Javaは実行するためには仮想マシン内にある必要があるため、次のようなアクションを実行する方法はありません。 PCの電源を入れる - そのような行為に管理者以上の特権が必要かどうかの問題にさえいません。

関連する問題