- ベストアンサー
VC++ の システム時計の設定を教えて下さい。
VC++ の システム時計の設定を教えて下さい。 VC++2008 EXPRESS EDITOIN で練習用プログラムとして Windowsフォームアプリケーションで時計プログラムを作成 しているのですが、システム時計の設定方法が解りません。 もし分かる方いらっしゃいましたら設定方法を教えていただ けるとありがたいです。 宜しくご教授下さい。
- みんなの回答 (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でも使うことはできますが、多少手続きが増えます。
その他の回答 (1)
- reset_cat
- ベストアンサー率68% (94/138)
システム日時の変更には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); } } }
お礼
回答ありがとうございます。 さらに質問で申し訳ないのですが、 『SYSTEMTIME stLocal;』で『'SYSTEMTIME' : 定義されていない識別子です。』と エラーとなるのですが、何か設定が必要なのでしょうか。 宜しくお願い致します。
お礼
回答ありがとうございます。 無事に設定でき、大変助かりました。 また何かあれば宜しくお願い致します。