• 締切済み

タイマーオブジェクトを利用した時間の取得

今、卒研でVBを使ってよるのですが、そのプログラミングで悩んでいます。 タイマーを使って時間を取得しようと思い、パソコン画面右下の時間表示から取っているのですが、そうすると時間、分は表示できるのですが秒までは表示できません。 このやり方で秒まで表示できませんか? 違った方法でもVBを使って秒まで表示できるプログラミングがあったら教えてください。 VBを使って10分の1秒単位での時間の取得はできませんか? できたら2つのフォームにまたがって同じタイマーを使用したいのですが、何か方法はありませんか? すみません。 お願いします。

みんなの回答

  • hyde-la
  • ベストアンサー率28% (42/146)
回答No.10

蛇足ながら補足です。 WindowsAPIで細かい時間を取得するには GetTickCount()と既に出ているマルチメディアタイマーが あります。 両方とも、Windowsが起動されてからどれくらい経過したか? をms単位で返します。 (だから現在時間を知るには役に立ちません) 一般的に正確なのはマルチメディアタイマです。 GetTickCountはWin95/98では55ms単位でしか解りません。 NTなら、マルチメディアタイマと一緒で正確です。 しかしマルチメディアタイマも BeginTimePeriodを呼び出してからでないとそんなに正確じゃありません。 詳細はMSDNをどうぞ。 引数なしの関数で、DWORDを返すだけですから VBからでも気軽に呼び出せます。

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.9

 んとねぇ私が気にしているのは...。  もし、使い方が、『機器制御で”正確に10分の1秒”単位で時刻が欲しい』って事だと、使うべきAPIが変って来るって思っただけです。  また、10分1秒単位(100ミリ秒単位)で、時刻が欲しいって事だとGetLocalTimeよりも、Timerオブジェクトのイベントで100ミリ秒を指定してイベントを待った方がよいのかなぁって思ったのです。  後は、時刻表示を100ミリ秒単位で行うって事も考えましたが...。  っとまぁいろいろ場面が想定出来るので、まずは何に使用したいのが知りたいのですよね。  そんでぇマルチメディアタイマーとは...(ちょっと説明が長くなりますが)  通常のWindowsAPI(SetTimer()関数 - 最高で1/18秒単位)よりも高精度と制御性能(ミリ秒単位)で大枚ベントをスケジュール出来るAPI群  但し、単純に現在時刻が欲しい場合には適しません。

  • haporun
  • ベストアンサー率40% (230/562)
回答No.8

mnabeさまの >精度が低くなります ・・・ご本人も10分の1秒と言っているし、そのコンピュータが正確な時間を刻んでいるとも限らないから、勘弁してくださいな。 ところでそのマルチメディアタイマーとは何者? ってこんなところで質問しちゃっていいのかな。

  • yoshioz
  • ベストアンサー率28% (10/35)
回答No.7

> yoshiozさん、Nowはステートメントではなく関数ですよ。 でしたぁ♪

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.6

haporun 様の回答への補足です。  GetLocalTime で取得出来る値は、1000分の1秒までは取得できますが、実際に動作させるパソコンの性能に依存して、100分の1秒以下の値は不正確な値になってしまします。且つ、VBで作成されたモジュールの場合には、100ミリ秒以下は精度が低くなります。  同じタイマーを使用したいとの事ですが、タイマーでイベントが欲しいとか、100ミリ秒単位に何かの機器の制御がしたいとか...なると、GetLocalTimeではちょっと処理が難しくなります。  何をしたいのかをもう少し補足下さい。  ちなみに、マルチメディアタイマーを使用すれば、VBでもある程度の精度でタイマを取得する事が出来ます。

  • haporun
  • ベストアンサー率40% (230/562)
回答No.5

VBだけではおそらくムリです。 APIのGetLocalTimeという関数を使うと、1000分の1秒単位で取得できます。 -------------------------------------- Public Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type Public Declare Sub GetLocalTime Lib "kernel32" Alias "GetLocalTime" (lpSystemTime As SYSTEMTIME) -------------------------------------- を標準モジュールの最も上に貼り付けると、この関数は使えるようになります。 例: -------------------------------------- Dim ST As SystemTime GetLocalTime ST MsgBox ST.wSecond + ST.wMilliseconds / 1000 -------------------------------------- などとやれば、現在の秒が1000分の1単位でわかります。

  • haporun
  • ベストアンサー率40% (230/562)
回答No.4

なんだかみなさん、同時に同じ質問に飛びついてしまいましたね。 運良く私が1番目だったようで。 yoshiozさん、Nowはステートメントではなく関数ですよ。 mnabeさん、mm:dd:ssでは月:日:秒になってしまうのでは?

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.3

よく見えないのですが...単純に Format$(Now, "mm:dd:ss") で、文字列で現在時刻の”時分秒”を取得できます。

  • yoshioz
  • ベストアンサー率28% (10/35)
回答No.2

現在の時分秒を持ってきたいだけなんですよね? そしたらNowステートメントを使うとDate型で 今日の日付から時分秒まで返ってくるので それを使えばいいと思います。 ためしにイミディエイトで「?Now」と 入力してEnterキーを押してみてください。

  • haporun
  • ベストアンサー率40% (230/562)
回答No.1

すみません、なんだかおっしゃる事が理解できないのですが。 タイマーというのはタイマーコントロール? 右下の~はタスクバーの時計? タスクバーの時計の表示方法を変えるソフトはあります。 プログラムのソースも公開しているそうです(Cでしょうが)。 時間を取得したいだけなら、Now関数を使えばよいのでは。 Format(Now, "hh:mm:ss")などとやれば、秒まで含んだ時間の文字列が出来上がります。 何か私が見当違いなことを言っているようなら、補足ください。

参考URL:
http://homepage1.nifty.com/kazubon/tclock/indexj.html

関連するQ&A