ページ

ラベル WinMo の投稿を表示しています。 すべての投稿を表示
ラベル WinMo の投稿を表示しています。 すべての投稿を表示

2010-11-19

QRリーダー v1.1

QRリーダーを更新しました。

  •  QRリーダー v1.1
  •  QRリーダー v1.1
    (2010.11.20 16:54 リンク先が間違えていましたので修正しました。@guru084さん ご連絡ありがとうございました)

QRコード作成時に au向けのメールアドレスの指定方法を間違えていた問題を修正しました。(と言いながら au実機ではテストできていないので実は修正できてないかも...)
残念ながら読み取り精度が向上したりはしません(笑

実は少し前に修正していたのですが、アップするのを忘れている間に Marketplace にアップできない問題が発生して中途半端になっていました。さっきカタログに送信したので近いうちに Marketplace にも出てくると思います。

2010-11-16

App Hub でエラー


Windows Phone 7 のアプリが申請できるようになった App Hubですが、逆に 6.5 のアプリの申請ができなくなっているというウワサを聞いて放置していたアプリの更新申請をしてみました(笑

結果、確かに最終の申請を送ろうとしたところでエラーが出ます。


他にも Zune の ID と紐付けるとおかしくなるとか いろいろな落とし穴のある App Hub 、はやく正常化されるといいですね。


2010-10-13

QRリーダー v1.0

QRリーダーを MarketplaceGiraffeに登録しました。
こちらにも CABを置いておきますので お好みの方法でインストールしてください。
(Windows Phone7からは こういう風に自由に配布ができなくなるのですね・・・)


v0.9から以下の内容を変更しています
  • メールアドレスをタップしたときにセキュリティのダイアログが出ていた問題を回避
  • ボタンをタップした時に絵が欠けていた問題を修正
  • QRコード読み込み部分をちょっとだけ調整

Marketplaceや Giraffeではじめてインストールして頂いた方向けに補足(言い訳)しておくと、このプログラムは カメラで撮影したQRコードを オープンソースのバーコードライブラリ ZXingを利用して解析しています。このライブラリはかなり優秀で 普通に画像を読ませるとほぼ間違いなく認識してくれます。

にも関わらず 実際に動かしてみると認識できない事が多いのではないかと思います。
被写体からある程度離してフォーカスを合わせた後、ズームでできるだけ画面中央に大きく写すと認識しやすい気がする(手ぶれは厳禁ですw)のですが かなり利用者の腕に依存するアプリになっちゃってますので、読めたらラッキーくらいでご利用頂ければと思います。


2010-10-06

WebBrowserコントロールのコンテキストメニューを無効化する (修正)

昨日アップした QRリーダー v0.8ですが、WebBrowserコントロールのコンテキストメニューは出なくなったものの URLのタップもできなくなっていました... ダメじゃんorz

という訳で修正版です。

昨日はこんなコード書いていましたが、いろいろ実験していた時の内容でした。
WM_NOTITY止めたら何も反応しなくなります。
protected virtual int WndProc(IntPtr hwnd, uint msg, uint wParam, int lParam)
{
    if (WM_NOTITY == msg ||
        WM_INITMENUPOPUP == msg ||
        WM_ENTERMENULOOP == msg)

    {
        return 0;
    }

    return CallWindowProc(this._oldWndProcPtr, hwnd, msg, wParam, lParam);
}

正しくはこう、 WM_CONTEXTMENUを止めるだけですね。
protected virtual int WndProc(IntPtr hwnd, uint msg, uint wParam, int lParam)
{
    if (WM_CONTEXTMENU == msg)
    {
        return 0;
    }

    return CallWindowProc(this._oldWndProcPtr, hwnd, msg, wParam, lParam);
}
つまらないことでバージョン番号を消費してしまいました。
次で正式版になる気がしないです(笑


2010-10-05

WebBrowserコントロールのコンテキストメニューを無効化する

QRリーダーを使っていただいた方はお気づきだと思いますが、画面下段の結果表示部分はWebBrowerコントロールを使っています。

WebBrowserコントロールなので タップ&ホールドすると コンテキストメニューが表示されてしまうのですが、表示される意味が無いので何とかしたいところです。(”すべてのテキストを選択” と ”ズームレベル” はそこそこ有用かもしれませんが・・・)

ContextMenuプロパティに NULLをセットしてみたりもしたのですが、効果ありませんでした。

リモートスパイで覗いてみると WebBrowserコントロールの下に IExploreというウィンドウがあって更にその下に MSPIE Statusと PIEHTMLというウィンドウがあるみたいです。さすがに複雑な構造になっているんですね。
ちなみにタップ&ホールドした時のメッセージは PIEHTMLが受け取っていました。

対象がわかったのでこのコントロールにメッセージを渡さないようにします。

まずは P/Invokeの準備。
せっかく .NETで作ってるのに結局はこうなるのか と思わないでもないですが...
#region P/Invoke関係
[DllImport("coredll.dll")]
private extern static IntPtr SetWindowLong(IntPtr hwnd, int nIndex, IntPtr dwNewLong);
private const int GWL_WNDPROC = -4;

[DllImport("coredll.dll")]
private extern static int CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hwnd, uint msg, uint wParam, int lParam);
private const uint WM_NOTITY = 0x004E;
private const uint WM_INITMENUPOPUP = 0x0117;
private const uint WM_ENTERMENULOOP = 0x0211;

[DllImport("coredll.dll")]
private extern static IntPtr GetWindow(IntPtr hwnd, uint uCmd);
private const uint GW_HWNDNEXT = 2;
private const uint GW_CHILD = 5;

[DllImport("coredll.dll", EntryPoint = "GetClassNameW", CharSet = CharSet.Unicode)]
public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
private const string PIEHTML = "PIEHTML";
private const int MAX_CLASSNAME = 64;

private delegate int WndProcDelegate(IntPtr hwnd, uint msg, uint wParam, int lParam);

private IntPtr _oldWndProcPtr;
private IntPtr _newWndProcPtr;
private WndProcDelegate _wndProc;
private IntPtr _hWndPIEHTML;
#endregion

次に差し替えるウィンドウプロシージャを準備。
特定のメッセージを無視しているだけです。
protected virtual int WndProc(IntPtr hwnd, uint msg, uint wParam, int lParam)
{
    if (WM_NOTITY == msg ||
        WM_INITMENUPOPUP == msg ||
        WM_ENTERMENULOOP == msg)

    {
        return 0;
    }

    return CallWindowProc(this._oldWndProcPtr, hwnd, msg, wParam, lParam);
}

フォームのコンストラクタで WebBrowser(の孫ウィンドウ)をサブクラス化します。
Windows Mobileには EnumChildWindows()が無いのでちょっと面倒ですね。
ヘッダ眺めてたら普通にありましたw
もう少し楽に書けそうですが、作った後だったのでまぁいいか...。
// P/InvokeでWebブラウザコントロールをサブクラス化
// WebBrowserの下の IExploreの下の MSPIE Statusの次の PIEHTMLが目的
this._hWndPIEHTML = IntPtr.Zero;
IntPtr hWndIExplore = GetWindow(this.webBrowser.Handle, GW_CHILD);
if (IntPtr.Zero != hWndIExplore)
{
    IntPtr hWnd = GetWindow(hWndIExplore, GW_CHILD);
    StringBuilder sbClassName;
    while (IntPtr.Zero != hWnd)
    {
        sbClassName = new StringBuilder(MAX_CLASSNAME);
        GetClassName(hWnd, sbClassName, sbClassName.Capacity);
        if (PIEHTML == sbClassName.ToString())
        {
            this._hWndPIEHTML = hWnd;
            break;
        }
        hWnd = GetWindow(hWnd, GW_HWNDNEXT);
    }
}

if (IntPtr.Zero != this._hWndPIEHTML)
{
    this._wndProc = new WndProcDelegate(WndProc);
    this._newWndProcPtr = Marshal.GetFunctionPointerForDelegate(this._wndProc);
    this._oldWndProcPtr = SetWindowLong(this._hWndPIEHTML, GWL_WNDPROC, this._newWndProcPtr);
}

一応、終了時に後始末をしておきます。
protected override void Dispose(bool disposing)
{
    if (disposing && (components != null))
    {
        if (IntPtr.Zero != this._hWndPIEHTML)
        {
            SetWindowLong(this._hWndPIEHTML, GWL_WNDPROC, this._oldWndProcPtr);
        }
        components.Dispose();
    }
    base.Dispose(disposing);
}
という訳でようやくコンテキストメニューを無効化できました。
他にもアドレス帳の登録で項目を間違えていた部分があったので修正しています。

今回から ひっそりと Giraffe に登録しています。
もう少し完成度が上がったら Marketplaceにも登録したいのですが先は長そうですね。

2010-09-24

QRリーダー v0.7



twitter等でいろいろご指摘頂いて、少し手直ししました。

修正点はこんな感じです。
  • エンコードの判定を誤ってしまう事があったので修正
    (というか 日本語版WinMoでは常に Shift_JISで OK?)
  • 読み取り結果の文字表示を少し大き目に変更
  • 連絡先に誕生日が入力されていたときに月が読めていなかった
  • 作成したQRコードを保存可能にした

他にも怪しいところはあると思いますので、何かあれば教えてください。
 

2010-09-21

QRリーダー v0.6

T-01B用バーコードリーダー(仮称)あらため QRリーダーv0.6をリリースします。

リリースというとカッコいいのですが、実はテストが面倒になってきたので他人任せにしてしまおうなどと邪な事を考えています。何かお気づきの点があればお知らせください。


UIを少し手直ししましたが 機能は以前と同じで、カメラで撮影した QRコードの内容を読みます。

この「カメラで撮影した」というのがミソで、現状 かなり上手に写真を撮らないと認識する事ができません。画面の中央で気持ち大き目に撮影するのがコツですが、あまりズームすると手ぶれで台無しになってしまいます。

かなりユーザーの技術に依存しているような気がしますが、そこは慣れで何とかしてください(笑


また QRリーダーという名前になりましたが、QRコードの他に EAN8(JAN8)、EAN13(JAN13)、CODE39、CODE128を読むこともできます。
ただ、CODE39などはサイズが大きくなりがちなので写真を撮るのが大変かもしれませんね。


その他、QRコードの内容がドコモや au(ソフトバンクも?)の電話帳登録機能形式の場合、そのままアドレス帳に登録することがきでます。

一応、以下の資料を参考にしています。
作ろうiモードコンテンツ:電話帳登録機能
KDDI au バーコード  アドレス帳一括入力機能
逆にアドレス帳の内容で QRコードを作成する事もできます。
ただ、普通の携帯を持っていないので 実は本当に読めるのか試せていません...。是非動作確認をお願いします。

2010-09-11

T-01B用バーコードリーダー修正 (その3)

バーコードリーダー(仮称)で、指定した連絡先の内容を QRコードを表示できるようにしてみました。(その代わり画面が退化してるかもしれません...)

バーコードリーダー v0.5

名前とメールアドレス、携帯電話番号、自宅番号程度は渡せると思いますが、変なところを読んでいたら こっそり教えてください。

だんだんと脱線してきて、既に「リーダー(仮称)」じゃないじゃん...という気もしてきました。そろそろ名前を考えてあげたいところです。







2010-09-04

T-01B用バーコードリーダー修正 (その2)


先日アップしたバーコードリーダーで連絡先に登録できるようにしたつもりだったのですが、手元の名刺1枚でしかテストしていませんでした。

QRのススメというサイトを教えていただいて試したところ、ほとんど認識できてなかったという衝撃の事実(笑)が判明しましたので こっそりと修正しておきます。
コメント頂いた方に感謝です。


そろそろ真面目に画面作らないといけないのですが、個人的には需要が無くなりつつあるので どうしたものかと悩み中です。

2010-08-31

T-01B用バーコードリーダーちょっとだけ修正


先週のバーコードリーダー(仮称)を少し修正しました。
ここに置いておきますので よろしければお試しください。

  • それっぽいアイコン作りました(笑
    (先にコード書け)
  • QRコードを読み込んだ時、内部でグレースケール化してみました
    (もしかして逆効果?)
  • QRコードの内容をアドレス帳に登録します
    (MECARDや MEMORYが埋め込まれていた場合)

アドレス帳の登録に至っては まだ名刺1枚しか試していません、ドコモ形式(MECARD)以外を試した方は結果を教えてください。

2010-08-23

T-01B用バーコードリーダー認識率調整版

昨日のT-01B用バーコードリーダー(仮名)ですが、ちょっと調整したらかなり認識するようになりました。

ここに置いておきますので、よろしければお試しください。
(書き忘れていましたが、実行には .NET Compact Framework 3.5が必要です)

動くようになって 俄然やる気が出てきたのですが、明日から出張で続きを作れないんですよね...ちょっと残念です。

2010-08-22

バーコード読み込みチャレンジ中

T-01Bにはバーコードを読み取るソフトが付いていませんね。

twitterで QuickMarkが使えるよと教えたいただいたのですが、どうも動作が緩慢で実用にはならないのかな...と感じました。

無いなら作れという事で、オープンソースのバーコードライブラリ ZXingを使ってバーコードリーダを作成中です。作成中ですというのは、つまり まだ動いてないという事です(笑

 現状、普通のバーコードはそれなりに読むのですが QRコードでかなり苦戦中です...というか印刷物を読めた試しがありません。

あまりにも悲しいので数少ない成功例のキャプチャをアップさせてください。PCの画面からなら時々読めるような気がします...

たぶん画像にある程度 前処理をしてやらないと認識できないんだと思いますが、そろそろ飽きてきたので 作りかけのものをここに置いておきます。

まだ動かない機能も多いのですが、よろしければ試してみてください。

2010-08-02

T-01B再設定中

T-01B購入後いろいろ設定を試していましたが、どこを変えたのかよくわからなくなってきたのでマスタークリアして環境を再設定しています。
とりあえず最低限(?)のアプリを入れた状態になったのでメモ代わりにアップしてみます。
 
見た目系  
 
標準のNX!UI(spb Mobile Shell 3.5.3相当?)を spb Mobile Shell 3.5.5に入れ替えています。更にMobileSenseで HTC Sense風に変更。
MobileSenseは 3.5.3対応ですが、NX!UIだとうまく動かなかったかもしれません。
 
 
 
スタートメニューは 4列化しています。5列にしている例をよく見かけますが、あまり小さくするとタップしにくいので自分にはこれくらいがちょうどいいです。
 
基本 まぁ、必須ですね。
 
電話ボタンの暴走回避w 電話ボタンの感度がよすぎるので SortIhchKeyで電話ボタンを殺します。
そのままでは標準の KeyInjectとバッティングするので、スタートアップから削除しておきます。
(カメラボタンでスクリーンショットが取れなくなりますが...)
 
以下は 2chで紹介されていた電話をボタン 2回押しに変更しつつカメラボタンも有効にする便利な .iniファイル。そのまま使わせてもらっています。
[Define]
WIN=0x5b
GREEN=0xe3+0x72
HOME=0xed
VOLUP=0x75+0x26
VOLDOWN=0x76+0x26
VOLUPLONG=0x75
VOLDOWNLONG=0xe6
CAM=0xe9
CAMLONG=0xeb
POW=0x85
OK=0x5c+0x75
MOJI=0x2a
LEFTCLK=0x70
RIGHTCLK=0x71

[電話無効]
code=GREEN
with=
scan=
mode=short
direction=both
activeKind=none
activeName=

[電話]
code=GREEN
with=
scan=
mode=doubleShort
direction=both
activeKind=none
activeName=
exec=cprog.exe
 
個人的必須
  • Offisnail Date+ (Marketplaceからダウンロード)
  • Azurea (Marketplaceからダウンロード)
  • PocketPutty
  • TRE
  • Task Manager
 
その他
  • Opera Mobile
  • 2++
  • CorePlayer
  • Google Maps
  • Disengage
  • Office Mobile 2010 (Marketplaceからダウンロード)
  • jot (Marketplaceからダウンロード)
  • MangaMeeyaCE (ダウンロード元不明)
  • Remote Desktop Mobile (MS_RDP_v6.5.cab)
  • インターネット共有 (ICSInstall.CAB)
  • iHighway Viewer (Marketplaceからよろしくお願いしますw)
 
とりあえずはこんなところでしょうか。
このエントリ アップしたら細かい設定していきます。
 

2010-07-28

Marketplaceへの道 最終

昨日 アカウントがアクティブになってすぐにアプリを登録していたのですが、つい先ほどステータスが更新されたというメールが届きました。
登録から承認までわずか 1日、かなり迅速ですね。
 
 
さっそくカタログに送信して、Marketplaceに挑戦してみよう プロジェクトひとまず終了。 また何か登録できるように頑張らないと...。
 
ただ、フリーで登録できるアプリの数が限られているので つまらないものは登録できないですね。
次からはじっくりと進めます。
 

2010-07-27

Marketplaceへの道 その5

同じネタで引っ張りすぎているので ちゃっちゃと Marketplaceにアカウント登録していきます。
 
といってもアカウント登録の方法は Windows Phone 開発者事務局のページで詳しく紹介されていますね。
 
ただ、7月現在で上記のページとは少しだけ変わっていました。 まず 個人情報の入力について、個人名とは別に発行者名と発行者名(英語表記)が設けられています。
初期の頃 個人名で登録したら発行者欄に実名がそのまま表示されるという話がありましたが その対応なのでしょうね。
 
 
もっとも自分の場合は常に実名なのでそのまま登録しましたが...
 
登録後、ジオトラストからのメールはすぐ届きましたが 何故かアドレス確認のメールが来なかったのでダッシュボードから確認の再送信をしました。
 
 
そしてこの翌日、本人確認の書類(PDF)が届きました。
上欄にジオトラストからの先のメールを受信した日付と件名に入っていたオーダー番号、下欄に名前と免許証番号・有効期限等を記入して自筆で署名したものに免許証を張り付けたものをスキャンしてメールに添付して送り返しました。
 
 
ちなみに受信したメール・書類はすべて英語でしたが、英文メールなど書く機会もない自分は多少不安でしたが完全日本語で返信しました。
 
それでも 2日後にちゃんとジオトラストの担当者さんから最終確認の連絡が入りました。 最終確認は電話で行われるようですので、登録時の電話番号は携帯にしておくのがいいと思います。
 
ちなみに、その時に聞いた話では返信するメールはオーダー番号さえ書かれていればちゃんと日本語の読めるスタッフのところにまわる仕組みになっているそうです。
 
最終確認後「2~3日でマイクロソフトからメールが届くと思います」との事でしたが、実際には 2時間もしない間にメールが届いて Marketplaceのアカウントがアクティブになりました。
 
いよいよ後はアプリを申請するだけですね。
 

2010-07-24

Marketplaceへの道 その4(ちょっと番外編)

今回は AppVerifierの話。
ちょっと番外編というタイトル通り、内容はありません。
 
Windows® Marketplace for Mobile アプリケーション申請の必要条件の「3. 効率的なメモリ管理」というセクションには次のように書かれています。  
3.1. アプリケーション検証ツールのテスト
 
Hopper のテスト中または他のテスト ケースの最中に、潜在的なメモリ問題を示すアプリケーションのサブセットのみ、Microsoft アプリケーション検証ツール (AppVerifier) でのテストを実行する必要があります。アプリケーションは AppVerifier テストの実行中に、プライマリおよびセカンダリ機能をすべて実行できる必要があります。ヒープの破損、およびクリティカル セクションの使用などの無効なロックの使用状況を検出するように、AppVerifier を設定してください
 
要は AppVerifierでメモリリーク等が無いかチェックしろという事ですね。
 
AppVerifierはここから落とせます。
あと、Windows CE 5.0 CETKと場合によっては.NET Framework Version 1.1が必要になります。
 
Windows 7に Windows CE 5.0 CETKをインストールしようとすると不吉なメッセージが表示されますが、とりあえず実行しても大丈夫でした。
 
 
それぞれをインストールした後で AppVerifierのインストールフォルダの ARMV4Iフォルダ(C:\Program Files\Application Verifier for Mobile 5.0\ARMV4I)を CETKのインストールフォルダ(C:\Program Files\Windows CE Platform Builder\5.00\CEPB\wcetk\DDTK)にコピーします。
これを忘れると「Unable to enable shim engine on device」という意味不明なメッセージが出て AppVerifierがハングアップしてしまうようです。
 
また、テスト対象のエミュレータは事前に起動して PCとパートナーシップを作成しておきます。
 
この状態で Windows CE 5.0 Test Kitを管理者権限で起動し、[Connection]-[Start client...]を選んで [Use Windows Sockets for the client/server communication]のチェックを外し [Setting]ボタンをクリックします。
 
 
[Default Device]のプロパティを開き、[Transport]、[Startup Server]を ActiveSyncに変更します。
 
 
戻った画面で [Connect]をクリックして 先ほどの [Default Device]を選択するとエミュレータに接続する事ができます。
 
 
表示されているデバイスを右クリックして [Tools]-[Application Verifier]で ようやくAppVerifierが起動します。
 
 
[Connect...]をクリックして Device Connectionのウィンドウを開き、更にその中の[Connect...]をクリックします。
 
 
しばらくして接続が完了した後、[Add...]ボタンをクリックしてテストしたいアプリを選択します。
 
 
ところが、今回のアプリをテストしようとしたところ「Unable to create process 'ihighwayviewer.exe':Error 2」というメッセージが表示されてテストを行うことができませんでした。
 
 
ここまで来て、資料の続きを読むと次のように書かれています。
次に、アプリケーション検証ツールのテストで、必要条件の適用を除外される項目を示します。
・マネージ コード アプリケーション。たとえば、.NET または .NET Compact Framework で記述されたアプリケーション。
 
さんざん引っ張りましたが、今回は .NETで作ったアプリには AppVerifierは不要...という話でしたorz
 
ネイティブのアプリ作ったときに あらためて試してみたいと思います。
 

2010-07-21

Marketplaceへの道 その3

前回までバカみたいに原文を読もうとしていた「Windows Phone 6.5 Application Certification Requirement」ですが、普通に日本語版がある事を教えていただきました。
 
普通に..というか、トップページから「Register for the Marketplace 」をクリックして「WINDOWS® MARKETPLACE への登録」というページに進んで「プログラムに関する規約」をクリックすると出てきました。
 
 
アカウントの登録を後回しにしてたのが敗因でしょうか...
でも分かりにくすぎませんか、これ?  
 
気を取り直して、必要条件の中の 1.17. Hopper テストを行ってみます。
1.17. Hopper テスト
 
アプリケーションは、予期しない動作、ハング、またはクラッシュを発生させずに、2 時間に及ぶ Microsoft の Hopper テストを完了する必要があります。
Windows Mobile 6.5 に対応した新しいバージョンの Hopper があります。このバージョンは、Windows Mobile 6.0 および 6.1 でも動作します。必要な Hopper のバージョンは 2.0.24.4074 以降です。
Windows Mobile 6.0、6.1、および 6.5 用の AppVerifier は、こちらで入手できます。
また、フォーカス アプリケーションをカスタマイズして、Hopper を実行する前にデバイスに展開しておく必要があ ります。これにより、Hopper のメイン フォーカスをターゲット アプリケーション上に移動できます。フォーカス アプ リケーションの作成方法の詳細については、こちらを参照してください。
「Windows Mobile 6.0、6.1、および 6.5 用の AppVerifier」とありますが、ダウンロードするのは Hopperです。 あと 日本語版 PDF、「こちら」と書いておきながらリンク押せないような気がするんですが...?
 
ともあれ、 Hopperをダウンロード、インストールし、インストールフォルダの Professionalフォルダの中身ををエミュレータの適当な場所(\Hopper等)にコピーしてやります。
 
 
続いて、同じくインストールフォルダ内にある FocusAppフォルダを 適当な場所にコピーして Visual Studioで開きます。(2008だとプロジェクトの変換が必要でした)
FocusApp.cppの g_pszAppNameを今からテストしたいアプリのパスに書きかえてビルド、配置を行います。
 
// Adjust the following to suit your needs
#define SLEEP_TIMEOUT TEN_SECONDS
//TCHAR *g_pszAppName = TEXT("\\windows\\wmPlayer.exe");
TCHAR *g_pszAppName = TEXT("\\Program Files\\iHighwayViewer\\iHighwayViewer.exe");


 
FocusAppを実行すると SLEEP_TIMEOUTで指定した時間(初期値は 10秒)ごとにテスト対象のアプリが起動されます(既に起動していた場合はアプリが前面に表示されます)。
続けて Hopperを起動する事で、Hopperが前面のアプリに対してランダムな入力を続けるようになります。
 
この状態で 2時間耐えろという事らしいのですが、見ているとテスト対象のアプリが裏にまわった状態でも容赦なくキー入力を続けるので連絡先が登録されたり、意味不明のSMSを打とうとしたりする事が頻繁にありました。 SLEEP_TIMEOUTの時間はもう少し短めでもいいのかもしれません。
 
少なくとも実機では絶対に動かしたくないテストですよね。
 

2010-07-20

Marketplaceへの道 その2

さて、アプリを Marketplaceに登録するには、当然 認定を受ける必要があります。
 
認定の基準はWindows Phone デベロッパーホームWindows Phone 6.5 Application Certification Requirementsに書かれています。
ちなみに英語です。どこかに日本語版が無いのかと探してみましたが見当たりませんでした。
すぐ上の「アプリケーション ポリシー ガイドライン」や「コンテンツ ポリシー ガイドライン」はタイトルだけとは言え日本語化されているというのに見事に放置されています

(2010.07.21追記)
日本語訳があることを教えていただきました。
MARKETPLACE への登録のページの「プログラムに関する規約」の部分にあります。
 
何故トップページに置いてくれないんでしょう...
 
 
文句を言っても始まらないので、とりあえず適当に中身を見ていきます。
まずは 1.Reliability(信頼性)の項目から、
 
1.1. Installation Packages The _SETUP.XML file must be included in the CAB file. Visual Studio and CabWiz generate the _SETUP.XML inside the *.CAB file. Submitting a _SETUP.XML separate from the CAB file is not necessary.
.CABファイルには _SETUP.XMLを入れろと。
 
Visual Studioのスマートデバイス.CABプロジェクトで作った .CABファイルには入っていたので大丈夫っぽいですね。
 
1.2. Installation Warning Messages The application's installation process must not display any warning messages that suggest the application was designed for an earlier version of the operating system.
インストール中に OSのバージョンチェック等でメッセージを表示するなという事でしょうか?
 
何もしてないからたぶん大丈夫です。
 
1.3. Shortcuts on Start Menu or Start Screen The application must be available from the Start Screen. Soft Input Panels (SIP) and Input Method Editors (IME) are exempt from this requirement.
SIP、IME以外はスタート画面にショートカットを置かなければならないらしい。
 
これもスマートデバイス.CABプロジェクトでプログラムフォルダにショートカットを置くだけですね。
 
1.4. Store Files Only in Specified Directories The application's installer should only place shared files and DLLs in the Windows folder on the device. Shared files are files that may be used by other applications. All other files should be stored in the application's own directory.
他のアプリから使用する共有ファイル、DLLは Windowsフォルダへ、それ以外はアプリのインストールフォルダに格納しろと。
 
今回 1つだけ DLLが付いてくるけど、インストールフォルダに格納するので大丈夫です。
 
1.5. Preserve In-ROM Files The application's installer must not replace or modify any of the Windows Mobile operating system files that are present in-ROM. For this reason, the application's installer must not change files in the Windows folder of the device, unless the files being changed are created by the same developer or ISV.
システムファイルを置き換えるな。自分で作ったもの以外 Windowsフォルダのファイルを変更してはダメ。
 
してません。
 
1.6. Application Name Length The application name in the _SETUP.XML file must be less than 70 characters and must include the company name followed by the application identifier. For example: ‘Microsoft Solitaire 1.0’.
アプリケーション名は企業名を入れて 70文字以下。
 
今回のアプリ名は「tauchi.net iHighway Viewer」、大丈夫です。
 
1.7. Install and Uninstall Correctly The installation and uninstallation processes must not crash, lock, or otherwise disable any of the functionality of the Windows Mobile device. The installation log file, created on the device at \Application Data\volatile\setup.log, must report zero errors. The application should successfully uninstall without error notifications.
インストール、アンインストールが正しく行える事。
 
普通に.CABファイル作れば大丈夫なはずよね。
 
1.8. Clean-Up Data The uninstall process must remove any files placed on the Windows Mobile device during the installation process, or created during the first run of the application. The following are exempt from this requirement: ・User data associated with the application ・Files shared by other applications created by the same software publisher ・Files required by the Windows Mobile operating system ・The application’s folder structure
アンインストール時にファイルをクリーンアップする事
但し、以下を除く
・ユーザデータ
・同じ提供元が作成した他のアプリにより共有されるファイル
・Windows Mobileが必要とするファイル
・アプリケーションのフォルダ
 
レジストリに保存したユーザ設定なんかはどうなるんでしょうね?
とりあえず .CABプロジェクトにレジストリを含めて、アンインストール時に削除されるようにしてみました。
 
 
1.9. Installation in RAM The application’s installer must not place files in the Random Access Memory (RAM) file system
RAMファイルにインストールしてはいけないそうです。
よくわからないので無視します
 
1.10. Home Screen Files
Standardだけなので割愛
 
1.11. GAPI on Windows Mobile 6.5 Windows Mobile 6.5 Only Developers writing graphics applications must not use GAPI, previously referred to as the Game API.
Windows Mobile 6.5では GAPIを使ってはいけないそうです。
 
そもそも、使ったことないのでおk。
 
1.12. GAPI on Windows Mobile 6.0 and 6.1
これも割愛
 
1.13. Multiple Device Support Developers must identify the required device functionality during the Windows Marketplace submission process. Applications must have the ability to run on multiple Windows Mobile device platforms, for example, multiple Standard or multiple Professional devices. Although not recommended, applications can support a limited number of Windows Mobile devices.
複数のデバイスで動作しないといけないそうです。 ここでのデバイスというのは解像度の事を指しているのでしょうね。
でも、推奨しないけど一部のデバイス(解像度?)だけをサポートするアプリも可能なんだとか。
 
1.14. Single Application Instance Only a single instance of a Single Document Interface (SDI) application, or a file-based application, or a control panel applet is allowed to run concurrently. Any application that supports multiple documents opened simultaneously must support that functionality from within the application itself, and not through multiple application instances.
同じアプリは複数起動してはいけない。
 
そういえば .NETで作る時は多重起動のチェックいらないみたいですね。
 
1.15. Recovery from Power Saving Mode The application must be able to recover from the Windows Mobile device being placed in either the Standby (S3) state or the Suspend (S4) state. The application should also properly handle open files that removable storage cards may close or remove.
スタンバイやサスペンドから復帰した時にも正しく動くこと。
リムーバブルストレージが取り外されてもファイルを正しく扱えること(かな? 結構厳しくないですか?)
 
1.16. Windows Mobile Task Manager During application runtime, an application must appear in the Windows Mobile task manager, and remain listed there until the application's shutdown is complete.
アプリが動作している間、タスクマネージャに表示されること。
 
1.17. Hopper Test The application must complete two hours of Microsoft’s Hopper test without exhibiting unpredictable behavior, hanging or crashing.
アプリは Hopper Testに 2時間耐えられないといけない。
 
Hopper Testについてはまたあらためて。
 
1.18. Windows Error Reporting Applications must not disable the Windows Error Reporting (WER) service at any time. The following registry key must be maintained: HKEY_LOCAL_MACHINE\System\ErrorReporting\DumpEnabled = 0x00000001
アプリで エラー報告を無効にしてはいけない。
 
こんなレジストリ知りませんでしたw
 
1.19. Graceful Shutdown Applications must shut down gracefully. This includes situations when the Shell shuts down the application without the user performing any explicit action. The application must shut down within three seconds of application shutdown command initiation from Task Manager.
アプリは素直に(?)終了すること。
 
タスクマネージャから殺されたら 3秒以内に終了しろと... 時々そうじゃないアプリありますよね
 
1.20. Wait Cursor Support When the application executes a command that renders the current window, or the system as a whole, unresponsive to user input for more than one second, the application must display a wait indication to the user.
処理中はウェイトカーソルを出すこと。
 
1.21. MFC Applications Applications that use MFC classes must link statically to the MFC runtime. The distribution of dynamically linked MFC DLLs is not allowed.
MFCを使う場合はスタティックリンクすること。
 
今回は .NETなので関係なしです。
 
 
多すぎて途中から適当になってきましたが、概ね大丈夫...なんでしょうか?
他の項目も順次チェックしていきたいと思います。
 
あと、かなり適当に読んでるので Marketplaceに出す場合は必ず原文をチェックしてくださいね。
 

2010-07-19

Marketplaceへの道 その1

最近新しいデバイスは買うものの ただのユーザとしてしか使ってなかったので、今回 T-01Bを買う自分への言い訳として新しいデバイスで Marketplaceに挑戦してみるという目標を掲げてみました。
(Marketplaceに挑戦するのにデバイスの新旧は関係ないですが...)
 
という訳で、こんなの作ってます。
ハイウェイ交通情報のページから交通状況を取得して表示するだけのアプリですが、これからの帰省シーズンにはそこそこ有用なのではないでしょうか?
 
 
今後 WP7になると .NETになっちゃうという事で、今回初めて .NET CF(3.5)を使ってます。
また Gesture APIを使っているのでWM6.5以上専用になってしまいました。
 
こんなアプリでも Marketplaceに登録できるものなのか? しばらく挑戦してみたいと思います。
 

2010-06-18

T-01B購入しました

 
ずいぶんと久しぶりにアップします。
前回がT-01A購入なので、新しい機種買いましたブログになってしまいそうですね...
 
今回 T-01Aから T-01Bに変えたのですが、操作性はかなり向上しています。
6.5.3になってタッチだけ操作できる範囲が増えているという事もありますが、なんと言ってもQWERTYキーが付いていることで細かい操作も文章の入力も困ることはありません。
 
また、本体サイズもほんの少しだけ小さくなっています。
厚さは少し増えていますが、前が薄すぎたのでちょうどいいのではないでしょうか。 本体の剛性も上がっているようでアドエスのようなガタツキもありません(笑
 
但し予想通りいつもの残念仕様も健在で、パケット通信中の無線LAN、Bluetooth、USB接続が使用できません。
 
 
Exchangeサーバや GoogleSyncを使っていると常時パケット接続する訳ですが、その状態だと Bluetoothヘッドセットを使うことはおろか USBでPCと接続する事すらできません。 テザリングを防止したいのはわかりますが、HT-03Aや Xperiaだと何の問題もなく(テザリングすら)できてしまうのでちょっと納得できないところです。
ハードウェア自体はかなりいいできだと思うので、ドコモじゃないと駄目な人以外は来週出る IS02にするのが正解かもしれませんね。
 
とは言え、多少気に入らない点があっても何とかできる余地があるのが Windows Mobile。これからしばらく環境構築を楽しもうと思います。