テラクラウドAPI C#アクセス

テラクラウドAPI
C#ではこんな感じでUserにアクセスできます
ライブラリとしてDynamicJsonを利用しています。
型的に緩い作りになっていますがその分追加変更があっても対応が楽ですね。
APIキーについてはこちら

※TreaCloudになっていたのでこっそり修正

ライブラリ側

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Codeplex.Data;
namespace TeraCloud
{
    public class TeraCloudAPI
    {
        public TeraCloudAPI(string apiKey)
        {
            ApiKey=apiKey;
        }
        public string Version="v2";
        public string url="https://api.teracloud.jp/";
        public string ApiKey="";
        public DynamicJson GetUser(string user,string password)
        {
            StringBuilder sb=new StringBuilder();
            sb.AppendFormat(url+"{0}/api/user/;api_key={1}",
                Version,ApiKey);
            WebRequest req = HttpWebRequest.Create(sb.ToString());
            req.Method = "GET";
            req.Credentials = new NetworkCredential(user, password);
            //受信
            HttpWebResponse res = (HttpWebResponse) req.GetResponse();
            System.IO.Stream st = res.GetResponseStream();
            System.IO.StreamReader sr = new System.IO.StreamReader(st);
            var json=DynamicJson.Parse(sr.ReadToEnd());
            return json;
        }
    }
}

使用する側

            var api = new TeraCloudAPI(APIKEY);
            dynamic user = api.GetUser(USERID, PASSWORD);
            Console.WriteLine(user.user);
            Console.WriteLine(user.introduce_code);
            Console.WriteLine(user.webdav_url);
            Console.WriteLine(user.capacity);

文字のアウトラインで発生するバリ問題

無題
文字のパス情報からアウトラインを描画したときにバリが発生する問題。大きく描画すると問題ないけど小さくなるに従い激しいバリが発生するようになって美しくない
昔これの問題に長い事悩んだのだけどしばらくして偶然解決策がわかって今回以前のGDI+でなく
WPFでも同じように発生して同じ方法で解決できたのでメモ
問題が起こるコード

  var pen=new Pen( Stroke, StrokeThickness );
  drawingContext.DrawGeometry( null, pen, t );

解決策

  var pen=new Pen( Stroke, StrokeThickness );
  pen.LineJoin = PenLineJoin.Round;
  drawingContext.DrawGeometry( null, pen, t );

Windowsタブレット再インストール

パソコンがおかしいので見てほしいと頼まれて
タブレットのマウスとペンが認識しなくてデバイスマネージャー見たらエラーのアイコンが出てるので
ドライバ入れなおすも認識しないので修理だねと説明したら修理に出すのもやってほしいとの事。
パソコンを預かり持ち帰ったあと修理前にはパスワード解除が必要との事で作業しようにも
ログインパスワードがわからず本人にメールアカウントと紐づけられたパスワード聞くのもあれなので初期化してみる事にしてみたがこれがなかなかうまくいかない
・初期の高速起動設定によりでBIOS画面には入れない。
・ログインは当然できない
情報を探しつつ試行錯誤したところ
キーボードを接続して起動画面右下の電源メニューからShiftを押しながら再起動を行えば初期化画面に行くことができることが判明。

初期化する前にまたアカウント情報聞かれたけどスキップできたのでスキップしたらなんか初期化できた・・何だったのか不安。

初期化したらマウスおよびペン動いた・・

WiXでのインストーラー作成

Windowsのインストーラー作成でVisualStudio2013の対応があれなので
Wixを使おうと勉強。
フォルダ階層を持つデータを格納する場合
WixEdit使ってもFeatureとのファイルの関連付けが大変すぎる。
Componentを利用してもフォルダに対して一つのComponentが必要らしくやっぱり大変。
いろいろ試行錯誤した結果データコンテンツとしてファイルが多い場合はデータ用のアーカイブファイル作って初回起動で展開する方法が楽だった。
若干無駄があるけど仕方ない。
初回起動でなくCusomActionなりで対応すればよいのだろうけど
使い方がまだよくわからない。

スクリーンキーボード処理

C#でスクリーンキーボード的な処理を書きたい
http://cs2ch.blog123.fc2.com/blog-entry-85.html
というサイトがあり参考にしたがうまく動かない・・
普通にフォーカスが当たってしまう。
他のサイトもここを参考にして成功してる
http://sturnus.hateblo.jp/entry/2014/05/06/012058
こういうときにソースコードがあれば環境の所為なのかが切り分けできるのだけど・・

マウスでクリックしてもフォーカスが当たらないようにする処理というのも見つけたがそれは正常に動いた
ただ、フォーカスが当たらないがほかのウィンドウのフォーカスは外れるという残念なものだった。

CodeProjectからそれっぽいプロジェクトを見つけて参考にしようと動かしてみたらやっぱり同じように動かない。

結局CreateParamsを捨て後付で無理やり設定することにした。

        private const int GWL_EXSTYLE = -20;
        private const int WS_EX_NOACTIVATE = 0x08000000;
        protected override void OnCreateControl()
        {
            base.OnCreateControl();
            SetWindowLong(this.Handle, GWL_EXSTYLE, GetWindowLong(this.Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
        }

成功!