LAN接続の他端末のシステム日付を更新 – プログラミング – Home

LAN接続の他端末のシステム日付を更新
 
通知
すべてクリア

LAN接続の他端末のシステム日付を更新


ある
 ある
(@ある)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

はじめまして あるです。

TCP/IPで接続されている社内LANの環境で、自端末から他端末の
システム日付を変更したいんですが、

::SetLocalTimeで他端末のシステム日付を変える事はできますでしょうか?

または、他端末の方から自端末のシステム日付を取得し、他端末のシステム日付を
::SetLocalTimeで更新するという手もあると思うのですが、

どちらにせよ 自分の端末以外の端末のシステム日付を読み書きするのが
可能で無いと実現できないのかな、と思ってます。

良い方法をお知りの方がいらっしゃいましたら ぜひご教授お願いいたします。

以上 よろしくお願いします。


引用解決済
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

えっと OS は Windows 系ということでよいのですか?
NET TIME コマンドをログインスクリプトで実行させるようにするだけでは?

あるいはもっとよい方法で (s)ntp を使うだけとか。


返信引用
たまたま通りすがったもの
 たまたま通りすがったもの
(@たまたま通りすがったもの)
ゲスト
結合: 19年前
投稿: 1
 

時刻の取得ならば SDK に NetRemoteTOD っていうのがありますがどうでしょう?


返信引用
ある
 ある
(@ある)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

お返事ありがとうございます

OSはWindows2000/XPです

このマシンはサーバなので常時動いているため、ログインのタイミングでは取得できません。
ですので、毎日決まった時間に取得するようにしたいのです。

NetRemoteTOD という関数も調べてみましたが、
第一引数のサーバ名が どういう形式のものをセットすれば良いのかわからず、
今試行錯誤しています。
どうもUNICODEで指定するみたいなんですが。。
サーバ名が記述されているサンプルみたいなものがあれば教えてもらえませんでしょうか?

ぜひともよろしくお願いいたします。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

ならば ntp を使えばいいでしょう。自動的に時間が修正され、何も触る必要は無いです。

ってもしかして
・マシンの内蔵時計の誤差が大きいのを自動修正したい
って要望ではなくて
http://www2.moug.net/bbs/program/20060308000003.htm
のような要望?

NetRemoteTOD のサンプルは見ましたか?簡単でしょ?
NetRemoteTOD(L\\\\timeservername, (LPBYTE*)&pBuf); するだけですよ。
第一引数はサーバ名に \\ をつけたもの、いつも使っている
net use k: \\myserv\share 等と同じです。
C/C++ ソースコード内に \ を書きたいときは \\ とするので上記例は \\\\ で正しい。


返信引用
ある
 ある
(@ある)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

tetrapodさん お返事ありがとうございます。
ntpってのがどんなものかよくわかってないので使用できませんでした。。

NetRemoteTOD の方 詳しく書いていただきましてありがとうございます。
おかげさまで時間の取得はできました。

第一引数の Lがなかったりとか¥が4つとかその辺がおかしくて取れませんでした。

取得はできたのですが、その値を自端末のシステム日付に設定する時に

TIME_OF_DAY_INFO 型からSYSTEMTIME型にキャストができなかったので

構造体の内容を各自セットしてSetLocalTimeを実行したところ、
どうもタイムゾーンとかいうのが反映されていないようで
時間がおかしくなってしまいます。

SYSTEMTIME sSysWork;

sSysWork.wYear = pBuf->tod_year;
sSysWork.wMonth = pBuf->tod_month;
sSysWork.wDay = pBuf->tod_day;
sSysWork.wHour = pBuf->tod_hours;
sSysWork.wMinute = pBuf->tod_mins;
sSysWork.wSecond = pBuf->tod_secs;
sSysWork.wMilliseconds = pBuf->tod_tinterval;
sSysWork.wDayOfWeek = pBuf->tod_weekday;

このタイムゾーンをどうすれば 取得した日時をそのままローカルの端末に
反映することができるのでしょうか?

聞いてばかりですみませんが よろしくお願いします。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

うーん。もし時計が狂うのを防止するだけなら解決の方向がずれてると思う。
net time /domain とか /rtsdomain とか /setsntp とかでいける。
プログラム組む必要は無い。
信頼できるタイムサーバを作るってのはまた話が別だけど。

んで、そこまで出来てるのならもうちょっと調べて欲しかったような気がする。
tod_timezone ってのがメンバにあるんだけど、それでいけると思う。
どの TZ をいつ誰に適用するかは要考察かもしれないけどね。

アメリカにあるファイルサーバを
イギリスにあるタイムサーバに同期させるためのプログラムを
日本にあるクライアントマシンで実行させる

とき、どこの TZ をいつ誰に適用させるか?は慎重に考えないとね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました