Windows API機能
Windows API機能
// 126.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <Windows.h>
void ShutdownWindows(BOOL bReboot, BOOL bForce);
int main(UINT ShutDownWindows)
{
ShutDownWindows(TRUE,TRUE);//void ShutdownWindowsを呼び出して再起動を行う(ここが駄目な箇所)
}
// [引数]
// bReboot : 終了後に再起動する場合はTRUE
// bForce : プロセスを強制的に打ち切る場合はTRUE
//
// [返値]
// 終了指示を発行した : TRUE
// 終了指示が失敗した : FALSE
void ShutdownWindows(BOOL bReboot = FALSE, BOOL bForce = FALSE)
{
DWORD ret;
HANDLE hProcess;
HANDLE hToken;
LUID Luid;
TOKEN_PRIVILEGES tokenNew, tokenPre;
UINT nFlag;
hProcess = GetCurrentProcess();
OpenProcessToken(hProcess,
TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &Luid);
tokenNew.PrivilegeCount = 1;
tokenNew.Privileges[0].Luid = Luid;
tokenNew.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tokenNew,
sizeof(tokenPre), &tokenPre, &ret);
if (bReboot) {
nFlag = EWX_REBOOT; // 再起動
} else {
nFlag = EWX_POWEROFF; // 電源OFF
}
if (bForce) {
nFlag |= EWX_FORCE; // プロセス強制終了
}
ExitWindowsEx(nFlag, 0); // シャットダウン処理
return;
}
ShutdownWindowsを呼び出して再起動を行う処理が上手くいきません。どなたか教えてください
//
#include "stdafx.h"
#include <Windows.h>
void ShutdownWindows(BOOL bReboot, BOOL bForce);
int main(UINT ShutDownWindows)
{
ShutDownWindows(TRUE,TRUE);//void ShutdownWindowsを呼び出して再起動を行う(ここが駄目な箇所)
}
// [引数]
// bReboot : 終了後に再起動する場合はTRUE
// bForce : プロセスを強制的に打ち切る場合はTRUE
//
// [返値]
// 終了指示を発行した : TRUE
// 終了指示が失敗した : FALSE
void ShutdownWindows(BOOL bReboot = FALSE, BOOL bForce = FALSE)
{
DWORD ret;
HANDLE hProcess;
HANDLE hToken;
LUID Luid;
TOKEN_PRIVILEGES tokenNew, tokenPre;
UINT nFlag;
hProcess = GetCurrentProcess();
OpenProcessToken(hProcess,
TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &Luid);
tokenNew.PrivilegeCount = 1;
tokenNew.Privileges[0].Luid = Luid;
tokenNew.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tokenNew,
sizeof(tokenPre), &tokenPre, &ret);
if (bReboot) {
nFlag = EWX_REBOOT; // 再起動
} else {
nFlag = EWX_POWEROFF; // 電源OFF
}
if (bForce) {
nFlag |= EWX_FORCE; // プロセス強制終了
}
ExitWindowsEx(nFlag, 0); // シャットダウン処理
return;
}
ShutdownWindowsを呼び出して再起動を行う処理が上手くいきません。どなたか教えてください
Re:Windows API機能
呼び出したい関数は、ShutdownWindows関数ですよね?
UINT ShutDownWindows // main関数の引数
void ShutdownWindows(BOOL, BOOL) // シャットダウンを行うのであろう関数
UINT ShutDownWindows // main関数の引数
void ShutdownWindows(BOOL, BOOL) // シャットダウンを行うのであろう関数
Re:Windows API機能
規約をよく読んでそれに則った質問をしていただけませんか。
・ソースの字下げをしていない
・「上手くいきません。」ではわからない。もっと具体的に。
・ソースの字下げをしていない
・「上手くいきません。」ではわからない。もっと具体的に。
Re:Windows API機能
int main(UINT ShutDownWindows)
{
ShutDownWindows(TRUE,TRUE);//void ShutdownWindowsを呼び出して再起動を行う(ここが駄目な箇所)
}
ここで再起動処理の引数を渡し、実行したいのですができないのです。
{
ShutDownWindows(TRUE,TRUE);//void ShutdownWindowsを呼び出して再起動を行う(ここが駄目な箇所)
}
ここで再起動処理の引数を渡し、実行したいのですができないのです。
Re:Windows API機能
5つのWindows APIの呼び出しを行っていますが,一個もエラーチェックをしていませんね……。
・どこのAPI呼び出しで失敗しているのですか。
→各APIのMSDNの記述を読んで,APIごとに判別を行う
・また,その失敗についてGetLastError APIはどう言っているのですか。
→ルックアップツールとか,NET HELPMSGとかで確認もする
・どこのAPI呼び出しで失敗しているのですか。
→各APIのMSDNの記述を読んで,APIごとに判別を行う
・また,その失敗についてGetLastError APIはどう言っているのですか。
→ルックアップツールとか,NET HELPMSGとかで確認もする
Re:Windows API機能
UINT ShutDownWindows
メイン関数の上記の引数は何のためにあるんですか?
引数変数名と関数名が同じのためVC++2008ではコンパイルが出来ますがShutDownWindowsは関数として評価しないと警告が出ます。
メイン関数の上記の引数は何のためにあるんですか?
引数変数名と関数名が同じのためVC++2008ではコンパイルが出来ますがShutDownWindowsは関数として評価しないと警告が出ます。
Re:Windows API機能
JTさんはもっと質問の仕方を考えたほうがいいと思うね。
先にも書いたがぜんぜん具体的じゃない。
> これはわかります
とだけ返されても、「じゃあ何がわからないの?」としか返せません。
> どう直せばいいかご教示お願いします
一度でも自分でやってみてそれでもだめならともかく、最初から答えを欲しがるようでは成長しないよ?
自分でやってみたのだったら、どういうふうに直したのか、その結果どういう動作になったのかをもっと詳細にするべきです。
先にも書いたがぜんぜん具体的じゃない。
> これはわかります
とだけ返されても、「じゃあ何がわからないの?」としか返せません。
> どう直せばいいかご教示お願いします
一度でも自分でやってみてそれでもだめならともかく、最初から答えを欲しがるようでは成長しないよ?
自分でやってみたのだったら、どういうふうに直したのか、その結果どういう動作になったのかをもっと詳細にするべきです。
Re:Windows API機能
> これはわかります
だとすると、mainの引数は、
にもかかわらず、
もし、分かっていてあえてやっているとすると、考えられる可能性はひとつしかありません。
すなわち、WinMainから上記の非標準のmainを(直接的または間接的に)呼び出しているということです。
そうなのでしょうか?
だとすると、mainの引数は、
int main(int argc, char *argv[/url])でなければならないことが分かっているのですよね?
にもかかわらず、
int main(UINT ShutDownWindows)とされている理由は何でしょうか?
もし、分かっていてあえてやっているとすると、考えられる可能性はひとつしかありません。
すなわち、WinMainから上記の非標準のmainを(直接的または間接的に)呼び出しているということです。
そうなのでしょうか?
Re:Windows API機能
最後のヒント
×:ShutDownWindows(TRUE,TRUE);
○:ShutdownWindows(TRUE,TRUE);
関数呼び出し部分をきちんと直せば再起動できます。(VC++2008EEで確認)
×:ShutDownWindows(TRUE,TRUE);
○:ShutdownWindows(TRUE,TRUE);
関数呼び出し部分をきちんと直せば再起動できます。(VC++2008EEで確認)
Re:Windows API機能
どうも,
> 上手くいきません
を見て私は実行時のエラー (文法エラー等は単なるミス) と思っていたのですが,JTさんの発言を読んでいると,コンパイルエラーのような気がしてきます。
まず,何が起きているのかをちゃんと記述してください。
現在のところ,わかっているのは,
・JTさんが最初にあげたプログラムに対して「上手くいかない」と思っていること
のみです。
せっかく規約と注意事項の項目に質問用のテンプレートがあるのですから,
まずはこのテンプレートを埋めて質問をしてください。
> 上手くいきません
を見て私は実行時のエラー (文法エラー等は単なるミス) と思っていたのですが,JTさんの発言を読んでいると,コンパイルエラーのような気がしてきます。
まず,何が起きているのかをちゃんと記述してください。
現在のところ,わかっているのは,
・JTさんが最初にあげたプログラムに対して「上手くいかない」と思っていること
のみです。
せっかく規約と注意事項の項目に質問用のテンプレートがあるのですから,
まずはこのテンプレートを埋めて質問をしてください。