機能にNTPサーバーによる時刻同期を付けたいのですが、
未熟なモノで自力でスクリプトを作る事が出来ず、引用させて頂いています。
http://blog.goo.ne.jp/hiro239415/e/c426a545863921a13a9d6a70b7ae4484
時刻を合わせた後ランチャーを終了させずに切断したいのですが上手く行きません。
心優しい方・・・修正をお願い致します。
screen 0,300,150:title "ランチャ" objsize 100,50 pos 0 ,0 :button "メモ帳",*notepad pos 100,0 :button "ペイント",*paint pos 200,0 :button "タスクマネージャー",*task pos 0 ,50:button "電卓",*calc pos 100,50 :button "ゴミ箱を空にする",*recycle pos 200,50:button "日付と時刻",*date pos 0,100: button "プログラムと機能",*uninst pos 100,100:button "時刻合わせ",*ajust pos 200,100:button "終了",*owari stop *notepad;メモ帳を起動する exec "notepad.exe" stop *paint;ペイントを起動する exec "mspaint.exe" stop *calc;電卓を起動する exec "calc.exe" stop *task;タスクマネージャーを起動する exec "taskmgr.exe" stop *recycle;ゴミ箱を空にする ※ スクリプトが長くなるため一部省略しています。 stop *date;日付と時刻 stop *uninst;プログラムと機能 stop *ajust;時刻合わせ #define PORT 123 #define SOCK_DGRAM 2 #define AF_INET 2 #define FD_MESSAGE 0x33 #define FD_EVENT 0x5000 #define WM_TIMER 0x0113 #define WM_CLOSE 0x0010 #define ID_TIMER 0x6000 #uselib "Ws2_32.dll" #cfunc WSAStartup "WSAStartup" int , sptr #cfunc socket "socket" int,int,int #cfunc inet_addr "inet_addr" sptr #cfunc gethostbyname "gethostbyname" sptr #cfunc connect "connect" int,sptr,int #cfunc send "send" int,sptr,int,int #cfunc recv "recv" int,sptr,int,int #cfunc WSAAsyncSelect "WSAAsyncSelect" int,int,int,int #func shutdown "shutdown" int,int #func closesocket "closesocket" int #func WSACleanup "WSACleanup" #cfunc WSAGetLastError "WSAGetLastError" #cfunc htons "htons" int #cfunc ntohl "ntohl" int #uselib "crtdll.dll" #cfunc localtime "localtime" sptr #cfunc asctime "asctime" sptr #uselib "kernel32.dll" #func SetLocalTime "SetLocalTime" sptr #uselib "user32.dll" #cfunc SetTimer "SetTimer" int,int,int,sptr #cfunc KillTimer "KillTimer" int,int sdim host,260 sdim hostname,260 dim tflag : tflag=0 host="eric.nc.u-tokyo.ac.jp" hostname=host sdim WSAData,400 ret=WSAStartup(0x0101, varptr(WSAData)) if ret!=0{ dialog "WSAStartup error",,"stop" gosub *closesoc } gosub *SVconnect oncmd gosub *FDEVENT,FD_EVENT oncmd gosub *closesoc,WM_CLOSE oncmd gosub *TIMER,WM_TIMER gosub *SetTime stop *FDEVENT if wparam==soc{ if lparam>>16==0{ ret=lparam&0xffff switch ret case 0x0001 //FD_READ gosub *SVrecv swbreak case 0x0020 //FD_CLOSE gosub *closesoc swbreak default swbreak swend } } stop return *SVsocket soc=socket(AF_INET, SOCK_DGRAM, 0) if soc == 0{ gosub *closesoc dialog "socket error",,"stop" stop } return *SVconnect gosub *SVsocket dim svaddr sdim hostent, 16 svaddr=inet_addr(varptr(hostname)) if svaddr==-1{ ret=gethostbyname(varptr(hostname)) if ret{ dupptr svaddr,ret+12,4 dupptr ret,svaddr,4 dupptr svaddr,ret,4 } else{ gosub *closesoc dialog "gethostbyname error" return } } sdim sockaddr, 16 wpoke sockaddr, 0, AF_INET wpoke sockaddr, 2, htons(PORT) lpoke sockaddr, 4, svaddr if connect(soc, varptr(sockaddr), 16)==-1{ gosub *closesoc dialog "connect error" return } ret=WSAAsyncSelect(soc,hwnd,FD_EVENT,FD_MESSAGE) if ret!=0:dialog "WSAAsyncSelect error",,"stop":stop ret=SetTimer(hwnd,ID_TIMER,5000,0) return *SVsend dim NTP_SEND, 12 NTP_SEND(0) = 11;htonl(0x0B000000) ret=send(soc,varptr(NTP_SEND),48) if ret != 48{ gosub *closesoc dialog "send error" return } return *SVrecv dim NTP_RECV , 12 if recv(soc, varptr(NTP_RECV) ,48 ,0)==48{ dim t dim tm,9 ret=ntohl(NTP_RECV(10))-2208988800 dupptr tm,localtime(varptr(ret)),36 pos 50,50:tm(5)+=1900:tm(4)++ if tflag==1{ sdim systime,16 wpoke systime,0,tm(5):wpoke systime,2,tm(4) wpoke systime,6,tm(3):wpoke systime,8,tm(2) wpoke systime,10,tm(1):wpoke systime,12,tm(0) SetLocalTime(varptr(systime)) tflag=0 } dupptr tm,ret,36 dialog ""+gettime(0)+"/"+gettime(1)+"/"+gettime(3)+" \n"+gettime(4)+":"+gettime(5)+":"+gettime(6)+"\nに変更しました。" gosub *closesoc WSACleanup } return *TIMER gosub *SVsend return *SetTime tflag=1 gosub *SVsend return *closesoc ret=KillTimer(hwnd,ID_TIMER) shutdown soc,2 ret=WSAAsyncSelect(soc,hwnd,0,0) closesocket soc return *owari;プログラムを終了する end