ラベル

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年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();

        }
    }
}

2017年11月21日火曜日

トイレ用ヒーター

冬のトイレの暖房ヒーター。

トイレの照明スイッチとヒータースイッチが同じになるようにしたい。
そうすればトイレに入ったときにすでに暖房が動き出しているし、消し忘れもない。消し忘れても照明がついていれば、消し忘れを発見しやすい。

でも普通のスイッチだと焼ける可能性があるよなぁ。

で、リレー式のスイッチを使おうかとも思ったけれど、600w/hくらいのヒーターならそこまでしなくても「押し釦開閉器」で大丈夫みたいだ。検索かけたら、モノタロウで春日電機というところから単相用で定格通電電流15Aまで、と30Aまでのスイッチが出ているのを見つけた。しかも安い。15Aまでの物で1000円以下。

でも、でかいよなぁ。