Windows API機能

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
JT

Windows API機能

#1

投稿記事 by JT » 16年前

// 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を呼び出して再起動を行う処理が上手くいきません。どなたか教えてください

JT

Re:Windows API機能

#2

投稿記事 by JT » 16年前

インデント忘れてました、、、すいません><

バグ

Re:Windows API機能

#3

投稿記事 by バグ » 16年前

呼び出したい関数は、ShutdownWindows関数ですよね?

UINT ShutDownWindows // main関数の引数
void ShutdownWindows(BOOL, BOOL) // シャットダウンを行うのであろう関数

Mist

Re:Windows API機能

#4

投稿記事 by Mist » 16年前

規約をよく読んでそれに則った質問をしていただけませんか。
・ソースの字下げをしていない
・「上手くいきません。」ではわからない。もっと具体的に。

JT

Re:Windows API機能

#5

投稿記事 by JT » 16年前

ありがとうございます。ですがこれでもできませんでした

JT

Re:Windows API機能

#6

投稿記事 by JT » 16年前

int main(UINT ShutDownWindows)
{
   ShutDownWindows(TRUE,TRUE);//void ShutdownWindowsを呼び出して再起動を行う(ここが駄目な箇所)

}

ここで再起動処理の引数を渡し、実行したいのですができないのです。

YuO

Re:Windows API機能

#7

投稿記事 by YuO » 16年前

5つのWindows APIの呼び出しを行っていますが,一個もエラーチェックをしていませんね……。

・どこのAPI呼び出しで失敗しているのですか。
→各APIのMSDNの記述を読んで,APIごとに判別を行う
・また,その失敗についてGetLastError APIはどう言っているのですか。
→ルックアップツールとか,NET HELPMSGとかで確認もする

JT

Re:Windows API機能

#8

投稿記事 by JT » 16年前

APIにいく前の呼び出し処理の引数で失敗しています><

Mist

Re:Windows API機能

#9

投稿記事 by Mist » 16年前

UINT ShutDownWindows

メイン関数の上記の引数は何のためにあるんですか?
引数変数名と関数名が同じのためVC++2008ではコンパイルが出来ますがShutDownWindowsは関数として評価しないと警告が出ます。

JT

Re:Windows API機能

#10

投稿記事 by JT » 16年前

REBOOTをTRUEにする引数です

Mist

Re:Windows API機能

#11

投稿記事 by Mist » 16年前

関数名と同じ変数名を使っているのが間違い。
main関数の引数を自分勝手に決めているのが間違い。

JT

Re:Windows API機能

#12

投稿記事 by JT » 16年前

どう直せばいいかご教示お願いします


JT

Re:Windows API機能

#14

投稿記事 by JT » 16年前

これはわかります

Mist

Re:Windows API機能

#15

投稿記事 by Mist » 16年前

JTさんはもっと質問の仕方を考えたほうがいいと思うね。
先にも書いたがぜんぜん具体的じゃない。

> これはわかります

とだけ返されても、「じゃあ何がわからないの?」としか返せません。

> どう直せばいいかご教示お願いします

一度でも自分でやってみてそれでもだめならともかく、最初から答えを欲しがるようでは成長しないよ?
自分でやってみたのだったら、どういうふうに直したのか、その結果どういう動作になったのかをもっと詳細にするべきです。

たかぎ

Re:Windows API機能

#16

投稿記事 by たかぎ » 16年前

> これはわかります

だとすると、mainの引数は、
int main(int argc, char *argv[/url])
でなければならないことが分かっているのですよね?
にもかかわらず、
int main(UINT ShutDownWindows)
とされている理由は何でしょうか?

もし、分かっていてあえてやっているとすると、考えられる可能性はひとつしかありません。
すなわち、WinMainから上記の非標準のmainを(直接的または間接的に)呼び出しているということです。
そうなのでしょうか?

Mist

Re:Windows API機能

#17

投稿記事 by Mist » 16年前

最後のヒント

×:ShutDownWindows(TRUE,TRUE);

○:ShutdownWindows(TRUE,TRUE);

関数呼び出し部分をきちんと直せば再起動できます。(VC++2008EEで確認)

YuO

Re:Windows API機能

#18

投稿記事 by YuO » 16年前

どうも,
> 上手くいきません
を見て私は実行時のエラー (文法エラー等は単なるミス) と思っていたのですが,JTさんの発言を読んでいると,コンパイルエラーのような気がしてきます。


まず,何が起きているのかをちゃんと記述してください。
現在のところ,わかっているのは,
・JTさんが最初にあげたプログラムに対して「上手くいかない」と思っていること
のみです。

せっかく規約と注意事項の項目に質問用のテンプレートがあるのですから,
まずはこのテンプレートを埋めて質問をしてください。

JT

Re:Windows API機能

#19

投稿記事 by JT » 16年前

すみません><仕事中なので掲示板に投稿する文章を焦って入力しました

JT

Re:Windows API機能

#20

投稿記事 by JT » 16年前

ありがとうございました!もっと勉強します

閉鎖

“C言語何でも質問掲示板” へ戻る