• ベストアンサー

VC++ の システム時計の設定を教えて下さい。

VC++ の システム時計の設定を教えて下さい。 VC++2008 EXPRESS EDITOIN で練習用プログラムとして Windowsフォームアプリケーションで時計プログラムを作成 しているのですが、システム時計の設定方法が解りません。 もし分かる方いらっしゃいましたら設定方法を教えていただ けるとありがたいです。 宜しくご教授下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.2

フォームアプリケーションなので、VC++.netの方ですね・・・VC++2008としか書いてないので勘違いしてました。 で、VC++.netなら別の方法が使えます。VB.netのサポートクラスを利用する方法です。 using namespace System; using namespace Microsoft::VisualBasic; DateTime dtNow = DateTime::Now; DateTime dtUpdate = dtNow.AddDays(1); DateAndTime::Today = dtUpdate; こちらを利用する場合、プロジェクトの参照設定に.Netタブの「Microsoft.VisualBasic.dll」を追加してください。 一応補足の回答で・・・ SYSTEMTIMEの宣言は「Winbase.h」にあり、「Windows.h」をインクルードすることで定義されます。 #1で挙げた方法はVC++(.Netでない)で利用できる方法です。VC++.Netでも使うことはできますが、多少手続きが増えます。

nonzo-papa
質問者

お礼

回答ありがとうございます。 無事に設定でき、大変助かりました。 また何かあれば宜しくお願い致します。

その他の回答 (1)

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.1

システム日時の変更にはSE_SYSTEMTIME_NAME特権が必要になります。そのため、設定する前にこの特権を有効にする必要があります。 以下簡単な例です。 SYSTEMTIME stLocal; GetLocalTime(&stLocal); stLocal.wDay += 1; // ここで日時変更 TOKEN_PRIVILEGES stToken; HANDLE hToken; BOOL bRtn = OpenProcessToken(GetCurrentProcess(), (TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY), &hToken); if(bRtn) { bRtn = LookupPrivilegeValue(NULL, SE_SYSTEMTIME_NAME, &stToken.Privileges[0].Luid); if(bRtn) { stToken.PrivilegeCount = 1; stToken.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; bRtn = AdjustTokenPrivileges(hToken, FALSE, &stToken, 0, NULL, NULL); if(bRtn) { bRtn = SetLocalTime(&stLocal); } } }

nonzo-papa
質問者

お礼

回答ありがとうございます。 さらに質問で申し訳ないのですが、 『SYSTEMTIME stLocal;』で『'SYSTEMTIME' : 定義されていない識別子です。』と エラーとなるのですが、何か設定が必要なのでしょうか。 宜しくお願い致します。

関連するQ&A