From: Ituki Kirihara Date: Sun, 17 May 2015 04:22:44 +0000 (+0900) Subject: Windowsロック&ディスプレイの電源をオフにするツール X-Git-Url: https://ituki.proj.jp/repo/?p=program%2FApplication%2FWindows%2Ftools%2Flock_and_display_off.git;a=commitdiff_plain Windowsロック&ディスプレイの電源をオフにするツール 初期バージョン Signed-off-by: Ituki Kirihara --- 11d17c6e82022aa708fe472aaa3295c436bf2d16 diff --git a/lock_and_display_off.c b/lock_and_display_off.c new file mode 100644 index 0000000..5f9214b --- /dev/null +++ b/lock_and_display_off.c @@ -0,0 +1,176 @@ +#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500) + #undef _WIN32_WINNT + #define _WIN32_WINNT 0x0500 +#endif +#include +#include +#include + +#if _MSC_VER +#pragma comment(lib,"user32.lib") +#endif + +/* + + Windowsのロックと、ディスプレイの電源オフを行います。 + ディスプレイの電源オフに関しては、http://www.knonline.net/d/?date=20080123 を参照しています。 + + usage: + lock_and_display_off + Windowsをロックし、ディスプレイの電源をオフにします + オプション: + -h + ヘルプを表示します + -lock + Windowsをロックします(デフォルト) + -nolock + Windowsをロックしません + -off + ディスプレイの電源をオフにします(デフォルト) + -nooff + ディスプレイの電源をオフにしません + -lockfirst + 最初にWindowsをロックし、次にディスプレイの電源をオフにします(デフォルト) + -offfirst + 最初にディスプレイの電源をオフにし、次にWindowsをロックします + + 隠しオプション + -wait1st ミリ秒 + 1個目の処理前に指定したミリ秒だけSleepします 有効範囲 0(デフォルト:Sleepしない)~WAIT_MSEC_MAX + これを指定しなくてもEXEC_WAITミリ秒(1秒)は強制Sleepしています。 + -wait2nd ミリ秒 + 2個目の処理前に指定したミリ秒だけSleepします 有効範囲 0(デフォルト:Sleepしない)~WAIT_MSEC_MAX + -waitDisplayOffDelay ミリ秒 + ディスプレイの電源をオフにする際、省電力モード→オフの処理間に指定したミリ秒だけSleepします + 有効範囲 0(デフォルト:Sleepしない)~WAIT_MSEC_MAX + +*/ + +#define WAIT_MSEC_MAX (60*1000) +#define EXEC_WAIT 1000 + +int cmdRet(const char* str) +{ + if(str) fprintf(stderr,"%s\n",str); + /* print usage */ + fprintf(stderr,"usage: lock_and_display_off (-h) ([ -lock | -nolock ]) ([ -off | -nooff ])\n"); + fprintf(stderr," ([ -lockfirst | -offfirst ])\n"); + fprintf(stderr,"\toptions\n"); + fprintf(stderr,"\t\t-h : show usage(this infomation printout)\n"); + fprintf(stderr,"\t\t-lock : LockWindows(default)\n"); + fprintf(stderr,"\t\t-nolock : no LockWindows\n"); + fprintf(stderr,"\t\t-off : Display Power Off(default)\n"); + fprintf(stderr,"\t\t-nooff : no Display Power Off\n"); + fprintf(stderr,"\t\t-lockfirst : 1st LockWindows, next Display Power Off(default)\n"); + fprintf(stderr,"\t\t-offfirst : 1st Display Power Off, next LockWindows\n"); + fprintf(stderr,"\texample\n"); + fprintf(stderr,"\t\thelp> lock_and_display_off -h\n"); + fprintf(stderr,"\t\tLock and Display off> lock_and_display_off\n"); + fprintf(stderr,"\t\tLock Only> lock_and_display_off -nooff\n"); + fprintf(stderr,"\t\tDisplay off Only> lock_and_display_off -nolock\n"); + fprintf(stderr,"\n"); + fprintf(stderr,"\tversion 0.0.2011080412000\n"); + fprintf(stderr,"\tLisence: ??? (c) copyright 2011 Ituki Kirihara/NI\n"); + return 1; +} + +int LockWindows(void) +{ + if (LockWorkStation() == 0){ + return cmdRet("LockWindows:API:LockWorkStation Fail..."); + } + return 0; +} + +int DisplayOff(DWORD waitmsec) +{ + if (PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 1) == 0){ + return cmdRet("DisplayOff:API:PostMessage 1st stage Fail..."); + } + if (waitmsec > 0) Sleep(waitmsec); + if (PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2) == 0){ + return cmdRet("DisplayOff:API:PostMessage 2nd stage Fail..."); + } + return 0; +} + +int main(int argc,char* argv[]) +{ + int i; + int enableLock = 1; + int enableDisplayOff = 1; + int LockFirst = 1; + DWORD wait1st = 0; + DWORD wait2nd = 0; + DWORD waitDisplayOffDelay = 0; + char* nptr=NULL; + if (argc < 1 || argv == NULL) return cmdRet("unknown main function arg..."); + for(i=1;i WAIT_MSEC_MAX) return cmdRet("-wait1st option : msec time so long"); + }else{ + return cmdRet("-wait1st option : msec not set"); + } + ++i; + }else if(strcmp(argv[i],"-wait2nd") == 0){ + if (i+1 WAIT_MSEC_MAX) return cmdRet("-wait2nd option : msec time so long"); + }else{ + return cmdRet("-wait2nd option : msec not set"); + } + ++i; + }else if(strcmp(argv[i],"-waitDisplayOffDelay") == 0){ + if (i+1 WAIT_MSEC_MAX) return cmdRet("-waitDisplayOffDelay option : msec time so long"); + }else{ + return cmdRet("-waitDisplayOffDelay option : msec not set"); + } + ++i; + }else{ + return cmdRet("unknown option"); + } + } + Sleep(EXEC_WAIT); + if (wait1st > 0) Sleep(wait1st); + if (LockFirst){ + if (enableLock) LockWindows(); + if (wait2nd > 0) Sleep(wait2nd); + if (enableDisplayOff) DisplayOff(waitDisplayOffDelay); + }else{ + if (enableDisplayOff) DisplayOff(waitDisplayOffDelay); + if (wait2nd > 0) Sleep(wait2nd); + if (enableLock) LockWindows(); + } + return 0; +} \ No newline at end of file diff --git a/lock_and_display_off.exe b/lock_and_display_off.exe new file mode 100644 index 0000000..875471c Binary files /dev/null and b/lock_and_display_off.exe differ diff --git a/lock_and_display_off.txt b/lock_and_display_off.txt new file mode 100644 index 0000000..d178f96 --- /dev/null +++ b/lock_and_display_off.txt @@ -0,0 +1,63 @@ + +Windowsロック&ディスプレイの電源をオフにするツール + +Windowsキー+LでWindowsのロックはできますが、 +ディスプレイの電源を一緒にオフにして欲しいので +そんな要望にお答え。 + +使い方 + lock_and_display_off (-h) ([ -lock | -nolock ]) ([ -off | -nooff ]) + ([ -lockfirst | -offfirst ]) + オプション: + -h + ヘルプを表示します + -lock + Windowsをロックします(デフォルト) + -nolock + Windowsをロックしません + -off + ディスプレイの電源をオフにします(デフォルト) + -nooff + ディスプレイの電源をオフにしません + -lockfirst + 最初にWindowsをロックし、次にディスプレイの電源をオフにします + (デフォルト) + -offfirst + 最初にディスプレイの電源をオフにし、次にWindowsをロックします + + 使用例 + lock_and_display_off + →Windowsをロックし、ディスプレイの電源をオフにします + lock_and_display_off -h + →ヘルプを表示します + lock_and_display_off -nooff + →Windowsをロックします(ディスプレイの電源は切りません) + lock_and_display_off -nolock + →ディスプレイの電源を切ります(Windowsをロックしません) + +このソースをコンパイルするときにはuser32.libがリンクされています。 +※ソース中の#pragmaを用いてリンクしています。 + cl lock_and_display_off.cだけでコンパイルが通ります。 + bcc32の場合は自動でリンクされています。 + +なお、ディスプレイの電源オフに関しては、 + http://www.knonline.net/d/?date=20080123 +を参照しています。 + +プログラムを作ったのは +Ituki Kirihara/NI です。 +ライセンスは現在検討中。 + +プログラムを素早く起動する方法(ショートカット・キーを設定する) +http://www.atmarkit.co.jp/fwin2k/win2ktips/150use_shortcut/use_shortcut.html +に従って設定すれば、ショートカットでロック&ディスプレイ電源オフが実現できます。 + +たとえば…… +1.lock_and_display_off.exeをC:\binにコピー +2.[スタート]メニュー、[スタート]メニュー内の[すべてのプログラム]、デスクトップのいずれかで、C:\bin\lock_and_display_off.exeへのショートカットを作成 +3.ショートカットのプロパティを開き、「ショートカット」タブにある、ショートカットキーをクリック +4.設定したいショートカットをCtrl,Shift,Altの2つ以上の組み合わせ+通常キーの組み合わせでショートカットキーを設定 +5.OKボタンで確定。 + +作者の場合、Ctrl+Alt+Lを設定していますので、Ctrl+Alt+Lキーを押すと、自動でロック&ディスプレイ電源オフ状態になります。 +Windowsキー+Lの代わりに使っています。