Windowsの最近のブログ記事

WindowsはJST(ローカルタイム)をシステム時刻(ハードウェア)に設定しようとするのに対し、LinuxはデフォルトではUTC(標準時)をシステム時刻に設定しようとする。結果、Windows/Linuxデュアルブート環境だと、Windowsで9時間遅れたように見える(もしくはLinuxで9時間進んだように見える)という時刻のずれが起こる。

解決方法は、A) 全部NTPクライアントに任せる、B) WindowsでUTC設定させる、C) LinuxでJST設定させる、のどれかになる。

A) 全部NTPクライアントに任せる場合、最近のOSだと標準でNTP同期するので一見なにもしなくてもよいように見えるけどそうでもない。時刻が離れすぎていると同期に失敗することもあるし、そもそも同期が完了するまでの間は時刻がずれたままとなる。Windowsの場合は同期したのを覚えていて、一回同期するとしばらくの間自動では同期しに行かない。頻繁にブート切り替えするならおすすめできない。

B) WindowsでUTC設定させる場合、レジストリ HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation にDWORD型の名前RealTimeIsUniversalで値1を入れる。ただし、これをするとOS標準のNTP機能(「インターネット時刻」)が動かなくなるようだ。他の適当なNTPクライアントを持ってくる必要がありおすすめできない。

C) LinuxでJST設定させる場合、Redhat系だと /etc/sysconfig/clock に UTC=false (もしくはUTC=no)、Debian系だと /etc/default/rcS に UTC=no。ただし海外フォーラム情報によれば、サマータイムがあると切り替わりの前後でシステム時刻が飛ぶのでおかしくなることがある、とか。つまりおすすめできない。

以上をまとめると、デュアルブートはおすすめできないということになるんだけど、やはりオレのググり方は間違っているのだろうか。

ちなみに、9時間くらいずれててもそうは困らない場合が多いはずだけど、私の場合はTwitter Oauthの認証がすぐにコケて困りました。Tween/OpenTweenで認証が通らず、再認証しようとすると「認証できませんでした Err:Failed to access auth server.」が出て困った困った。ググると何例か「Microsoft Windows」の規定のプログラムをリセットする話が引っかかるのでのでずっとそっち系を疑っていたけど、なんてことはない、時刻のずれが問題だった。5分以上ずれるとコケるみたい。ちなみに、ActiveDirectory・・・というかKerberosも5分以上時刻がずれると認証がコケるみたい。

winampを目覚ましに使う方法(2)

先の方法で目覚ましはOKだったんだけど、そもそもWinampで再生しながらスタンバイした場合、復帰時はWinamp再生しっぱなしにしてくれてたんで、わざわざ復帰時にWinampを強制起動&再生にする必要がなかった。

逆に、タイマーつけて指定時間後にスタンバイにしてくれるようなのが必要なことに気づいた。

スタンバイじゃなくて電源OFFや再起動なら、cmd.exeや「ファイル名を指定して実行」から「shutdown /s -t 2000」とかすればいい。いつもWinamp再生しながらこうやることで、MP3音楽再生のお休みタイマーにしている。詳細はshutdown.exe /? とかすれば出てくるのでそれを見ればよい。でもスタンバイはshutdown.exeからはできないみたい。

スタンバイは「rundll32.exe powrprof.dll,SetSuspendState」でできる。(休止を有効にした時はハイブリッドスタンバイではなくて強制的に休止にさせられちゃうらしい?(未検証)) ということで、これを指定した秒が経過した後に実行するスクリプトを用意すればよさげ。→ sleep.txt *.vbsにリネームしてね

InputBoxの返値確認が冗長な気がするけど、正しい書き方がわからなかった。

続きはさらに明日へ。

winampを目覚ましに使う方法

winamp.exeをMP3ファイルやm3uファイルを引数にして起動することで、起動と同時に指定したファイルを実行してくれる。でも以前の起動状態のプレイリストで再生してほしい場合はどうするの?とりあえず、以前の起動状態のプレイリストを直接し引数に指定して逃げる。
"C:\Program Files (x86)\Winamp\winamp.exe" "C:\Users\rarul\AppData\Roaming\Winamp\Winamp.m3u"
でも、プレイリストのラスト位置がクリアされて、プレイリストの一番上から再生されてしまう。うーん、どうしたものか。

"/KILL"をつけてwinamp.exeを動かすと、Winampを終了してくれるみたい。
他は、cmd.exe上で "winamp.exe /?" とかするといろいろオプションが出てくる。

あとは、これを適当なVBSにしてタスクスケジューラに登録すればOK。ちゃんとスタンバイから自動復帰してくれるかどうかが心配。
alarm.txt参考にどうぞ。

実験の続きはまた明日。

「高解像度でも常に最大化したい人向けのソフト」を紹介するという記事ではなく、それはどんなソフトなのかをできれば教えてほしいという記事です。つまり、私自身がもろにそういう人で、まさに困っているけれどもどうすれば快適になれるかがわからない、ということです。

これまで、ほぼすべてのWindowsアプリを「最大化」の状態で使い続けてきた私にとって、WUXGAは強敵です。最大化しても横がムダにあいてしまうんだもん。(こんな感じ) そんなわけで今までに試しに2つほど支援アプリを作ってみたんですが、どうもしっくりこないんですよねぇ。。

最初作ったのは、WUXGAのモニタ1つを(960*1200)のモニタ2つっぽい感じにごまかそうとしたものです。つまり「最大化」しても画面の半分に張り付くようにしようっていうやつです。グローバルフックで画面変更系を横取りし「最大化」メッセージがきたときに書き換えるようなやつ。グローバルフックでは最大化する領域情報の書き換えをしても反映されないらしいので、「最大化」メッセージがきたときにサブクラス化してアプリ内プロシージャを載っとり、んで WM_GETMINMAXINFO のときにごにょごにょしたれと。些細なことを実現するために嫌らしいとこをたくさん対処する必要があり、またタイミングによってうまく動いてくれなかったり、よくよく考えると排他の仕組みを厳重にやらないと大変なことになりうるアプリだと気づかされたりと、今のところ完成できず。キーワードはこの辺、SetWindowsHookEx, WH_CBT, HCBT_MINMAX, RegisterSubClass, WM_GETMINMAXINFO, SM_CXMAXIMIZED

次に作ったのは、仮想的なタスクバーを追加したれっていうソフトです。「最大化」するときはタスクバーの領域は除外されるので、それを逆手にとり、仮想的なタスクバー(=AppBar)を追加してそこは IM系を並べるという方向です。作り始めてから気づいたんですが、それって今はやりの "Sidebar" (ガジェットと呼んだ方がいいか?) となんら代わりがないんですよねぇ。。まぁSidebarほど大げさなものじゃなくていいやということで作ってみたんですが、AppBar部分として登録された領域は、たとえそこにアプリの窓が存在しなくても特別扱いされるらしく、マウスイベントが特別処理されてしまうっぽいです。具体的には、他のアプリをドラッグ中はタスクバー(AppBar)領域に入れないとか。タスクバー周りのメッセージの挙動をちゃんと理解しないといけないっぽそうってことで、今のところ完成できず。キーワードはこの辺、Appbar, SHAppBarMessage, タスクバーみたいなウインドウ

常に最大化するという思想が低解像度デスクトップの卑しい思想なのか、ワイド画面買ったらとっととVistaでガジェット使えというMS様のお教えなのか、今もWUXGA画面を前に右往左往する日々が続いております。

Virtual PC 2007にFC6入れた

ホストOSWinXPSP2(Pro)のMicrosoft Virtual PC 2007にFC6(Fecore Core 6 i386)を入れた。いろいろトラブったのでメモしておく。

まず画面がおかしい。 Xがおかしくて絶望的な画面が出たりする。とりあえずインストーラ起動時に「linux text」とかしてインストールを実行。インストール後 X が動くとまた変な画面になるので、起動時にgrub上で「kernel single」を追加するか、起動後に「Ctrl-Alt-F2」してtextモードにする。んで、/etc/X11/xorg.conf で画面の色を24bitから16bitに変更すればOK。VirtualPC2007が24bitに対応していないのが根本原因らしい。

Xを入れない環境でkernelをアップデートすると画面がおかしくなる。新しいKernelがVirtualPCに対応していないだとかなんとか。grub.confで「kernel vesa video=vesafb」とか追加するととりあえずOKになった。どうせ3Dとか使わんから、これでいいっしょ。

コンソールでも高解像度が使いたい。grub.confで「kernel vga=771」とか追加すると 800x600x8bit になってくれるらしい。意味合い的には「kernel vga=0x303」の方がいいらしいが、現状でちゃんと動いているのでもう触らないことにする。別の解像度・色深度にするなら数値を変えてちょ。

Fedoraとは関係ないんだろうけど、シリアル(COM)がなにかおかしい。ホスト上につながったUSB-Serial(pl-2303)がホスト上でCOM5と認識されて、VirtualPC上でゲストCOM1を物理PCのCOM5へとマップ設定し、んでゲストOS(FC6)でgdbベースのデバッガを/dev/ttyS0設定で動かし、USB-Serialの先のターゲットにつなごうとしてんだけど、なんか一部のデータを取りこぼしてるっぽい挙動になってる。BreaksPointちゃんと張れないとか。

USB-Serialのモノ自体は仮想環境じゃないFC6で同じgdbベースのデバッガ使ってつながってるので問題なさそう。ということで、Winのpl-2303用ドライバかVirutalPCのシリアルマッピング部がおかしいと思われるが、普通に考えるとドライバの方が疑いが濃いってことで、Prolificから最新ドライバ落としてきたりしてるがやっぱおかしいなぁ。デバマネ上のドライバのCOM設定を一通り触ったりしてるがどうもわからん。これができると作業で大幅に楽できるだけに、うまくいくまであきらめたくないとがんばって、結局半日ムダにして仕事進まなかったのはここだけの内緒ってことで。

Vistaブートローダに関するメモ

Windows Vista では、従来の Windows XP (と2000、NT4.0も含んでたはず) で使われてきた Ntdetect.com/NTLDR/Boot.ini とかを使った ブートマネジャーから変更され、BCDとかなんとかいうやつに変更された。その影響で、Vista と XP のデュアルブートを構築するときにいろいろと面倒なことに直面する可能性がある。以前のバージョンの Windows オペレーティング システムをデュアルブート構成でインストールした後、Windows Vista が起動しなくなる

Vista のやつをMBRに入れるには、Vista の インストールDVDからブートして、インストールではなく修復を選び、んで「bootrec.exe」を実行すればよい。「bootrec /fixmbr」とか「bootrec /rebuildbcd」とかそんな感じのはず。

ブートセクタを書き直すには、WinXP/Vista 上から VistaのインストールDVD内にある bootsect を実行する。「Q:\boot\Bootsect.exe -NT60 All」とかそんな感じで。-NT5.2 とすると XP互換のものを入れてくれるはず。

ブート時のメニューをさわるにはVista上で「bcdedit」を使う。従来の boot.ini の編集に相当する。パラメータの設定とかは忘れた。Vista上のmsconfig メニューからの編集もほとんどできないに等しいのでいろいろと面倒だ。

ここから下は蛇足。

上のようなことを得て Vista/XPデュアルブート環境を作っていたが、何を血迷ったか Linux (Fedora Core 6)を入れようと思ってしまった。しかもUSB接続のHDDに。必然的にGrub(MBRとブートマネジャーとも)を使うことになるけど、さらに何を勘違いしたのか GrubのStage2をUSB接続のHDDへと入れてしまった。おかげでUSB接続のHDDをつないでいないとGrubのブートメニューすら出せない状態にしてしまった。しかもGA-965p-ds4ベースのPCじゃ、デフォ設定ではインストール中もインストール後の起動時も固まるし。(固まるとIRQかなにかをおかしくするのかWindowsすら起動しなくなってしまいCMOSクリアしないと復帰しなかった、よくわからん。) で、MBRとかを元に戻そうとVistaを起動しようとするといきなり「アクティベーション認証」とかいわれて、認証しないと起動させてくれないし、しかもCMOSクリアで時刻がずれていたために認証が通らなかったし。linuxは ich8使ってる場合は noapic nolapic irqpoll とパラメータをつければたぶん大丈夫だろうけど、これでインストールはできたものの、起動はまだ試してない。という感じでいろいろとトラブった。

まぁあれだ、オレにはよくわからん世界だ。変なことしない方がよかった。

レジストリを甘く見ていた

WindowsUpdateに出てたネットワークドライバでアップデート
→なんか調子が悪くなる(TCPが突然切れるなど)
ドライバを元に戻す
→元に戻らん・・・デバイスを消しても新しいドライバを入れようとしやがる
System32\ 以下にあるそれっぽいファイルを消しまくる
→それでも新しいドライバで認識する
Regedit で それっぽい箇所を消しまくってみる
→ネットワークデバイスが認識されなくなってしまった(デバイスマネジャー上で「?」だらけ)
Windows の インストール CD で修復しようとする
→修復途中で固まりやがる、ヤバイ、完全にヤバイ
アップグレードインストールで対処しようとしてみる
→ネットワークデバイスドライバのアップグレードの箇所で止まった。もうダメだ。
あきらめてクリーンインスコすることにする
・初期ブートとフォーマット
・インストール
・WindowsUpdate と ドライバのインストール
・周辺機器ドライバ・アプリのインストール
・開発ツールのインストール(Javaとか) ← 今ここ。Borland C++ Compiler 落とそうとしてて Borland の FTP サーバが死んでてキレてるとこ
・Adobe Reader, Flash Player, Reaplayer, Winamp, Quicktime などなど
・そのほかのアプリのインストール

これでここ2年で10回以上クリーンインストールしてる気がするが、気にしないことにする。
サブ PC で入れ直すのはよくあるだろうが、メイン PC でここまでするやつはそうはいないだろう。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちWindowsカテゴリに属しているものが含まれています。

前のカテゴリはWin32プログラミングです。

次のカテゴリはインターネット一般です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0