Win32プログラミングの最近のブログ記事

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

これまで、ほぼすべての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画面を前に右往左往する日々が続いております。

theSpokeユーザにはVS.NET2005Proがタダ

スパムしか届かないrarul@rarul.comのメールアドレスに見慣れぬタイトル文字列があったのでちょっとびっくりした寝起きでした。

メールはMicrosoftからのもので、文面を見るとどうやら、Visual Studio .NET the Spoke Premium Version 2003を持っている人には次期バージョンとなる2005のProfessionalのライセンスがタダでもらえるようになるとのことのようです。

・・・( ゜д゜) ポカーン っと一瞬考え込んでしまいましたが、えっマジ?何その太っ腹っぷり。スラドの「VS 2005 Expressがタダで配布」ネタを読んで「BorlandのPersonal版対抗策かなぁ」とか思ってたんですが、theSpokeのユーザにはProをタダ配布ですか、そうですか。

MSの利益率の実情ってどんなもんなんだろ、とか思わされた寝起きでした。[ASCII] マイクロソフト、アカデミック向け戦略に関する記者説明会を開催――産学連携をさらに強化、学生を対象にVisual Studio最新版を低価格で提供もによると4800円でAcademic Editionも出るらしいですが、こっちはStandard相当ということのようで、theSpoke(2003)を買ってProをタダでもらった方が良さそうですね。

Google Maps APIがらみのメモ

Google Maps APIにて、InfoWindowが開いた状態でてきとーなところをクリックした場合、
・click
・infowindowclose
の順でイベントが起こる。まぁ当たり前といっちゃ当たり前なんだけど、深みにはまってしまった。ここで、clickイベント発生時に別のInfoWindowを開くようプログラムした場合、
・click
・infowindowclose
・infowindowopen
の順でイベントが発生する。これも考えちゃ当たり前なんだろうけど。30分くらいはまりました。

Ajaxを使う時、XmlHttpRequest.responseXML.documentElementを参照したときにIEにて、
「documentElementはnullまたはオブジェクトではありません」
のエラーが出る場合がある。しかもXmlHttpRequest.responseTextあたりは問題なく参照できる。そんな場合、XmlHttpRequest.openするときに与えた引数のURIで、サーバからの返事で、Content-type:でapplication/xmlもしくはtext/xmlを返していないのが原因でしょう。1時間くらいもろはまりました・・・

PHPでXMLを使う場合(php-domxml)、domxml_open_memを呼ぶと
PHP Warning: domxml_open_mem(): input conversion failed due to input error
などのWarningが出る。これはどうやら文字コードに起因する模様。
<?xml version="1.0" encoding="UTF-8" ?>
といった文字コードの宣言と実際に入力された文字コードとをちゃんと確認しましょう。結構はまったけど、原因はこの次に書くやつが根本だった。

たとえEUC-JPなHTMLのページからJavaScriptでXMLHttpRequestを使う場合でも、明示的に指定しない限りPOSTされたデータはUTF-8で送られることになる。しかも、POSTなのでデータはいわゆるURLエンコードされた状態で送られる(ココに一番はまった)。参考(http://www.hawk.34sp.com/stdpls/xml/xmlhttprequest.html)ページを読む限り、明示的に指定しても怪しいのかな?上のやつと併せて、実質2時間くらいはまった。てか、あまりに深みにはまったのでふて寝したら1日が終わった。

apt-getでphp-domxmlを入れたとき、コマンドラインからはちゃんと動作するのに、Webからアクセスするときにphp-domxml関連のクラス・関数が動かなかった。Apacheはphpをmodとして動かしているので、新しくPHPのライブラリを入れたらApacheも再起動しないといけないです。5分くらいはまりました。

Win32+ActivePerl+MySQL

Windows上から別マシンで動いているMySQLにアクセスする場合、ActivePerlではDBI/DBD-mysqlモジュールが提供されてる。
ppmで「install DBI, install DBD-mysql」するだけ。
リモートから操作する場合、MySQL上であらかじめ「grant all privileges on *.* to rarul@192.168.1.2 identified by 'passwd' ;」とかしてリモートアクセス用ユーザを追加すること。

Excelとかから使うならMyODBCがいいですな。

LimeChatマクロのDLL拡張

LimeChatというIRCクライアントソフトにはマクロ機能がついているんですが、これ結構高機能でたとえば外部DLLの関数呼び出しなんかが可能です。LimeChat用DLLをVisualC++6.0で製作ページが詳しいです。

んでこれを使って私も小物を作成。どんなものかといいますと、PC向けゲームであるBF1942を動かしているときは「BF中です」といったメッセージ応答するというもの。このゲームはDirectXのフルスクリーンで動作するため、たとえばIRCで呼ばれたとしても反応しづらいんですよね。そこで、BF1942.exeプロセスをチェックするようなDLLを作ったわけです。BF中にIRCで名前呼ばれたらメッセージを返すLimeChat向けボットマクロDLL

まぁDLL呼び出しが可能なので、やりようによってはほぼ無限大の記述ができるわけです。こんなのあればいいなという機能を模索しようかと思っとりますです。

WinXP+RegisterHotKey+DirectX+フルスクリーン

WinXP+RegisterHotKey+DirectX+フルスクリーンという組み合わせでは、RegisterHotKeyしたキーでホットキーイベントがやってこないという、仕様なのかバグなのか、はたまた私の環境が悪いだけなのか、よくわからない現象が起こります。

まぁ例の、レスキルしたい人専用ソフト(bfcounter.zip)なんですがね。(詳細はBF1942のページへどうぞ)

っつわけで、キーボードフックで実装したバージョンに変更。フックがDirectXゲーム動作に悪影響するかもしれませんが、まぁ他の手段がないんで仕方ないでしょう。

あとあと、慣れないWin32プログラミングの教師になってくれたにとよんサンクス。

VS.NETが4830円

マイクロソフトがtheSpokeというコミュニティサイトで学生向けにプログラミングの情報提供とVS.NETを4830円で提供するそうです。

これまであったVS.NETのアカデミックパックは3万円ほど、通常版のProfessionalは12万円以上、MSDN AAは学校単位の縛りを受け、MSDN サブスクリプションだと桁違いの金が必要になる、という現状でした。まぁふつうに考えればあれほどのソフトウェアを3万円で購入できるのは非常に安いとなるわけですが、学生にとっては無料のBolandのPersonal版が魅力に感じますし、アカデミック版を学生でない一般の人が買って使っているとかいう現状があったりと、まぁそんな状況でした。

それが、今回は4830円と来てます。しかも税込みです。一太郎のキャンパスキットよりも安いです。しかも、購入すればMSDN AAと違い学校という単位での縛りも受けません。(MSDN AAは教育目的に限定される) さらに、学生時に購入すれば学生やめても使っていいそうです。中には、購入するために通信教育などの学生になるとか(ゴニョゴニョ)

使用するためのラインセンスキーやらは事後登録で入手する必要があるそうですが、まぁここは本当に学生が買って使おうとしているのかをちゃんと調べようという一環なのでしゃーないでしょう。

っつわけで、らるるんは購入しようかと思ってます。VS.NET入ってるんだけど、これMSDN AAだしねぇ。。

このアーカイブについて

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

前のカテゴリはrarul.comサーバです。

次のカテゴリはWindowsです。

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

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.5.0