Hatena::Groupnadesiko

99円のへたれ学習帳

2008-09-20

相対パスを展開

| 19:14

質問掲示板に絶対パス→相対パスの質問がありました。では、逆はどうやればいいのかと思って調べてみたら、APIあるんですね。

http://msdn.microsoft.com/ja-jp/library/bb773571%28en%2dus%2cVS%2e85%29%2easpx

http://nienie.com/~masapico/api_PathCombine.html

MSDNにはなぜか日本語の資料がありません・・・

●PathCombine({参照渡}Dest,{参照渡}Dir,{参照渡}File) =DLL("shlwapi.dll","LPCTSTR PathCombineA(LPTSTR Dest,LPCTSTR Dir,LPCTSTR File)")
●パス結合(DirとFileを)
	Destとは文字列
	Destに2048を確保
	PathCombine(Dest,Dir,File)
	Destで戻る
"c:\aaa\bbb\ccc"と"..\d\e\..\test"をパス結合して表示

例によって「パス結合」はPathCombineのラッパーです。絶対パスと相対パスを与えると、展開された文字列が帰ってきます。

これ、標準命令に入れてくれませんか?

素でないと思ってましたorz

 U D U D 2008/09/20 20:42つまり「相対パス展開」じゃないですかね?

kyuuzyuu9yenkyuuzyuu9yen2008/09/21 13:47なんとなくAPIの名前に合わせましたが、確かにそのほうがわかりやすいですね。命名は難しい・・・

2008-09-11

SetLocalTimeを使ってHTTP時刻合わせクライアントを作る

| 21:37

あと2週ほどで日本語言語ワークショップです。生活にやっと一区切り付いたので、ろ作らないとまずい感じです・・・orz

いうことで、Win32APIの「SetLocalTime」を使って、HTTPでパソコンの時刻合わせをするクライアントを作ってみました。

http://msdn.microsoft.com/ja-jp/library/cc429941.aspx

●SetLocalTime({参照渡}lpSystemTime) =DLL("kernel32.dll","BOOL SetLocalTime(LPSYSTEMTIME lpSystemTime)")
●システム時刻設定(dateへ|dateに)
	stとは配列。SYSTEMTIMEとは変数。Iとは整数。
	date[0]を"/"で区切る
	st[0]=_[0];st[1]=_[1];st[3]=_[2]
	date[1]を":"で区切る
	st[4]=_[0];st[5]=_[1];st[6]=_[2]
	st[2]=0;st[7]=0
	SYSTEMTIMEに16を確保
	Iで0から7まで繰り返す
		INT(st[I])をSYSTEMTIMEの(I*2+1)に"WORD"でバイナリ設定
	SetLocalTime(SYSTEMTIME)
●UNIX2date(unix)
	tmpとは配列
	dayとは整数=unix/86400%86400
	unix=unix-day*86400
	tmp[0]=日付加算("1970/1/1","//{day}")
	tmp[1]="{ゼロ埋め(unix/3600%24,2)}:{ゼロ埋め(unix/60%60,2)}:{ゼロ埋め(unix%60,2)}"
	tmpで戻る

URL="http://ntp-a1.nict.go.jp/cgi-bin/ntp"
URLへHTTPゲット
それの"<BODY>{\10}"から"{\10}</BODY>"まで範囲切り取る
UNIX2date(それ-2208988800+60*60*9)
それへシステム時刻設定
おわり

「システム時刻設定」はSetLocalTimeのラッパーです。

サーバは、はNICTのものを指定しています。

http://www2.nict.go.jp/w/w114/tsp/PubNtp/clients.html

HTTPNTP時刻を得られます。(ヘッダのDateを使用しても良いのですが、少々解析が面倒です。)

TIPSを参考に、NTP時刻から2208988800秒を引いてUNIX時刻にします。このままではGMTなので、60*60*9を足してJSTに。時もシステムから取得すれば完璧ですが、とりあえず。

これを応用すれば本物の(S)NTPクライアントも作れるかもしれません。

MakendraMakendra2011/11/24 17:13It's wodnefurl to have you on our side, haha!

bumggmxkwaabumggmxkwaa2011/11/24 21:31iHMdgR <a href="http://jacxshrqrqkx.com/">jacxshrqrqkx</a>

emgtfdgemgtfdg2011/11/28 22:28OkYcRL , [url=http://aunogvgtkqhq.com/]aunogvgtkqhq[/url], [link=http://iwfpttqgfqbf.com/]iwfpttqgfqbf[/link], http://lyiluvpkudbp.com/

qdmvtfpeeuqdmvtfpeeu2011/12/01 18:19PC7Kxb <a href="http://kwjmhxjujyoc.com/">kwjmhxjujyoc</a>

edlewjrefedlewjref2011/12/06 01:05oz7xY5 , [url=http://tfgspffhkiud.com/]tfgspffhkiud[/url], [link=http://ntuwgaoxyose.com/]ntuwgaoxyose[/link], http://areomcjxdtrw.com/

2008-06-28

UNIX時間を取得する

| 19:32

UNIXを取得したいことがたまにあるのですが、標準ではついていないので自作するしかありません。

システム時刻を取得して時を引いてもいいのですが、どう書くorgでWin32APIのGetLocalTimeを使ってみたので、の標準時刻版のGetSystemTimeを使ってみました。

Nothing found for 404 - エロと風俗情報満載 どう抜く?

!変数宣言が必要
UNIX時間とは整数 →UNIX時間取得
●GetSystemTime({参照渡}UTCTime) =DLL("kernel32.dll","VOID GetSystemTime(LPSYSTEMTIME UTCTime)")
●詳細標準時取得
	SYSTEMTIMEとは文字列
	Iとは整数
	BUFとは配列
	SYSTEMTIMEに16を確保 //WORD(16bit)*8[byte]
	GetSystemTime(SYSTEMTIME)
	Iで0から7まで繰り返す
		BUF[I]=SYSTEMTIMEの(I*2+1)を"WORD"でバイナリ取得
	BUFで戻る
●UNIX時間取得
	Tとは配列=詳細標準時取得
	_=日数差("1970/1/1","{T[0]}/{T[1]}/{T[3]}")*(60*60*24)+秒差("0:0:0","{T[4]}:{T[5]}:{T[6]}")

時間エディタとはエディタ
これについて
	文字サイズは36
	幅は300
時間タイマーとはタイマー
これについて
	値は200
	時満ちた時は
		時間エディタはUNIX時間
	開始

ゲッターを使って「UNIX」として使えるようにしてみました(関数の名前を短くした方が簡単か・・・)

やっぱり「今日」と「」から生成するのが簡単?

ちなみに、システムのUTCとの時以下の様にレジストリから取得できます。(分で入っているので扱いやすいように秒にしています。)

●GetTimeZoneDiff
	Hとは整数="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation"のレジストリ開く
	TZDとは整数=(Hで"ActiveTimeBias"をレジストリ整数読む)*60
	Hのレジストリ閉じる
	TZDで戻る