情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | 編集

AutoHotkeyにおけるラベルの優先度と3キー同時押しの定義 このエントリーを含むはてなブックマーク

AutoHotkey(Version v1.0.48.05.L61)のホットキーの定義方法だと、どのラベルの内容が実行されるのか迷うときがあります。その優先度についてのまとめです。

後に書いた方が優先される(コンビネーションキー)

次のコンビネーションキー二つから成るコードを実行します。

a & z::msgbox, "a&z"
b & z::msgbox, "b&z"

このときに、「a,b,z」を同時押し(正確にはaとbを押した状態でz)すると、「b&z」と表示され、二つの行を入れ替えて、

b & z::msgbox, "b&z"
a & z::msgbox, "a&z"

としたときは「a&z」が表示されます。 このことから、後ろに書いた方が優先的に実行されると考えられます。

コンビネーションキーが優先される(通常ホットキーラベルとコンビネーションキー)

続いて、「Ctrl+z」と「a+z」のホットキーを定義してみます。

^z::msgbox, "^z"
a & z::msgbox, "a & z"

このときに、「Ctrl,a,z」を同時押し(Ctrlとaを押した状態でz)すると、今度は行を入れ替えたとしても必ず「a & z」と表示されます

このことから、コンビネーションキーに書いたことが優先的に実行されると考えられます。

3キー同時押しのホットキーを定義するときに注意

つまり、たとえばCtrlと無変換を修飾キー(prefix key)として利用し、「Ctrl+k」「無変換+k」、「Ctrl+無変換+k」をそれぞれ別々に独立して制御したい場合、「^k::」と「vk1Dsc07B & k::」を書いて二つ同時押し(「Ctrl+k」と「無変換+k」)、どちらかの中で三つ同時押しの動作を定義することになります。これは、Ctrl、Alt、Shift、Win以外のキーを二つ以上含む三つ同時押しを直接定義する方法がAutoHotkeyには存在しないからです

つまり、「^k::」側に書く方式

^k::
	If GetKeyState("vk1Dsc07B", "P")
		msgbox, "Ctrl+無変換+k"
	Else
		msgbox, "Ctrl+k"
	Return
vk1Dsc07B & k::msgbox, "無変換+k"

と、「vk1Dsc07B & k::」側に書く方式

^k::msgbox, "Ctrl+k"
vk1Dsc07B & k::
	If GetKeyState("Ctrl", "P")
		msgbox, "Ctrl+無変換+k"
	Else
		msgbox, "無変換+k"
	Return

が考えられるのですが、どちらにせよ、3つのキー(Ctrl,無変換,k)を同時押ししたときに実行されるのは「^k::」ではなく「vk1Dsc07B & k::」なのです。つまり、後者が正解で、前者は間違いとなります(前者を実行して三つ同時押しをしても、「無変換+k」が表示されてしまいます)

まとめ

AutoHotkeyには、このような優先順序があるようです。例に挙げたように、特に3キー同時押しを細かく制御しようとする場合には注意が必要です。ちなみに、ここで細かく、と言っているのは、

vk1Dsc07B & k:: Send, {Blind}{Left}

のように、CtrlキーなどのUp/Downを素通ししてしまうことで3キー同時押しを行うことも出来るからです。ただし、これでは制限が非常にきついので、本文中で紹介したような方法が必要になると思います。

3キー同時押しのうまいやり方が本当にこれなのかは分かりません。もっといい3キー同時押し方法があるのかもしれません。ただ、とりあえずこういうことが起こるということに気がついて、実際にはまってしまったのでメモしておきました。落とし穴うめうめ。

Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
Advanced Windows 第5版 上 (マイクロソフト公式解説書)
インサイド Microsoft Windows 第4版〈上〉 (マイクロソフト公式解説書)
APIで学ぶWindows徹底理解
スポンサーサイト
AutoHotkey | コメント:0 | トラックバック:0 | 編集

休止状態から復帰できなかった このエントリーを含むはてなブックマーク

休止状態から復帰しようとしたら、

LogonUI.exe - エントリポイントが見つかりません

プロシージャ エントリ ポイント SedScrollPos がダイナミック リンク ライブラリ USER32.dllから見つかりませんでした。

と表示されてしまい、何度繰り返しても解決せず。休止状態に入る前にメモリの中身が壊れていたとか、HDD(SSD)に退避するときに壊れたとかなのだろうか。

休止状態からの復帰を諦めて、通常起動したら普通に動作したのでいちよ解決。教訓は、休止状態に入るときであっても、ちゃんとデータは保存しておきましょうということ。

Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
Advanced Windows 第5版 上 (マイクロソフト公式解説書)
インサイド Microsoft Windows 第4版〈上〉 (マイクロソフト公式解説書)
APIで学ぶWindows徹底理解

Windows | コメント:0 | トラックバック:0 | 編集

レジストリファイルをインポートできないエラー このエントリーを含むはてなブックマーク

.regファイルインポートできないときの対処法

PuTTYの設定ファイルをバックアップしたのはいいものの

OSの再インストールのためにPuTTYの設定(レジストリ)をバックアップ(エクスポート)しておいたことは良かったものの、いざ利用しようと.regファイルをダブルクリックすると

***.reg をインポートできません。レジストリにアクセス中にエラーが発生しました。
と表示されてしまいました。

原因

原因は、OSの再インストール前に作成した.regファイルを利用しようとしたためでした。 レジストリファイル中にある「S-1-5-21-XXX...-XXX」のような文字列はSIDと呼ばれるのですが、OSの再インストール前のユーザーのSIDと、新しい現在のユーザーのSIDは通常一致しません。この不一致により、.regファイルがインポート(結合)できないのです。 このようなSIDの不一致は、他のPCで作成した.regファイルを利用する際にも発生することがあります

対策法1

直接的な方法として、.regファイルに記述されているSID「S-1-5-21-OLD」を新しいSID「S-1-5-21-NEW」で上書きする方法が考えられます。.regファイル中の古いSIDを見つけることは簡単です。「S-1-5-」あたりで検索すれば見つけられます。次に、現在のユーザのSIDを特定します。

regeditからレジストリエディタを起動すると、直接的に見ることが出来ますが、ユーザがたくさんいると、よく分かりません。そこで、コマンドプロンプトから

>whoami /user
と実行します。すると、ユーザ名とSIDのペアが分かるので、それを見れば現在のSIDを取得できます。

以上で古いSIDと新しいSIDの両方が取得できたので、.regファイル亡いの古いSIDを新しいSIDで置換すればOKです。

対策法2

もう一つの対策法は、.regファイルをどんなユーザでも利用できるようにするというものです。こちらの方が汎用性に優れていますね。

まず、.regファイル中の

HKEY_USERS\S-1-5-21-XXX-...-XXXX\
というところを見つけ出します。そして、それらを
HKEY_CURRENT_USER\
ですべて置換します。これだけ。

SIDに依存しなくなり、.regファイルを実行するユーザ(CURRENT_USER)に自動的に適用されることになり、インポートできるようになります。

まとめ

今回は、レジストリファイル(登録エントリ、.reg)がインポートできないというエラーの対策をメモしました。レジストリはOSの様々な挙動を変更できる重要な設定が行われている部分です。ですから、変更には非常に気を遣わなければなりません。今回紹介した方法は、今回私が行った範囲では成功しましたが、他の状況でどうなるかは一切保証できません。自己責任でお願いします。とりあえず、SIDの調べ方はこれで間違いないので、それはどんどん参考にしてみてください

インサイド Microsoft Windows
APIで学ぶWindows徹底理解
Advanced Windows 第5版 上 (マイクロソフト公式解説書)

Windows | コメント:0 | トラックバック:0 | 編集

コピー&ペーストが出来ない病の原因 このエントリーを含むはてなブックマーク

最近、コピー&ペーストができなくなるという現象が数回発生。コピーしても、ペーストができなくなります。

原因はSleipnir

症状を分析したところ、とりあえず原因がSleipnirにあることが判明。

とりあえず、分かったことを列挙します。参考までに

  • Sleipnirを閉じれば問題解決
  • とあるサイトを開いていたタブを閉じるだけでも解決
  • 閉じた後、再び開いても大丈夫。問題なし。
  • しかし、再び開いた後、ほかのアプリにフォーカスを移してから戻ってくると再発。
  • 「オプション>クライアント>クリップボード>タブを閉じたときにクリップボードを空にする※脆弱性対策」をオフにしても解決せず。意外。
  • ATOKのクリップボードビューアを見ると、該当タブが開かれているときに、Sleipnirからフォーカスを移すと、「現在のクリップボードの内容」が「(表示できません)」になる。
  • クリップボードビューアを見ながらいろいろ試してみると、ほかのアプリにフォーカスを移さずとも、タブを切り替えるなど、IMEが利用できない状態になった瞬間クリップボードの内容が利用できなくなっている模様。
  • さらにクリップボードビューアを観察すると、Ctrl+Cを押した瞬間はクリップボードにコピー内容が格納されているが、一瞬でまた「(表示できません)」に戻っている。
  • ちなみに、右クリックからのコピーであろうが関係ない。
  • 該当ページをセキュアモードで開く分には問題が発生しない→JavaScriptのせい?
  • キーボードのショートカットの設定をデフォルトに戻しても関係なし
以上。いろいろ試してみた結果です。

結論

ずばり、「原因はSleipnir」これだけ分かれば十分かと。そして、「特定のページが問題を起こしている」ということも重要かもしれない。

つまり、Sleipnirを再起動して問題が引き続き発生するなら、「最近開いたタブから順に閉じて、症状が発生するかどうかを確かめてみる」というのが私なりの処方箋。

コピペができない病になってしまったら、ぜひお試しあれ原因はほかにもいっぱいあるでしょうけど

Windows | コメント:2 | トラックバック:0 | 編集

Lenovo ThinkPad System Update の Update このエントリーを含むはてなブックマーク

今回、Lenovo ThinkPad X301 をVista SP2 にバージョンアップしたので、ドライバ類のバージョンアップをしてみることに。というか、現在絶不調なんです。

Think Vantage System Update を実行してみる。

ThinkVantageボタンから、「システムの更新」を実行。すると、Think Vantage System Update 3 が起動するのですが、最近このUpdateシステムが復活したおかげか、このSystem Update 自体をUpdateする必要があるようで、「次へ」をクリックすると、

System Update のコピーを更新する必要があります。 OK をクリックして System Update の更新を開始してください。

と表示されます。指示に従ってOKをクリックすると、

Lenovo より重要なお知らせ

Lenovo のシステム更新方法が変更され、ユーザ・エクスペリエンスが...(略)

System Update および Message Center Plus の最新バージョンをダウンロードするには、「インストールする」をクリックしてください。

という説明が表示されます。ここも指示に従って、「インストールする」をクリック。

すると、すぐにUpdateのダウンロードが開始されます。しかし、失敗して、以下のように表示されます。

System Update のダウンロードに失敗しました。ネットワーク接続がアクティブであることを確認してから、再試行してください。

しかたなく、閉じるボタンを押すのですが、するとすべて終了してしまい、また一からやり直し。なぜ再試行ボタンがないのかと。

そして、何度繰り返しチャレンジしても失敗。

ということで、手動アップデートを試みることに。

System Update を仕方なく手動アップデートしてみる

ダウンロードサイトは、"ThinkVantage System Update"です。もしリンク切れになっていたら、検索すればすぐ見つかるかと。

ちなみに、

注意:System Update を正常に動作させるにためには、Microsoft .NET Framework version 2.0 以降が必要です。

と表示され、すぐ下に、導入状況が表示されます。Firefoxなど、IEでないと、判定されないことがあります。私は、普通にインストールされていました。しかし、「以降」でいいんですかね?互換とかはなかった気がしますけど。。。

さて、今回(2009年10月3日)ダウンロードしたのは、「System Update 3.14」。円周率ですね。正確なバージョンは3.14.0024 2009/07/08。しかし、なぜかダウンロードされるファイルは"systemupdate314-2009-6-12.exe"日付が…

バージョンアップ内容に、「Microsoft Windows Vista (32ビット/64ビット) Service Pack 2のサポートを追加」という項目があったので、まさにこれはアップデートすべき内容のようです。というか、このせいでアップデートに失敗していた可能性は大きいですね

ちなみに、対応機種一覧。

  • Lenovo C100, C200, N100, N200, V100, V200
  • Lenovo 3000 J100, J110 デスクトップ
  • ThinkCentre すべて
  • ThinkStation すべて
  • ThinkPad A30, A30p, A31, A31p
  • ThinkPad G40, G41, G50
  • ThinkPad R30, R31, R32, R40, R40e, R50, R50e, R50p, R51, R51e, R52, R60, R60i, R60e, R61, R61e
  • ThinkPad T23, T30, T40, T40p, T41, T41p, T42, T42p, T43, T43p, T60, T60p, T61, T61p
  • ThinkPad X22, X23, X24, X30, X31, X32, X40, X41, X41 Tablet, X60, X60s, X60 Tablet, X61, X61s, X61 Tablet, X300
  • ThinkPad Z60m, Z60s, Z60t, Z61e, Z61m, Z61p, Z61t
  • ThinkPad R400, R500
  • ThinkPad SL300, SL400, SL500
  • ThinkPad T400, T500
  • ThinkPad W500, W700
  • ThinkPad X200, X200s, X200 Tablet
  • ThinkPad X301

さて、ダウンロードされたexeファイルを実行します。

ご使用のシステム上で、IBM Update Connector または System Update の既存バージョンが検出されました。インストールを継続するには、既存バージョンをアンインストールする必要があります。既存バージョンをアンインストールしますか?

もちろん「はい」。「既存バージョン」という言葉を3回も使っていますが、既存じゃないバージョンってよく意味が分からないです。

あとは、とりあえず待ちます。

の、はずでしたが、

一部のファイルは System Update ディレクトリーから削除できませんでした。これらのファイルには前に適用された更新のデータまたはログ情報(あるいはその両方)が入っていますが、アップグレードには必要ありません。残りのファイルを削除しますか?

ここも「はい」。ここも、突っ込みどころなのですが、「削除できませんでした」「削除しますか?」っておかしいですよね。

終了したら、再起動しかし、絶不調のため、シャットダウンに失敗。結局電源ボタンを利用して終了。そこから起動。

System Update 実行

System Update の Update が終了したので、本来の目的であったSystem Update自体を実行してみます。

順調にUpdateが進んでいきます。ダウンロードもちゃんと行われます。よかった。

インストールしたのは、

  • Rescure and Recovery 4.10, 4.20 and 4.21 WER patch 2 for Windows Vista(重要な更新)
  • Intel(R)82567 Gigabit Network Connection for Wndows Vsta 32-bit 9.52.25.0(推奨更新)
  • Intel Matrix Storage Manager driver for Windows XP/V32 8.8.0.1009(推奨更新)
  • ThinkPad BIOS 3.01-1.04(推奨更新)
  • ThinkVantage Access Connections 5.33(オプションの更新)
  • プレゼンテーション・ディレクター 4.07
  • ThinkPad 省電力マネージャー 2.51

滅多に更新することのないBIOSや、いろいろ苦労させられたMatrix Storage Managerがこうもさくっとインストールできるっていうのがかえって不安です。BIOSインストール中に表示される「ブロック 15 の 32 を確認中」って、"15"のところが1ずつ増えていたんですが、これって、「block 15 of 32」をそのまま訳しちゃったのかな。

とりあえず、これで更新がうまくいきました。

そして、なんと、ログオフ失敗・シャットダウン失敗・再起動失敗を繰り返していたのに、うまくいく用になりました

でも、Visual Studio 2008 SP1 のインストールが失敗というか、うまくいかない現象は解決せず。残念。タスクマネージャが起動しなくなるのがやっかい。

Windows | コメント:0 | トラックバック:0 | 編集
 | HOME |  OLD >>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。