ラベル

Server (108) work (77) Idea (68) Car (31) PC (29) DAW (28) other (19) MakingWEBsite (18) 趣味 (18) health (13) CentOS (11) drupal (11) (9) android (4) スマホ (4) communication (3) drupal7 (3) hint (3) meno (3) モバイル (3) 歯医者 (3) 第二種電気工事士 (3) 英語 (3) PC Server (2) drupal8 (2) ms access (2) uwp C# (2) めし (2) 整備 (2) 音楽 (2) MIDI (1) diy (1) 会計 (1) 動画再生 (1) 生活 (1) 郵便 (1) 食べ物 (1)

2018年4月3日火曜日

golf git mk4 coolant  ラジエータ液漏れ

クーラント液、ラジエータ液 液漏れ。

最初はサーモスタットハウジング接続部からの液漏れだと思って交換したがなおらず、ウォーターパイプのオーリングを交換したら、とりあえず、今のところ漏れが止まっている。

2018/0430
昨日、Oリングを交換して、今日、クーラント液を継ぎ足した。
約2.7L補充した。クーラント液:水 = 1:1。   172772km時。
(後述:後に0.3L程付け足した。サーモスタットの所から水を抜くと、いつも3Lの補充になる。)
2018/04/28
今日、ウォーターパイプのネジをゆるめた。
2か所。ネジの種類が違う。一つは10mmの六角ボルト(運転席から見てエンジンブロック前面の左側)。もう一つは8mmヘックスボルト(運転席から見てエンジンブロック左側面の手前側)。
関連している部品以外はエンジンプラスチックスのカバー以外はどこも外さずに2つのボルトを緩められたけど、ヘックスボルトは目視できないから手探りで緩めた。
2018/04/24
その後(サーモスタットハウジング交換後)、大阪一回、東京一回の遠乗りをした。その時は大丈夫だったのだけど、一昨日あたりから又水漏れが始まった。どうもエンジンが熱い時の圧力がかかっている時は漏れない。少し暖めた後に放っておくと大量に漏れ出すみたいだ。
どういうことだ?
先日のサーモスタットハウジングの取り付けが悪かったのか?
よく見てみるとサーモスタットハウジングからでななくて、サーモスタットの根元からエンジンブロックに沿って引いてある鉄のパイプのつなぎ目から漏れている。(と思う。)
部品番号は
06A121065AK ウォーターパイプ
(VWディーラーで部品を注文すると40000円位。
VWのパーツ屋さんで純正を買うと16000円位)
でも、たぶんこれ自体は鉄パイプだから、ゆがむとかひびが入るとかの可能性は低いと思う。たぶん根元についているオーリングがダメになっただけだと思う。
(Oリング注文時にディーラーの整備士の方が、このパイプがやせてしまうことがある。そうするとOリング交換だけではだめ。と言っていた。)
N90365302 O-ring
N-903-653-02-INT
(後述:ディーラーで頼んで380円)
Heater Pipe Seal VW Audi Parts 20x3mm, N90365302 (Corteco OEM)
BMWなどでも同じオーリングを使っていて
Mfg Part #
11531435808
11-53-1-435-808
だそうだ。
内径20mm(もしかすると外径が20mm) リングの幅が3mmで耐熱耐水ならどれでもいいのだろうけど、日本で探したらこの規格のオーリングがない。そんなに高いもんじゃないだろうし、VWディーラーで取り寄せようと思う。

-----------------------------------------------
2018/04/03
水道水400ml補充。20180402

昨日、久しぶりにクーラント液の警告が出た。

見てみると
車の下に液の漏れた跡、薄い水たまりができていた。
どこから漏れたのだかちょっと見ただけではわからない。

エンジンの前側下の方にもクーラント液が溜まっている。
そこからあふれた液が伝って、オイルパンの下に水滴がついている。

ホース類、プラスチックの継ぎ手のパイプなど、漏れそうなところをチェックしたけど、漏れた跡が見つからない。あれだけ漏れているのだから跡があるはずだけど・・・。

ラジエータ下のアンダーカバーの淵の上側をティッシュペーパーでふき取ってみると、少しだけラジエータ液がティッシュに付く。ここに少しだけついているってどういうこと?
ラジエータから漏れているのか?それがエンジンの方にも飛んできているのか?

今日、時間のある時にエンジンを温めて圧力かけて漏れ箇所をチェックしてみようかと思う。
で、チェックしたけど、漏れが止まったのかなぁ?
あれだけ漏れてたのに、回転を上げ気味で走っても漏れていない。
もう少し様子お見てみることにする。

2018/04/06---よく見たらサーモスタットハウジングからの漏れ。みたいだったので交換をしておいた。何かの条件が重なるとドバーッと漏れる。みたいなんだよなぁ。クーラント液は2.8L位交換後につぎ足した。外したのを見てもひびが入っているわけでもなく・・・。
今回サーモスタットは交換しなかったけど、ちょっと錆びてた。もしかして錆びが原因の漏れか?事前にわかっていれば新品に交換したのだけど、とりあえず、できるだけ丁寧にサンドペーパーにオイルをつけて磨いておいた。
クーラント液の管理はちゃんとしているつもりだけど、どうして錆びるんだ?下に書いたように、ワーゲンの純正クーラントは(環境を考慮して)車には良くない仕様なのか?(まぁ、この前から少し安くて手に入りやすいマレーのクーラント液にしたけど。たぶん成分は同じじゃないかと?未確認だけど・・。)
次からはワコーズのにしてみるか?

ワーゲンのクーラント液はあまり(車にとっては)良くないのかもしれないと言っている人がいた。
純正のクーラント液を使っている人からよくラジエータトラブルを聞くような気がするそうだ。
ヨーロッパ車は環境に配慮する度合いが日本よりも高いから、(そういうことで、プラスチックス部品も弱い。自然に帰りやすい物を使っているそうだ。)クーラント液もそうなのかもしれない。防錆効果が低いのかもなぁ。
ワコーズのクーラント液を使っておけば間違いないと言っていた。

2018年3月25日日曜日

C# UWP WEBサイトの操作

メモ 情報収集中

C# UWPでは、WEBの操作に
Windows.Web.Http.HttpClientクラス
を使うのが一番いいみたいだ。
https://docs.microsoft.com/ja-jp/windows/uwp/networking/httpclient

このHttpClientクラスをインスタンス化したものに自分の扱いたいWEBサイトを代入する。

例えば、インスタンス化されたものをhttpClientとすると、
httpClient.GetAsync(new Uri("http://hogehoge.com"))
とか、
string result = await httpClient.GetStringAsync(new Uri("http://hogehoge.com"));使い終わったら
httpclient.Dispose();と、破棄しておく。

メソッドとしては
GetAsync
PostAsync
PutAsync
DeleteAsync
など。
https://docs.microsoft.com/en-us/uwp/api/windows.web.http.httpclient

注意点
Windows.Web.Http.HttpClientの方が、System.Net.Http.HttpClientよりも新しい。
似ているから最初違いが判らなかったのだけど、
MSによると
「System.Net.Http 名前空間と System.Net.Http.Headers 名前空間は、Windows の将来のバージョンでは Windows ストア アプリ用に使用できないことがあります。」
だそうだ。

Windows.Web.Http.HttpRequestMessageクラス-
Windows.Web.Http.HttpClient から送られた HTTP 要求メッセージ
Windows.Web.Http.HttpResponseMessageクラス
データ受け取り時はこれを使うみたいだ。
普通の受け取りと、あとは、
例えば、ログイン後のサイトの情報を受け取るのには、このクラスをインスタン化したものとHttpClientをインスタンス化したものと組み合わせて使うことでそこでログインした状態を保持した情報を受け取ることができている。
-----------------------
ブラウザの起動の仕方は
https://docs.microsoft.com/en-us/uwp/api/windows.system.launcher
http://coelacanth.jp.net/metrostyleapp入門-vol29-アプリからブラウザを起動する/

private async void Button_Click_1(object sender, RoutedEventArgs e)
        {
            var uri = new Uri("http://www.bing.com");

            var success = await Windows.System.Launcher.LaunchUriAsync(uri);

            if (success)
            {
                // 起動に成功した場合の処理。
                // ブラウザは起動するがアプリも裏で動く
            }
            else
            {

            }
        }

------------------------
VBAのようにDOMを使ってC#からIEを制御する方法。がまとめてあるページ。
http://blog.clockahead.com/2015/06/cie.html
の目次
C#でIEを自動制御しよう
(1) はじめに
(2) プロジェクトの設定
(3) IEを起動する
(4) IEで指定したURLを開く
(5) IEを閉じる
(6) ページの読み込み完了まで待機する
(7) フォーム(テキストボックス)に文字を入力する
(8) ボタンをクリックする
(9) LINQでリンクを取得してクリックして開く
(10) セレクトボックス(メニュー)の選択肢を選択する
(11) チェックボックス(ラジオボタン)にチェックを入れる
(12) 画像をクリックする
(13) 表示しているページタイトル&URLを取得する
(14) フレーム分割されたページを操作する


-----------------------
HTML Agility PackはWEBから必要なデータを読み込むのに適している。
が、
webサイトにデータを入力したり、操作するのには向いていないみたいだ。

そういうことをしたいときは
WebRequest request = WebRequest.Create("http://hogehoge.com/");
などと、WebRequestを使えばいいそうなのだが、
UWPでは
https://docs.microsoft.com/ja-jp/dotnet/framework/network-programming/how-to-request-data-using-the-webrequest-class
にある例のように
GetResponse()や、Close();が使えない。

で、
https://stackoverflow.com/questions/38835974/httpwebrequest-in-uwp-c

In UWP, we have two HttpClient APIs, they are System.Net.Http.HttpClient and Windows.Web.Http.HttpClient. You can choose either of them according to your requirement.
と書いてあった。
System.Net.Http.HttpClientはこれから使われないようなので、
今の最新は、Windows.Web.Http.HttpClienthttps://docs.microsoft.com/ja-jp/windows/uwp/networking/httpclient
なのかな?


で、実際に使うとしたら、Windows.Web.Http.HttpClientになるのか?
ここから、MSの例の写し Windows.Web.Http.HttpClient-------
using System;

var uri = new System.Uri("http://www.bing.com");
using (var httpClient = new Windows.Web.Http.HttpClient())
{
    // Always catch network exceptions for async methods
    try
    {
        string result = await httpClient.GetStringAsync(uri);
    }
    catch (Exception ex)
    {
        // Details in ex.Message and ex.HResult.
    }
}
// Having exited the scope of the using statement, httpClient.Dispose() will be called
// automatically, thus freeing up system resources (the underlying socket, and memory
// used for the object).
-------Windows.Web.Http.HttpClientここまで
https://docs.microsoft.com/en-us/uwp/api/Windows.Web.Http.HttpClient



ここからMSの例の写し System.Net.Http.HttpClient---------------------
 static async void Main()
{

    // Create a New HttpClient object.
    HttpClient client = new HttpClient();

    // Call asynchronous network methods in a try/catch block to handle exceptions
    try 
    {
       HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");
       response.EnsureSuccessStatusCode();
       string responseBody = await response.Content.ReadAsStringAsync();
       // Above three lines can be replaced with new helper method below
       // string responseBody = await client.GetStringAsync(uri);

       Console.WriteLine(responseBody);
    }  
    catch(HttpRequestException e)
    {
       Console.WriteLine("\nException Caught!"); 
       Console.WriteLine("Message :{0} ",e.Message);
    }

    // Need to call dispose on the HttpClient object
    // when done using it, so the app doesn't leak resources
    client.Dispose(true);
 }
---------------------System.Net.Http.HttpClientここまで
https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx

2018年3月23日金曜日

DOM XPhthを調べる。

DOM XPhthを調べる。

Chromeを使う方法
調べたい要素を選択して右クリック>検証
デベロッパーツールの中の該当箇所を右クリック。Copy > Copy XPath


これをそのままC# UWP HTML Agility Packで使ったのだけど、htmlから情報を取れなかった。
(HAPExplorerを使えばいいのだろうけど、自分の環境では起動しなかった。)

例えばこの方法で調べて
/html/body/div/table[3]/tbody/tr[3]/td[4]
と表示された。
それをそのままコピーするとエラーが出る。

この場合、/tbody
を取って
/html/body/div/table[3]/tr[3]/td[4]
としたらうまくいった。

2018年3月16日金曜日

SMFファイル MIDI 可変長数値表現

CUBASEからSMFファイルを作って、それを秀丸のバイナリエディタで開いた。
そのバイナリエディタの中身がどうなっているのか調べた。

CUBASEで単純なSMFファイルと作った。
内容は
4分音符
ノートC4(YAMAHAはC3になるのかな?ノートナンバーが60(16進数で3C))
チャンネル0
それをフォーマット1でMIDIファイル(SMF)に出力した。
それを秀丸のバイナリエディタで開いた。

そのSMFファイルの中身の解説メモ。

MIDIファイル(smf)-----ここから

4D,54,68,64,ここからがヘッダーだという意味の記号。ヘッダチャンク。
00,00,00,06,データ長(ここからのこのヘッダチャンクのバイト数が6という意味)
00,01,フォーマット(フォーマット1が複数トラック。フォーマット2が1トラックにすべてを押し込む形式。)
00,02,トラック数
01,E0,時間単位

4D,54,72,6B,ここからがトラックのデータという記号。トラックチャンク。(このトラックは空トラック)
00,00,00,1D,データ長(4 byte)
00,デルタタイム
FF,03,06,74,65,73,74,43,33,シーケンス、トラック名、FF,03,に続く数値は文字の数(この場合は6文字がシーケンス、トラック名に使われているという意味)
00, デルタタイム、データ長が0で次の音を鳴らす。
FF,51,03,07,A1,20,テンポ
00,デルタタイム
FF,58,04,04,02,18,08,拍子
00,デルタタイムFF,2F,00,トラックチャンクの終わり

4D,54,72,6B,ここからがトラックのデータという記号。2つ目のトラック。
00,00,00,1C,データ長(4 byte)
00,デルタタイム
FF,03,0B,48,41,4C,69,6F,6E,20,36,20,30,31,シーケンス、トラック名(0Bつまり11文字)
00, デルタタイム、データ長が0。
90,3C,50,MIDIイベントノートオン(ノートナンバー60、16進数で3C)
83,60, デルタタイム、4分音符分後に次のイベント(可変長)
80,3C,40,MIDIイベントノートオフ
00,デルタタイム
FF,2F,00,トラックチャンクの終わり

----------ここまで


データ長
可変長数値表現
MIDIをバイナリエディタで開いて、デルタタイムを見てみると。
例えば可変長16進数の
8F 00
と書いてあった場合。
これを2進数で表すと
10001111 00000000
と16桁になっている。
可変長数値表現は2進数の桁が必ず8の倍数桁になっていて、8桁毎の一番左の桁は
数値を表すものではなくて、可変長数値の表示範囲を表している。
始まりと途中が1。最後は0。のビットが立つ。つまり、8桁の左端が1で始まって8桁の左端が0で終わる。

実際の16進数の数値を求めるには、各8ビット左端の
10001111 00000000
から上の例で色付きの1と0を取って、それぞれを7ビットにする。
それをドッキングさせて、
0001111 0000000
これをこのまま16進数に戻せばいい(780)。

別の例で、16進数を可変長16進数に変換してみる。
例えば16進数80を可変長16進数に変換してみる。
16進数80は2進数で表すと下の8桁。
10000000
これを7桁毎で区切ると、
1 0000000
これを各8桁の左端に途中1、終わり0、のビットをつけると
10000001 00000000
これは16進数で8100。
よって、16進数80は、可変長16進数で8100になる。





2018年3月15日木曜日

samba

samba3.5以下の場合
セキュリティ上の理由でWindows側のSMB 1.0/CIFSクライアントが無効になっているからそれを有効にしないとつながらない。
3.5以下の状態のまま一時的につなぎたいときにはそれをONにする。
コントロールパネルから「Windows 機能の有効化または無効化」を開く。
SMB1.0/CIFSファイル共通のサポートのすべてのチェックを入れる。

sambaは3.5以下と3.6以上で別物。CentOS6を普通にアップデートしていると3.6にはならない。
現行最新のsambaはバージョン4。


samba3.6を使うときは
[global]
  min protocol = SMB2
  max protocol = SMB2
を追加しないと今のWindowsからはつなげないらしい。

2018年1月13日土曜日

xaml にC#のコードから線を引いたり、円を描いたりする。

C#コード側からXAML側図形の位置や形をコントロールする。

Canvas、Line、EllipseなどをC#コードから定義するときは、
Canvas canvas = new Canvas();
とインスタンス化して使う。

UWPは色の指定方法が変わったそうだ。
WPFの
hoge.Stroke = System.Windows.Media.Brushes.Silver;
として指定する方法から
SolidColorBrush greenBrush = new SolidColorBrush(Colors.Green);
line1.Stroke = greenBrush;
と、インスタンス化してから使うやり方に変わっている。


 //Canvasの中の描写されたものをすべて消す。
canvasName.Children.Clear();

 //次のif文は一つ前に描写されたものが消される。
if (canvasGakufu.Children.Count > 0)
         {
              canvasGakufu.Children.RemoveAt(canvasGakufu.Children.Count - 1);
          }



XAML側
 コード側から名前を指定して何かさせたい場合には、XAML側のGridやCanvasなどのパネルに名前を付ける。

<Page
    x:Class="UWP_動的に線を描く20180113_1958.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UWP_動的に線を描く20180113_1958"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid x:Name="yy" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    </Grid>
</Page>

C#コード側
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Xaml.Shapes;


// 空白ページの項目テンプレートについては、https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x411 を参照してください

namespace UWP_動的に線を描く20180113_1958
{
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

           //線を引くUWPは色を指定するのにSolidColorBrushを使う
            var line1 = new Line();
            SolidColorBrush greenBrush = new SolidColorBrush(Colors.Green);
            line1.Stroke = greenBrush;
            line1.X1 = 302;
            line1.X2 = 302;
            line1.Y1 = 220;
            line1.Y2 = 283;
            line1.StrokeThickness = 3;
            canvasName.Children.Add(line1);  //yyはXAML側のGRIDにつけた名前。
             
            //円を描く
            var ellipse1 = new Ellipse();
            ellipse1.Fill = new SolidColorBrush(Windows.UI.Colors.SteelBlue);
            ellipse1.Width = 200;
            ellipse1.Height = 200;
            canvasName.Children.Add(ellipse1);
        }
    }
}
--------------------------------------------------------------------------------
//円を描く。で位置を指定。と、回転。
var ellipse1 = new Ellipse();
            ellipse1.Fill = new SolidColorBrush(Windows.UI.Colors.Black);
            ellipse1.Width = 10;
            ellipse1.Height = 25;
            RotateTransform rotateTransform45 = new RotateTransform { Angle = 45, CenterX = 0, CenterY = 0 };
            ellipse1.RenderTransform = rotateTransform45;
            Canvas.SetLeft(ellipse1, 300);
            Canvas.SetTop(ellipse1, 278);
         
            canvasName.Children.Add(ellipse1);

-----------------------------------------------------------------------------------
例えば、XAMLコードだけで図形を描く場合は、

<Page
    x:Class="UWP_楽譜描写20180111_2020.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UWP_楽譜描写20180111_2020"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Canvas
             Height
             ="600"
             Width
             ="600">
<!--
            <Path Fill="Black" Stroke="Black" StrokeThickness="1">
                <Path.Data>
                    <EllipseGeometry Center="50,50" RadiusX="7" RadiusY="10" />
                 
                </Path.Data>
            </Path>
-->

            <!--音符の棒 ヘ音記号のド-->
            <Line
                X1="302" Y1="220"
                X2="302" Y2="283"
                Stroke="Black"
     StrokeThickness="3"/>

         
            <!--オタマジャクシヘ音記号のド-->
            <Ellipse
    Canvas.Top="278"
    Canvas.Left="300"
    Fill="#FFFFFF00"
    Height="25"
    Width="10"
    StrokeThickness="5"
    Stroke="#FF0000FF">
         <Ellipse.RenderTransform>
            <RotateTransform Angle="45" />
         </Ellipse.RenderTransform>
            </Ellipse>

            <!--五線譜 右手-->
            <Line
                X1="50" Y1="100"
                X2="550" Y2="100"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="120"
                X2="550" Y2="120"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="140"
                X2="550" Y2="140"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="160"
                X2="550" Y2="160"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="180"
                X2="550" Y2="180"
                Stroke="Black"
     StrokeThickness="3"/>
         
         
 <!--左手-->
            <Line
                X1="50" Y1="240"
                X2="550" Y2="240"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="260"
                X2="550" Y2="260"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="280"
                X2="550" Y2="280"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="300"
                X2="550" Y2="300"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="320"
                X2="550" Y2="320"
                Stroke="Black"
     StrokeThickness="3"/>


        </Canvas>
    </Grid>
</Page>


---------------------------------------------------------------------------------
C#コード側からxamlにキャンバスを追加する
Canvas myCanvas = new Canvas();
            myCanvas.Height = 810;
            myCanvas.Width = 610;
            myCanvas.Background = new SolidColorBrush(Windows.UI.Colors.LightSteelBlue); //Brushes.LightSteelBlue;
            root_Grid.Children.Add(myCanvas);

-------------------
背景がSolidColorBrush色の100個のCanvasを追加したい時
 List<Canvas> myCanvas = new List<Canvas>();
            for (int i = 0; i < 100; i++)
            {
                myCanvas.Add(new Canvas { Height = 800, Width = 800, Background = new SolidColorBrush(Windows.UI.Colors.LightSteelBlue) });
               gridName.Children.Add(myCanvas[i]);
            }

------------------------------------------------------------------------------------
下の2行は少し試したけどうまくいかなかった。また後でもう一度見直してみる。
nameやaccesskeyを使って、名前やkeyを設定できるかも(後で確認しとく)。
ClearValue、UpdateLayoutも使えるか?
----------------------------------------------------------------------------------
レイヤー。
Framework layer ----Windows.UI.XAML
Visual layer ---------------Windows.UI.Composition
Graphics layer------------ DirectX Family
となっていて、
msによると、
ビジュアル レイヤー
1.コンテンツ: カスタム描画コンテンツの軽量合成
2.効果: 効果をアニメーション化、チェーン化、カスタマイズできる、リアルタイム UI 効果システム
3.アニメーション: UI スレッドから独立して実行される、表現力豊かな、フレームワークに依存しないアニメーション

XAML とビジュアル レイヤーの相互運用機能を使用すると、XAML API 単独では実現できない、高度なアニメーションや効果を作成できます。
だそうだ。

2017年12月1日金曜日

uwp ファイルの書き込み デバイス一覧をテキストファイルに書き込み

UWPでのテキストファイルの書き込み

UWPではStreamWriterが使えない。
UWPでは任意のフォルダにテキストを書き出すことができない。
----------------------------------
自PCの全デバイス名をテキストファイルに書き出すコード。

Buttonをひとつ配置

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Devices.Enumeration;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// 空白ページの項目テンプレートについては、https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x411 を参照してください

namespace 練習20171130a24UWP_ファイル
{
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();         
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {

            string selector = "System.Devices.InterfaceEnabled:=System.StructuredQueryType.Boolean#True";
            DeviceInformationCollection collection = await DeviceInformation.FindAllAsync(selector);

            // Create sample file; replace if exists.
            Windows.Storage.StorageFolder storageFolder =
                Windows.Storage.ApplicationData.Current.LocalFolder;
            Windows.Storage.StorageFile sampleFile =
                await storageFolder.CreateFileAsync("sample.txt",
                    Windows.Storage.CreationCollisionOption.ReplaceExisting);

            var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);

            using (var outputStream = stream.GetOutputStreamAt(0))
            {
                // We'll add more code here in the next step.

                using (var dataWriter = new Windows.Storage.Streams.DataWriter(outputStream))
                {

                    foreach (DeviceInformation info in collection)
                    {
                        dataWriter.WriteString(string.Format("Name={0} IsEnabled={1} Id={2} \r\n", info.Name, info.IsEnabled, info.Id));

                    }




                        // dataWriter.WriteString("DataWriter has methods to write to various types, such as DataTimeOffset.");

                        await dataWriter.StoreAsync();
                    await outputStream.FlushAsync();
                }
             
            }
            stream.Dispose(); // Or use the stream variable (see previous code snippet) with a using statement as well.

        }
    }
}



--------------------------------------------------------------------------------

msn
https://docs.microsoft.com/ja-jp/windows/uwp/files/quickstart-reading-and-writing-files#writing-to-a-file
のテキストファイルへの書き込みの解説通りにコードを組み立てた。

buttonを一つ配置

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Devices.Enumeration;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// 空白ページの項目テンプレートについては、https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x411 を参照してください

namespace 練習20171130a24UWP_ファイル
{
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();         
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {

            // Create sample file; replace if exists.
            Windows.Storage.StorageFolder storageFolder =
                Windows.Storage.ApplicationData.Current.LocalFolder;
            Windows.Storage.StorageFile sampleFile =
                await storageFolder.CreateFileAsync("sample.txt",
                    Windows.Storage.CreationCollisionOption.ReplaceExisting);

            var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);

            using (var outputStream = stream.GetOutputStreamAt(0))
            {
                // We'll add more code here in the next step.

                using (var dataWriter = new Windows.Storage.Streams.DataWriter(outputStream))
                {

                    dataWriter.WriteString("DataWriter has methods to write to various types, such as DataTimeOffset.");

                    await dataWriter.StoreAsync();
                    await outputStream.FlushAsync();
                }
             
            }
            stream.Dispose(); // Or use the stream variable (see previous code snippet) with a using statement as well.

           //書込み終了ダイアログ
           await new MessageDialog("書込み終了", "インフォメーション").ShowAsync();

        }
    }
}