2014年4月30日水曜日

IME と Windows8

こんにちは。yu1rowです。

Windows 8 や Windows 8.1 が登場してしばらくが経ちましたが、アプリケーションによってはIMEの制御に問題が出ることがあり、調査を行いましたのでメモを残します。

デスクトップなアプリケーションでは、テキストボックスにカーソルが移動した場合、日本語入力を自動的に切り替えたりするなんてことをする場合があります。
Windows 8 より以前では、他のウィンドウに切り替えて入力方法を切り替えても、元のウィンドウには何の影響もありませんでした。
Windows 8 以降では、インストールした直後の設定では、日本語入力モードはユーザ(セッション)毎に共通で、一つのウィンドウでの変更が他のウィンドウに影響してしまうという現象が起こる可能性があります。
※ちなみに Windows Server 2012 でも Windows 8 と同じことが起こります。

Windows 7 までの動作と同じにしたい場合、コントロールパネルから切り替えることが出来ます。
  • (jp) - [言語] - [詳細設定] - [アプリ ウィンドウごとに異なる入力方式を設定する]
  • (en) - [language] - [advanced settings] - [Let me set a different input method for each app window]

この操作をわざわざ顧客にさせるようなベンダーはあまり居ないと思いますけどね。

アプリケーションの開発者が現在の設定を確認するには SystemParametersInfo という API を使用します。
IDE 立ち上げるのも面倒だったので Excel VBA の標準モジュールで関数を書いてみました。
Option Explicit
#If VBA7 Then
Declare PtrSafe Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uparam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
#Else
Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uparam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
#End If
Const SPI_GETTHREADLOCALINPUTSETTINGS As Long = &H104E

' ------------------------------------------------------------
' [Description]
'  IMEの入力モードがセッション毎/スレッド毎どちらで
'  保持されるかの設定状況を返します。
' ------------------------------------------------------------
' [Returns]
'  0 : セッション毎(Windows 8以降のみ)
'  1 : スレッド毎
' ------------------------------------------------------------
' [Author]
'  yu1row
' ------------------------------------------------------------
Public Function GetThreadLocalInputSettings() As Integer
    Dim ret As Long
    Dim data As Long
    ret = SystemParametersInfo(SPI_GETTHREADLOCALINPUTSETTINGS, 0, data, 0)
    If ret <> 0 Then
        GetThreadLocalInputSettings = IIf(data = 0, 0, 1)
    Else
        GetThreadLocalInputSettings = 1
    End If
End Function

SPI_GETTHREADLOCALINPUTSETTINGS(0x104E) は Windows 8 から追加されています。また、SPI_SETTHREADLOCALINPUTSETTINGS(0x104F) も追加されており、これでアプリケーションから設定の変更も可能です。

さて、「コントロールパネルの設定を変えずに、他のウィンドウに影響させずに入力モードを切り替えたい」というワガママソリューションは存在するのでしょうか?
未検証ですが、以下の手順でうまくいくかもしれません。保証できませんけど。

  1. Windows 8 で、かつ入力モードがアプリ毎保持ではない場合、アプリ毎保持に変更する(SPI_GETTHREADLOCALINPUTSETTINGS / SPI_SETTHREADLOCALINPUTSETTINGS)
  2. IME の制御を行う (ImmSetConversionStatus とか)
  3. 1 でアプリ毎保持に変更を行っていた場合、設定を元に戻す(SPI_SETTHREADLOCALINPUTSETTINGS)
どうなんでしょうかね。やってみた人、結果教えてくれると嬉しいですw

それでは。

2013年9月14日土曜日

Windows 資格情報コンテナを編集する

Windows 資格情報コンテナを変更する方法


Windowsの共有フォルダにアクセスする際、パスワードを保存しておき、次からは入力をしなくていいうように資格情報を保存してある場合があります。
これを修正する方法です。

※全てWindows 7 Professionalでの確認のみ行っています

  1. [コントロールパネル] -  [ユーザーアカウント] - [資格情報の管理]
     
  2. ファイル名を指定して実行([Windows]キー+R)
    > rundll32 keymgr.dll,KRShowKeyMgr
     
  3. (コマンドプロンプトから) "cmdkey"
    rem 資格情報一覧を表示
    cmdkey /list
    
    rem 資格情報を削除する例
    cmdkey /delete:192.168.0.100
    
    rem 資格情報を追加する例(パスワードが尋ねられる)
    cmdkey /add:192.168.0.100 /user:userid /pass


一時的に保存された資格情報を削除する



上記の資格情報とは別に一時的に資格情報が保存されます。
「一時的」 とは言うものの、いつまで残っているのかは未検証です。

これはコマンドで削除が可能です。

ネットワークドライブの割り当てなどで「現在、指定されたネットワークフォルダーは異なるユーザー名とパスワードを使って割り当てられています。」というメッセージが表示されたときなどに削除すると解決するかもしれません。

※削除されるまで少し間があるようです(1分程度のタイムラグ?)

rem 現在の資格情報の割り当てを確認
net use

rem いらないものを /delete で削除。
net use \\192.168.100.NNN\folder /delete

rem 全部消すなら以下でもOK(消してもいいなら)
net use * /delete /y


2013年2月19日火曜日

Excelで正規表現を使いたくて

Excelシート上で正規表現検索ってできたっけ?


どうも。yu1row です。

ふつーは正規表現での検索はできないみたいです。
それを可能にするプラグインを入れて試してみます。

ダウンロード


[SEのためのExcelツール] - [正規表現検索 Excel用正規表現検索ダイアログアドイン]

インストール


ダウンロードしたZIPファイルを展開してできたexcelreフォルダ内のexcelre.xlaをダブルクリック。
この際、マクロを有効にして下さい。
言語選択するダイアログが出たら「はい」で英語、「いいえ」で日本語になります。

基本的な使い方


  • 検索ダイアログを表示する
    Ctrl+R
これだけw

オレオレトラブルシューティング


  • ESC → 「コードの実行が中断されました。」

    →「継続」とすると大体大丈夫

  • 検索に引っかからない

    →検索条件を見直してみる

    →ダメな場合、セルを選択している場合は選択を解除してみる

     
  • 「実行時エラー'5': プロシージャの呼び出し、または引数が不正です。」

    →[検索]-[検索する文字列] のテキストボックス内で Ctrl+Z や Ctrl+X を押すと起きるので、以下の方法を試す

  • 「実行時エラー'13': 型が一致しません。」

    →Excelの再起動、もしくは以下の方法

    1. [ツール] - [アドイン] - [Excelre]のチェックOFF - [OK]
    2. 「実行時エラー'75': パス名が無効です。」が出たら[終了]
    3. もういちど[ツール] - [アドイン] - [Excelre]のチェックON - [OK]
Word用のもあるっぽい。
こんど試してみます。

以上です。

2013年2月6日水曜日

PukiWiki の WikiName を解除したい

yu1row です。
今回のネタはタイトルのまんま。

勝手にリンクされてしまう


PukiWiki でページ編集してて勝手にリンクされちゃうのがイヤやなって思って調べたんです。
勝手にリンクされちゃうのは例えば
  • NullPointerException
  • ValueName
みたいな。
「大文字で始まる単語が2つ以上続く文字列」が勝手にリンクされるみたいです。
正規表現的には
\b([A-Z][a-z]+){2,}\b
みたいな。

特定の場所だけリンクされたくないって場合どうするのか?って話です。

解決方法は大文字を"&#xNN;"みたいな数値文字参照で置き換えるってことらしい。面倒。

とりあえずツール作るのは自己満足の極み


変換ツールを作ったんで使いたい人は使ってね(投げやり)
[Escape the WikiName]

需要、あるかなぁ?
今回はここまでー!

2012年12月26日水曜日

WordPressの検索を表示させない

yu1rowです。

タイトルのとおりです。タダのメモです。

WordPress 3.4jaのTwenty Elevenでのみ確認しています。
で、「検索」って何かって?

↓これです。これを消したいだけです。

google先生に尋ねてみると、function.phpをいぢれだとか書いてました。

でも、なんとなくイヤです。
外観に因る部分はcssで済ましちゃいたいプログラマさん。

結局style.cssに一行追加するだけでした。

■Twenty Eleven: スタイルシート (style.css)
#branding .only-search #searchform {
    visibility: hidden; /* 追記:サーチバーを表示しない */
    top: 5px;
    z-index: 1;
}

これだけです。以上!

ドメイン取得後に届いた「Domain Purchase」っていう迷惑メール

こんにちは。yu1rowです。

ドメインをとったら、ちょっとしてから「Domain Purchase」とする迷惑メールが届きまんた。
日本語で情報が見つからなかったので調べた結果を載せときます。

※以下メールの内容。ちょっと書き換えてあります。(http→ttp、****.***→取得したドメイン、***@***.***→whoisに登録されているメールアドレス)
※以下の本文に書いてあるURLのサイトはマルウェアが仕込まれている可能性がある。踏んじゃダメ。絶対。
[From]
Domain Purchase (domainpurchase@domainpurchase.co)

[Subject]
Purchase of ****.***

[Body]
Congratulations on your purchase of ****.***. 

Your domain's value has been estimated on our domain appraisal service. 
You can read your custom report here: 
ttp://domainestimator.com/results/?domain=****.***. (Domain Estimator Report)

There is a large portfolio of domains related to your keywords. 
The current list of premium domains can be viewed here: 
ttp://domainclosing.com/?phrase=****.*** (Related Premium Domains)
 
Cordially, 

Stefanie Shay

If you would prefer not to receive email notifications of your estimated values in the future, 
you need to visit: ttp://unsubscribe.domainingalerts.com/?email=***@***.***


で、誰やねんステファニーって。 フルハウスなら知ってる。
差出人アドレスのTLD、"co"は別に珍しいものではないです。どうせ機械送信なんやしどうでもいいです。
まぁ確かにね、ドメインは買いました。 今回はWhoisを代行してもらうのを忘れてて、自分のメアドとか載せてたら来たんやと思います。

で、これらのURLは大丈夫なんかい?って思ってCleanMXで調べてみたところ、メールに記載されていた2つのドメインのURLはマルウェアを踏む可能性がある模様。クリックしちゃダメ。
どんなマルウェアかは詳しく調べてないけど、トロイです。

↓はCleanMXでメールに書いてあったドメインを検索した結果。クリックしても大丈夫
http://support.clean-mx.de/clean-mx/viruses.php?domain=domainestimator.com
http://support.clean-mx.de/clean-mx/viruses.php?domain=domainclosing.com

メール送って欲しくない方はコチラとばかりに、"not to receive email notifications"に続けてURLが書いてありました。
こっちはマルウェアの検出はなかったけどきっとただの生存確認だと思います。何にせよクリックしないほうがいい。
ドメイン取ってWhoisに自分の情報載っけてる人、気をつけて下さいね。

以上です。

2012年11月19日月曜日

続・Jenkins のビルドで SVN のチェックアウトに失敗する

またSVNでエラー


yu1rowです。

以前「Jenkins のビルドで SVN のチェックアウトに失敗する」という記事を投稿しましたが、現象が再現しましたので、その内容と解消方法について記録します。

Microsoft と ESET どっちが悪いの?


結論から言うと以下の状況で現象が発生する可能性があります。
  • Windows 7 に「ESET Smart Security」や「ESET NOD32 Antivirus」がインストールされている
  • Microsoft の更新プログラム「KB2735855」や「KB2750841」がインストールされている

現象には以下のようなものがあります
  • SVN(Subversion)のチェックアウトに失敗する
  • ニコニコ動画やYoutube再生中に緑画面になる

以前同じ現象が発生した時に原因となった更新プログラム(KB2735855)でいくつかのファイルが Windows にインストールされましたが、今回の更新プログラム(KB2750841)でも同じファイルが更新されています。
[KB2750841]
[ダウンロード:Windows7(x86)]
[ダウンロード:Windows7(x64)]

解決方法には Windows の更新プログラム (KB2750841) をアンインストールする方法と、ESET のセキュリティソフトウェアの設定を変更する方法の2通りありますが、個人的には後者はセキュリティ上やらないほうがいいんじゃないかと思います。参考程度に留めておいて下さい。
以下それぞれの解決(設定)方法について説明します。

解決方法1:Windows の更新プログラムをアンインストールする


  1. [コントロール パネル\すべてのコントロール パネル項目\プログラムと機能] を開く
  2. [インストールされた更新プログラム] を選択
  3. [Microsoft Windows (KB2750841) の更新プログラム] を探し、アンインストール
  4. Windows を再起動
  5. [コントロール パネル\すべてのコントロール パネル項目\Windows Update]を開く
  6. [n 個の重要な更新プログラムが利用可能です] のリンクをクリック
    ※リンクがなければ [更新プログラムの確認] を行う
  7. [Windows 7 用更新プログラム (KB2750841)] を右クリックして [更新プログラムの非表示] を選択

解決方法2:ESET 製セキュリティソフトウェアの設定を変更する


何度も言いますが、以下の方法ではセキュリティのレベルが落ちてしまうためお勧めしません。
参考程度に留めておいて下さい。
  1. 「ESET Smart Security」または「ESET NOD32 Antivirus」の詳細設定を開く
    ※写真は「NOD32 Antivirus」のもの

  2. 詳細設定の「Webアクセス保護」で「HTTPのチェックを有効にする」のチェックをはずす

以上です。