• 締切済み

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

今、卒研で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

  • タイマーオブジェクト(さらに質問)

    VBを使って10分の1秒単位での時間の取得はできませんか? できたら2つのフォームにまたがって同じタイマーを使用したいのですが、何か方法はありませんか? すみません。 お願いします。

  • カウントダウンタイマーでのタイマーの表示方法

    VBを始めたばかりなです。 プログラムで-していく、カウントダウンタイマーを作成したのですが、1:30と設定すると90秒表示となり、どうしても01:30という分と秒の表示が出来ません。 カウントされる数字が、何分何秒という表示にさせる方法を教えて下さい 表示のプログラムは以下の通りです。 hyouji.Text = Format(waitsecond, "##:##") ※hyouji.textはタイマーを表示させる部分の名前です。

  • XP デジタルタイマーの表示の仕方

    宜しくお願いします。 WINDOWS  XPです。 パソコンの画面にデジタルタイマーを表示したいのですが出来ますか。 3:00(3分00秒)→2:59(2分59秒)……0:00(0分0秒)のように1秒ずつ減らして表示をしたいのです。そしてデジタル表示をパソコンの画面に出来るだけ大きく表示したいのですが、出来ますか。 宜しくお願いします。

  • 勉強に使えるタイマーを知りませんか?

    20分と区切って勉強したいときに使えるタイマーをさがしています。 キッチンタイマーは、大音量のものが多く、時計についているタイマーのように、ちいさくぴぴっとなるのが理想です。 あと、20分といれるときに、「2」「0」「0」「0」とうつのではなく、1時間、10分、1分、10秒(すべてある必要はありません)などの、単位ボタンがあるとありがたいと感じているのですが、そういうものを知っている方がいらしたらおしえてください。 よろしくおねがいします。

  • ActiveX EXEとタイマーとVB

    いつもお世話になってます。 さっそく質問ですが、 ActiveX EXE側にタイマーとテキストボックスを持っています。 VB側のフォームにテキストボックスがあります。 VBからActiveX EXEを起動させ、決まった時間(例えば5秒おき)にVBのテキストボックスに ある文字を表示させる、ということがしたいです。 条件として、 VB側の動きは、 (1)最初のActiveXを起動 (2)ActiveXのSetとNothingだけしかしない                   しかしません。 なので、ActiveXからは「RaiseEvents」はしません。 ActiveX側で、タイマーイベント部分に、 ActiveXのフォームのテキストボックス.text = "文字" set △△ = ActiveXのフォームのテキストボックス (△△は、ActiveXのフォームのテキストボックスとしてセットされています。) のように、プログラムしてみたのですが、 VB側のテキストボックスに表示できませんでした。 尚、VB側は、ActiveX以外の処理があるので、途中からActiveXを起動させることになります。 この条件で、VBのテキストボックスに文字を表示させることはできますか? もしできるとしたら、どのような方法がありますか?? まだネットや本で調べ途中なので、もし何か参考ページがありましたら教えていただきたいです。 よろしくお願いします。

  • 家電製品のタイマー

    はじめまして。  家電製品のスイッチがONになる時間を秒単位でコントロールする方法を探しています。  母が経営する喫茶店で提供しているスムージーは家庭用のミキサーを使っているのですが、スイッチを入れて他の作業をしていたりすると混ぜすぎてしまう事が多いようで、「一定時間でスイッチが切れるようには出来ないのか?」と相談されました。  自分なりに探したところ、コンセントに接続するタイマースイッチは時間単位か分単位の物しかなく、秒単位のコントロールが可能な物ですと、工業用の機械に組み込むタイマーしかありませんでした。  そこで、何か良い方法があれば教えて頂きたいのです。良さそうな製品や、関連書籍(大学は機械科卒なので、ある程度は理解できると思います)など、どんな事でも構いません。宜しくお願い致します。

  • 現在時刻・経過時間・残り時間を表示するタイマー

    現在時刻・経過時間・設定した時間までの残り時間の3つが同時に表示できるタイマーを探しています。 別々のものは沢山みつかりましたが、カウントアップ/カウントダウンタイマーを同時に表示できて、アップとダウンを連動してスタートさせられるものが見つかりませんでした。 時計は一緒のがなければ別でも良いのですが、カウントアップとダウンは同時に表示させたいです。 目的は試験や会議で時間を分かりやすく表示することです。 なので、タイマーの最大時間は3時間くらいまで。 全画面表示かそれに近い大きい文字で表示されることが望ましいです。 時:分:秒の表示が要ります。 前にマイクロソフトのテンプレートを応用して2時間のものをパワーポイントで作りましたが、 (アニメーションとスライドの自動切換えを使ったもの) 1分刻みだったので、最後の1分は秒までつけてほしいと言われ 手間がかかりすぎて対応を諦めました。 また、他の時間のものを作るものいちいち大変過ぎるので。 フリーソフトでどこかにありましたらご紹介ください。

  • かなり細かい時間の取得

    現在、CGIがおそいな~とおもって、 どこが遅いのかをチェックするために、 timeをつかって、現在の秒をprintで表示しているのですが、timeが1秒の位までしか出さないので、 細かいのをループさせているため、どこが遅いか確認できていません。 実行時間を0.1秒単位、できれば0.001秒単位で確認する方法はないでしょうか?

    • ベストアンサー
    • Perl
  • タイマー関数について

    こんばんは。 この掲示板には大変お世話になっています。ありがとうございます。 [質問内容] およそ1ミリ秒単位で、待機することができる関数はあるのでしょうか? 私は、C言語を使用しているのですが、タイマー関数としてはSleep関数しか知りません。しかし、最近になってSleep関数は10ミリ秒待機することが限界ということをこの掲示板で知りました。 Windowsプログラミングに用意してある関数で1ミリ秒待機できる関数はありますでしょうか? 私は今、対処方法としてダミー処理をほどこすことでだいたい1ミリ秒のタイマーを作っています。 C言語もまだまだ初心者ですがよろしくお願いします。

  • VBのタイマーコントロールについて

    VB2005のタイマーコントロールで疑問があります。 ピクチャーボックスコントロールにラベルを貼り付けて タイマーコントロールで文字がスクロールする プログラムを作ったのですが、 タイマーコントロールのインターバルを10msから120msまで 500回タイマーのイベントをカウントしたタイムとストップウォッチで 計ったタイムを比べたらズレが生じることが分かりました。 人間の手で計っていますが、計測方法としては、タイマーをスタートするボタンと同時にストップウォッチのスタートを押し、カウンターが500回で止まった時点でストップウォッチを止める方法でWindowXPでCPUがCore2 DuoのパソコンとWindowsMeでCPUがPentiumIIIのノートパソコンで下記のように計測しました。 WindowsXP 10ms…8秒24、20ms…15秒84、30ms…15秒82、40ms…24秒64、50ms…31秒60、60ms…31秒72、70ms…41秒21、80ms…47秒40、90ms…47秒32 後省略 WindowsMe 10ms…28秒25、20ms…28秒21、30ms…28秒10、40ms…28秒23、50ms…28秒28、60ms…57秒20、70ms…57秒43、以下ほぼ一緒なので省略110ms…56秒93でした。 その後、VBのヘルプの検索で、Windowsのタイマーの精度は55msとあるのを発見したのですが、WindowsMeのノートパソコンでは、55msの精度にあったデータが帰ってきたのですが、 WindowsXPのパソコンは、どう見ても内部精度は違うような結果に見えます。 どなたかタイマーの精度について知っておられる方、教えてもらえますか? よろしくお願いします。

専門家に質問してみよう