2013年12月01日

Microsoft .NET Framework 4.5.1 (KB2858728)がWindowsUpdateでインストールできない

OSはWindows7。定石通り、手動でインストールを試みる。
マイクロソフトのサイトhttp://support.microsoft.com/kb/2858728から、オフラインインストーラーをダウンロードして実行してみると、「ディスク領域が不足しています」と出た。どうやらこのインストーラーは、空き領域を3G近く要求するらしい。
仕方ないのでCドライブの空きを増やしたら、ちゃんとインストールできた。

WindowsUpdateは「コード13EC WindowsUpdateで不明なエラーが発生しました」なる謎のエラーコードとエラーメッセージで失敗していた。この辺の表示はもう少し親切にならんかったのだろうか。ディスクが足りませんでした、とか言ってくれるだけでもだいぶ違うのだが。

kb2858725.png
posted by usoinfo at 10:33 | Comment(0) | Windows | このブログの読者になる | 更新情報をチェックする

2013年11月12日

Firefoxの個人証明書をエクスポートしたらOpera12にインポートできない

StartSSLでSSLの証明書を作ろうと思ってサインアップしたら、個人認証のために個人証明書を作成してインストールした。この作業をFirefoxでやったので、Operaでもアクセスできるように証明書をエクスポート&インポートしようとしたら、Opera12が「証明書チェーンが正しく順序付けられていませんでした」とかなんとか言って拒否する。意味がわからん。パスワードは合ってるし、Operaで.p12を食う処理に問題があるのだろうか。

ちょっと困ったが、FFでエクスポートしたp12を、一度IEにインポートしてエクスポートしてから、そのファイルをOpera12に食わせたら、うまくいった。PKIX業界はカオスでよく分からない………
posted by usoinfo at 09:03 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年10月29日

初代EeePC(701または4G-Xと呼ばれる機種)で、CentOS6で内蔵の無線LANを使う

内蔵ストレージが4Gしかない初代EeePC。ストレージも小さいし画面も狭いので、人間が使うにはちょっともうスペック不足だが、SSD+Atomの構成で省電力静音なので、ちょっとしたサーバーにでもしようと思う。
ところが、簡単に動きそうなLinuxのディストリビーションを入れようとしても、XububtuもLubuntuもストレージ不足で入らない(前者は5.4G、後者は4.3G必要)。そもそもサーバー用途なので、グラフィカルデスクトップなぞは不要であるから、CentOSの最小構成をインストールしてみた。

で、起動してみると、内蔵の無線LANが動かないのである。ifconfig wlan0 でインターフェースは見えているが、通信はできない。どうやら初代EeePCの無線LANはクセのある奴らしい。
# lspci | grep Atheros
01:00.0 Ethernet controller: Atheros Communications Inc. AR242x / AR542x Wireless Network Adapter (PCI-Express) (rev 01)
03:00.0 Ethernet controller: Atheros Communications Inc. L2 Fast Ethernet (rev a0)
AtherosのAR242x/AR542xというカードらしいのだが、
  • デフォルトで入っているath5kでは動かない
  • yumでインストールするmadwifiでは動かない
ということのようである。CentOS HowToのThe Atheros AR5007EG wireless cardあたりを参考に、いろいろやって動かした。

  1. 必要なものが入ってなかったら入れる。
  2. # yum install gcc gcc-c++ make kernel-devel \
    wget wpa_supplicant wireless-tools pciutils
    gcc gcc-c++ make kernel-devel は必須。wpa_supplicantは、無線を暗号化するなら必要。wget wireless-tools pciutilsはお好みで。

  3. madwifiのスナップショットをダウンロードしてコンパイルし、ドライバを入れる
  4. # cd /tmp
    # wget http://snapshots.madwifi-project.org/madwifi-hal-0.10.5.6/madwifi-hal-0.10.5.6-r4103-20100110.tar.gz
    # tar xvfz madwifi-hal-0.10.5.6-r4103-20100110.tar.gz
    # cd madwifi-hal-0.10.5.6-r4103-20100110
    # make
    # make install
    madwifiのsnapshotはいくつか種類があるが、r4126-20100324では動かなかったように思う。が未確認である。

  5. 標準のドライバを殺し、madwifiのドライバを読むようにする
  6. blacklistにathを入れるのと、ath_pciを読むようにするのの2つ。
    # vi /etc/modprobe.d/blacklist.conf
    (最終行に追加)
    blacklist ath5k
    blacklist ath

    # vi /etc/modprobe.d/ath.conf
    (ファイル名は何でも良さそうだが、新規ファイル作成。既存のどこかのファイルに追加してもいいだろう)
    alias netdev-ath0 ath_pci

  7. WPAを使うなら設定する
  8. これは普通にやればOK。
    # cd /etc/wpa_supplicant
    # wpa_passphrase *SSID* *PASSPHRASE* > hogehoge.conf
    # mv wpa_supplicant.conf wpa_supplicant.conf.org
    # cat wpa_supplicant.conf.org hogehoge.conf > wpa_supplicant.conf

    # vi /etc/sysconfig/wpa_supplicant

    INTERFACES="-iwlan0" とする
    DRIVERS="-Dwext" とする


  9. 無線LANを起動する
  10. # modprobe -r ath5k
    # modprobe ath_pci
    するなり、面倒ならリブートするなり。すると、インターフェースとして、wifi0 と wlan0 が見えるはずである。このうち、使うのはwlan0の方である。必要なら/etc/sysconfig/network-script/ifcfg-wlan0を適当に設定してやって、wpa_supplicantを起こし、ifupで起動。
    # ifconfig -a
    eth0 Link encap:Ethernet HWaddr **:**:**:**:**:**
    (略)
    lo Link encap:Local Loopback
    (略)

    wifi0 Link encap:UNSPEC HWaddr **-**-**-**-**-**-**-5E-00-00-00-00-00-00-00-00
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    (略)

    wlan0 Link encap:Ethernet HWaddr **:**:**:**:**:**
    BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    (略)

    # service wpa_supplicant start
    # /sbin/ifup wlan0
    # iwconfig wlan0
    wlan0 IEEE 802.11g ESSID:"*********" Nickname:""
    Mode:Managed Frequency:2.412 GHz Access Point: 1C:**:**:**:**:C2
    Bit Rate:48 Mb/s Tx-Power:17 dBm Sensitivity=1/1
    Retry:off RTS thr:off Fragment thr:off
    Encryption key:****-****-****-****-****-****-****-**** Security mode:restricted
    Power Management:off
    Link Quality=65/70 Signal level=-31 dBm Noise level=-96 dBm
    Rx invalid nwid:17180 Rx invalid crypt:0 Rx invalid frag:0
    Tx excessive retries:0 Invalid misc:0 Missed beacon:0

    こんな感じである。

HowToのドキュメントとの大きな違いは、modprobeのaliasが netdev-ath0 である点と、インターフェースの名前がath0でなくwlan0になる、というところかな。
posted by usoinfo at 17:23 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする

2013年08月09日

phpDocumenter2 を使う

PHPのソースコードからドキュメントを生成したい。Javaにはjavadocがあるように、PHPにもそのようなものがある。というわけで、PHPのドキュメンテーションツール、phpDocumentor version2( http://phpdoc.org/ )を使用する。
まず、PHPでXSLが有効になっていないと使用できない。phpコマンドで調べる。
% php -r "phpinfo();" | grep XSL
XSL => enabled
EXSLT => enabled
enabledになっていない時は、libxsltをインストールして、--with-xsl を付けてPHPをビルドし直すなどする。CentOSなら、libxsltはyumでインストールできる。

phpDocumenterはpearからインストールする。また、実行にgraphvizが必要なので、これもインストール。
# pear channel-discover pear.phpdoc.org
# pear install phpdoc/phpDocumentor
# yum install graphviz
インストールできたら、コマンドを叩くだけ。
% phpdoc -d src -t docs \
--extensions php,phps --encoding EUC-JP \
--ignore-symlinks --title "MyPHPAPIDocument"
--template zend
-d にソースファイルのあるディレクトリ、-t にドキュメントを生成するディレクトリを指定。--extensions は、解析するソースファイルの拡張子を設定し、ソースがUTF-8以外の文字コードで書かれていれば --encoding を指定。テンプレートの種類を変えたければ --template で指定。
生成ができれば、出力されたディレクトリのindex.htmlをブラウザで開けばOK。Javadoc風のコメントからドキュメントが生成されているはずだ。
タグ:PHP phpdoc
posted by usoinfo at 09:56 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年08月01日

MySQL スレーブが Errno 1872 で停止した時の対処

MySQLのスレーブが走っているマシンを再起動したら、スレーブがエラーを吐いて止まってしまった。
Last_Errno は 1872。
ドキュメントによれば、

(http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html)
Error: 1872 SQLSTATE: HY000 (ER_SLAVE_RLI_INIT_REPOSITORY)
Message: Slave failed to initialize relay log info structure from the repository
ER_SLAVE_RLI_INIT_REPOSITORY was introduced in 5.6.12.

とのこと。
何らかの理由で、リレーログが読めなくなってしまったか何か?

この時は、MySQLは上がっていて、スレーブのステータスもとれるので、SHOW SLAVE STATUSで最後の状態を調べる。
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: ***.***.***.***
Master_User: ********
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
:(略)
Last_Errno: 1872
Last_Error: Slave failed to initialize relay log info structure from the repository
Skip_Counter: 0
Exec_Master_Log_Pos: 4840135
:(略)
1 row in set (0.00 sec)
で、Master_Log_FileExec_Master_Log_Posを見る。ここまでマスターのバイナリログの実行が終わっているので、一旦スレーブをリセットして、ここから再開させる。

RESET SLAVE;

CHANGE MASTER TO
MASTER_HOST='***.***.***.***',
MASTER_USER='********',
MASTER_PASSWORD='********',
MASTER_LOG_FILE='mysql-bin.000009', // Master_Log_Fileのファイル名をセット
MASTER_LOG_POS=4840135; // Exec_Master_Log_Posの値をセット

START SLAVE;
これで、スレーブが再開するか確認。
今回はこれで動き出したようだ。ふう。
タグ:MySQL
posted by usoinfo at 07:19 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年07月23日

CentOS6にmuninをインストール。ついでにApacheとMySQLも監視。

dump-munin-20130723.png
この画像の例のように、muninでサーバーを軽く監視しておきたいので、インストールしようと思う。

1. muninはepelからインストールするので、入れてなければ EPELを設定。
http://mirrors.fedoraproject.org/publiclist/EPEL/
ここから適当なミラーを選ぶと良いが、どこかのミラーから epel-release-6-8.noarch.rpm を入れる。
% su
# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
...
# vi /etc/yum.repos.d/epel.repo
...
enabled=0 (デフォルトではepelを見に行かないようにしておく。この辺はお好みで。)
...

2. 次に、muninとmuninに必要なものをインストール。
# yum install --enablerepo=epel munin munin-node
...(いろいろたくさんパッケージが入る)
# service munin-node start (とりあえず起動)

3.Webからmuninを見えるように設定。
設定を直接httpd.confかVirtualHostの中に書いても良いし、conf/extra/munin.conf などに分けてincludeしてもいい。インストールしたmuninでは、/var/www/html/munin にファイルが生成されるので、Aliasを切る。必要なら認証もかける。
Alias /munin /var/www/html/munin
<Directory "/var/www/html/munin">
AuthUserFile ***passwdfile_path***
AuthName ByPassword
AuthType Basic
Require valid-user
</Directory>
こんな感じ。
/var/log/munin 以下にmuninのログがあって、munin-update.log あたりを覗くと、ちゃんと動いているかどうか分かる。5分に1回走るので、15分くらいしたら、http://****/munin にアクセスすると、グラフが見える。はずだ。

4.ついでに、Apacheも監視してみる。
まず、もし plugins にシンボリックリンクが張ってなかったら、こんな感じで張る。
ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume
次に、muninがApacheからserver-statusを取れるように、Apacheを設定。httpd.confにでも、こんな感じの設定を追加。
# vi httpd.conf
...
LoadModule status_module modules/mod_status.so (もしコメントアウトされていれば有効化)
...
<Location /server-status>
AddDefaultCharset EUC-JP
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>

ExtendedStatus On
Apacheを再起動したら、コマンドラインで動作をテストしてみる。
# munin-run apache_accesses
accesses80.value 0
value が U になっている時は、うまくserver-statusが取れてないと思われるので、'curl http://127.0.0.1/server-status' などと手動で実行してみて、apacheの設定が正しいか確認しよう。値が取れていれば、munin-node を再起動して、しばらくするとmuninのグラフに見えるはず。

5.さらに、MySQLも監視してみる。
もし入ってなければ perl-DBD-MySQL をインストール。
# yum install perl-DBD-MySQL

そして、plugins の下にシンボリックリンクを張る。必要なものだけ張ればいいと思うが、ここではとりあえず全部盛りとした。
ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/
ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/
ln -s /usr/share/munin/plugins/mysql_slowqueries /etc/munin/plugins/
ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/
(ここまでの4つと、ここから下は、オプションで必要な設定が異なるらしい)
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_commands
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_bpool
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_io
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_log
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_tnx
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_select_types
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_table_locks
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_connections
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_slow
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_network_traffic
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_qcache
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_qcache_mem
監視されるMySQL側には、muninでアクセスするアカウントを作成(既存のアカウントを使うのであれば不要)。
% mysql -h 127.0.0.1 -u root -p
...
mysql> GRANT ALL PRIVILEGES ON *.* TO 'munin'@'127.0.0.1' IDENTIFIED BY 'mypassword!!' WITH GRANT OPTION;
そして、munin-nodeがmysqlにアクセスできるように /etc/munin/plugin-conf.d/munin-node に設定を追加。
# vi /etc/munin/plugin-conf.d/munin-node
...(以下を追加)
[mysql*]
env.mysqladmin /usr/local/mysql/bin/mysqladmin (mysqladminへのパスを書く)
env.mysqlopts -u munin -pmypassword!! -h 127.0.0.1 --port=3306 (さっき設定したアカウントまたは既存のアカウント)
env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3306
env.mysqluser munin
env.mysqlpassword mypassword!!
上2行は mysql_bytes から mysql_threads まで、下3行は mysql_ のプラグインに必要な設定のようで、両方必要のようだ。

設定したら、munin-run で動作確認。
# munin-run mysql_queries
Warning: Using a password on the command line interface can be insecure.
delete.value 373
insert.value 3025
replace.value 0
select.value 7018
update.value 177
cache_hits.value 0
# munin-run mysql_commands
Com_delete.value 373
Com_insert.value 3025
Com_insert_select.value 0
Com_load.value 0
Com_replace.value 0
Com_replace_select.value 0
Com_select.value 7018
Com_update.value 177
Com_update_multi.value 0
追補
MySQLとmuninのバージョンの組み合わせによっては、/usr/share/munin/plugins/mysql_ 系の各コマンドで、"Unknown section: INDIVIDUAL BUFFER POOL INFO at /etc/munin/plugins/mysql_**** line xxxx." のエラーが出て動作しないことがある。
これは、MySQL の SHOW ENGINE INNODB STATUS に、muninが読解不能のセクションが含まれているのが原因の模様。とりあえずの回避策として、当該のセクションをスキップするように変更。
# /usr/share/munin/plugins/mysql_
(1084行目あたり)
...
'TRANSACTIONS' => \&parse_transactions,
'BACKGROUND THREAD' => \&skip,
'INDIVIDUAL BUFFER POOL INFO' => \&skip,
);
...
これでスキップされるはずだ。

6.仕上げ
設定できたら、munin-node を再起動。ついでに、OSのブート時にmunin-nodeが起動するように設定しておく。
# service munin-node restart
# chkconfig --add munin-node
# chkconfig munin-node on
posted by usoinfo at 10:50 | Comment(1) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年07月10日

Microsoft .NET Framework 1.1 SP1 用セキュリティ更新プログラム (KB2833941) がWindowsUpdateでインストールできない

OSはWindows XP SP3。ランタイムが入っていないのが原因か? 必ずしもどもXPでも起こるわけではないようである。
手動でいく。

まずここ http://www.microsoft.com/ja-jp/download/details.aspx?id=39469 から、Windows XP、Windows Server 2003 (64 ビット)、Windows Vista、および Windows Server 2008 用 Microsoft .NET Framework 1.1 Service Pack 1 セキュリティ更新プログラム (KB2833941) をダウンロード。

実行すると、インストール途中で 'netfx.msiがないので場所を指定して' 的なことを言われる。WindowsUpdateで失敗していたのはこれのせいか。
netfx.msiを入手するため、ここ http://www.microsoft.com/ja-jp/download/details.aspx?id=26 から、Microsoft .NET Framework Version 1.1 再頒布可能パッケージ をダウンロード。
保存したフォルダでコマンドプロンプトを開き、
C:\>dornetfx.exe /C /T:C:\work
などとして、中身を解凍する。
そして、KB2833941 のnetfx.msiの場所に、解凍したフォルダを指定してやる。

これで解決。
posted by usoinfo at 05:37 | Comment(0) | Windows | このブログの読者になる | 更新情報をチェックする

2013年03月02日

Apache2.4系をソースからコンパイルする

aprが別途必要。2.4から分かれたらしい。面倒な…。
CentOS6にはaprが入ってはいるが、1.3.9で、apache2.4は1.4.0以降を要求するので、別に入れてやらねばならない。
PCREも要求されるので入れなければならない。
概ねこんな感じでいける。
wget http://ftp.riken.jp/net/apache//apr/apr-1.4.6.tar.gz
tar xvfz apr-1.4.6.tar.gz
cd apr-1.4.6
./configure
make
make install

wget http://ftp.riken.jp/net/apache//apr/apr-util-1.5.1.tar.gz
tar xvfz apr-util-1.5.1.tar.gz
cd apr-util-1.5.1
./configure --with-apr=/usr/local/apr
make
make install

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.gz
tar xvfz pcre-8.32.tar.gz
cd pcre-8.32
./configure
make
make install

wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//httpd/httpd-2.4.4.tar.gz
tar xvfz httpd-2.4.4.tar.gz
cd httpd-2.4.4
./configure --with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--with-pcre=/usr/local
make
make install
posted by usoinfo at 01:05 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする

2013年03月01日

MySQL5.6.10をソースからコンパイルしたらGooglemockがエラーだと言われた

CentOS6.3の32bit版で遭遇。
$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
(略)
:
-- Performing Test HAVE_PEERCRED - Success
-- Googlemock was not found. gtest-based unit tests will be disabled. You can run cmake . -DENABLE_DOWNLOADS=1 to automatically download and build required components from source.
-- If you are inside a firewall, you may need to use an http proxy: export http_proxy=http://foo.bar.com:80
言われた通り -DENABLE_DOWNLOADS=1 としてダウンロードを試みるも、
$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DENABLE_DOWNLOADS=1
(略)
:
-- ...
-- Successfully downloaded http://googlemock.googlecode.com/files/gmock-1.6.0.zip to /usr/local/mysql/src/mysql-5.6.10/source_downloads
CMake Error: Problem with tar_extract_all(): Invalid argument
CMake Error: Problem extracting tar: /usr/local/mysql/src/mysql-5.6.10/source_downloads/gmock-1.6.0.zip
-- Configuring incomplete, errors occurred!
おいおい…。
これは、手で展開して再度やると通るようだ。ダウンロード自体はできているので、さっきのエラーの所から
$ cd source_downloads/
$ unzip gmock-1.6.0.zip
$ cd ../
$ rm CMakeCache.txt
$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DENABLE_DOWNLOADS=1
(略)
:
-- GMOCK_SOURCE_DIR:/usr/local/mysql/src/mysql-5.6.10/source_downloads/gmock-1.6.0
-- GTEST_LIBRARIES:gmock;gtest
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/mysql/src/mysql-5.6.10
で、makeできる。やれやれである。
posted by usoinfo at 17:17 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする

2013年01月29日

デバイスを引っこ抜いたらWindowsをシャットダウンするアプリ

 また、どこに需要があるのか不明なアプリを作ってしまったが…。デバイス接続状態を検出してWindowsを制御するアプリである。
これ

【そもそもは】
 携帯で再生した音楽を、WindowsPCのBluetoothでA2DPで受けて、スピーカーから再生するようにする(先日のやつを車から出してきて、シームレスに使おうという肚である)。で、使うと、間違いなくWindowsのシャットダウンを忘れて電気を無駄遣いするのが容易に予想される。そこで、Bluetoothのデバイスを監視して特定のペアリングが切れたらシャットダウンを発行するアプリがあればいいんじゃないかろうかと思いつく。で、探してみたけどどうもなさそうなので、じゃあ手っ取り早く作るかと思って、コードを書き始めた。
 だが、Bluetoothは(自作に)よくない。
 Bluetoothのスタックが何種類も(Microsoftのと、東芝のと、WIDCOMMのと、BlueSolielのと。他にもあるのかもしれん)あって、それぞれAPIもSDKも別である。簡単に使えるのはMSの標準で付いてるスタックだが、MSスタックではA2DPが食えない。家のはWIDCOMMスタックを入れてA2DPを動かしたが、当然MSのAPIでは扱えない。いちいちSDKをゲットしてドキュメントを読んで、結局WIDCOMM専用のアプリにしかならないと思うと気力が萎えて、沙汰止みとした。
 
【思い直した】
 単にデバイスがあるかどうかが取りたいだけなのにになんでこんなに困難なんだと思っていたが、後日気がついた。
 Blutoothとかは関係なく、Windowsに接続されているデバイスを直接見れば何とかなるんじゃない?それだとBluetooth以外のデバイスにも対応できるし、その方が汎用じゃない?
 具体的には、SetupDiEnumDeviceInfoしてSetupDiGetDeviceRegistryPropertyして、さっきと今を比べたら、デバイス引っこ抜いたのが分かるんじゃない?

 と、いうわけで、ざくざくとアプリを作ってみた。
 特定のデバイスを引っこ抜いたり、接続したりした時に、それに反応して、シャットダウン/ログオフ/サスペンド/休止状態/パワーオフまたはユーザー定義アプリを実行する。
 定期的にデバイス一覧を取っては比較、デバイスのユニークネスは、SPDRP_CLASSGUIDSPDRP_HARDWAREIDの0番目で見る。従って、着脱時にデバイスマネージャーに出没して、HARDWAREIDがユニークなデバイスなら、使用可能のはずである。例えばUSBメモリースティックとかね。


 携帯をBluetoothをA2DPでペアリングすると、音量とかを操作するヤツがHIDデバイスで出没するので、こいつを捉えて初期の目標を達成した。他にどんな使い道があるのか分からないが、せっかく作ったので公開しておく。

ByDHalt デバイス接続状態を検出してWindowsを制御


 誰かの役に立てば幸い。

posted by usoinfo at 17:28 | Comment(1) | 開発 | このブログの読者になる | 更新情報をチェックする