ADODB.StreamのCharsetプロパティに設定できる値

ADODB.StreamのCharsetプロパティに設定できる値

○Charsetプロパティ
セットできる値は
HKEY_CLASSES_ROOT\MIME\Database\Charset
のサブキー一覧の中から選択できます

TypeプロパティがadTypeText=2の時に機能します

※Charsetを列挙する方法

①PwerShellを使う

PS>get-rsdrive

でhkclがドライブとして認識されているか確認します

一覧に無ければ
下記コマンドでPowerShell ドライブとして登録します

PS>New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT

登録を削除するには以下のコマンドを使います

PS>Remove-PSDrive -Name HKCR -PSProvider Registry

HKEY_CLASSES_ROOT\MIME\Database\Charsetのフォルダに移動します

PS>cd hkcr:\MIME\Database\Charset

一覧を表示します

PS>ls または PS>dir または PS>gci

パイプを使って一覧をファイルに出力します

PS>ls | C:\test\Charset.txt

②vbs[WSH]を使う

以下のコードを使う

Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_DYN_DATA = &H80000006
Const REG_SZ        = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY    = 3
Const REG_DWORD     = 4
Const REG_MULTI_SZ  = 7
Dim strComputer,hDefKey,strKeyPath
strComputer = "." ' Use . for current machine
hDefKey = HKEY_CLASSES_ROOT
strKeyPath = "MIME\Database\Charset"
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.EnumKey hDefKey, strKeyPath, arrSubKeys
Dim oFs,oTs
Set oFs = CreateObject("Scripting.FileSystemObject")
Set oTs = oFs.CreateTextFile(oFs.getParentFolderName(WScript.ScriptFullName) & "\CharsetReg.txt", True)
For Each strSubkey In arrSubKeys
 oTs.WriteLine(strSubkey)
Next
oTs.Close

得られた一覧は次の通り

ANSI_X3.4-1968
ANSI_X3.4-1986
arabic
ascii
ASMO-708
Big5
chinese
CN-GB
cp1256
cp367
cp819
cp852
cp866
csASCII
csbig5
csEUCKR
csEUCPkdFmtJapanese
csGB2312
csISO2022JP
csISO2022KR
csISO58GB231280
csISOLatin1
csISOLatin2
csISOLatin4
csISOLatin5
csISOLatinArabic
csISOLatinCyrillic
csISOLatinGreek
csISOLatinHebrew
csKOI8R
csKSC56011987
csShiftJIS
csUnicode11UTF7
csWindows31J
cyrillic
DOS-720
DOS-862
DOS-874
ECMA-114
ECMA-118
ELOT_928
euc-jp
euc-kr
Extended_UNIX_Code_Packed_Format_for_Japanese
GB2312
GBK
GB_2312-80
greek
greek8
hebrew
hz-gb-2312
IBM367
ibm819
ibm852
ibm866
iso-2022-jp
iso-2022-kr
iso-8859-1
iso-8859-11
iso-8859-2
iso-8859-3
iso-8859-4
iso-8859-5
iso-8859-6
iso-8859-7
iso-8859-8
ISO-8859-8 Visual
iso-8859-8-i
iso-8859-9
iso-ir-100
iso-ir-101
iso-ir-110
iso-ir-111
iso-ir-126
iso-ir-127
iso-ir-138
iso-ir-144
iso-ir-148
iso-ir-149
iso-ir-58
iso-ir-6
ISO646-US
iso8859-1
iso8859-2
ISO_646.irv:1991
iso_8859-1
iso_8859-1:1987
iso_8859-2
iso_8859-2:1987
ISO_8859-4
ISO_8859-4:1988
ISO_8859-5
ISO_8859-5:1988
ISO_8859-6
ISO_8859-6:1987
ISO_8859-7
ISO_8859-7:1987
ISO_8859-8
ISO_8859-8:1988
ISO_8859-9
ISO_8859-9:1989
koi
koi8-r
koi8-ru
korean
KSC5601
KSC_5601
ks_c_5601
ks_c_5601-1987
ks_c_5601-1989
l1
l2
l4
l5
latin1
latin2
latin4
latin5
logical
ms_Kanji
shift-jis
shift_jis
unicode
unicode-1-1-utf-7
unicode-1-1-utf-8
unicode-2-0-utf-8
unicodeFFFE
us
us-ascii
utf-7
utf-8
visual
windows-1250
windows-1251
windows-1252
windows-1253
Windows-1254
windows-1255
windows-1256
windows-1257
windows-1258
windows-874
x-ansi
x-cp1250
x-cp1251
x-euc
x-euc-jp
x-ms-cp932
x-sjis
x-unicode-2-0-utf-7
x-unicode-2-0-utf-8
x-user-defined
x-x-big5
_autodetect
_autodetect_all
_autodetect_kr
_iso-2022-jp$ESC
_iso-2022-jp$SIO

【PowerShell】コマンドの短縮名(エイリアス)逆引きリスト

PowerShellコマンドの短縮名(エイリアス)逆引きリストです

一覧は

PS>Get-Item Alias:

で取得することができます

CSV形式にしておいたのでたの表計算ソフトなどで取り込んで検索したりできます

PowerShellのGridViewに表示する場合は以下のコマンドが便利です

PS>ipcsv csvファイル名 -en oem -header "Alias","Name" | ogv
%,Foreach-Object
?,Where-Object
ac,Add-Content
asnp,Add-PSSnpin
cat,Get-Content
cd,Set-Location
cfs,ConvertFrom-String
chdir,Set-Location
clc,Clear-Content
clear,Clear-Host
clhy,Clear-History
cli,Clear-Item
clp,Clear-ItemProperty
cpp,Copy-ItemProperty
cls,Clear-Host
clv,Clear-Variable
cnsn,Connect-PSSession
compare,Compare-Object
copy,Copy-Item
cp,Copy-Item
cpi,Copy-Item
cpp,Copy-ItemProperty
curl,Invoke-WebRequest
cvpa,Convert-Path
dbp,Disable-PSBreakpoint
del,Remove-Item
diff,Compare-Object
dir,Get-ChildItem
dnsn,Disconnect-PSSession
ebp,Enable-PSBreakpoint
echo,Write-Output
epal,Export-Alias
epcsv,Export-Csv
epsn,Export-PSSession
erase,Remove-Item
etsn,Enter-PSSession
exsn,Exit-PSSession
fc,Format-Custom
fhx,Format-Hex
fl,Format-List
foreach,Foreach-Object
ft,Format-Table
fw,Format-Wide
gal,Get-Alias
gbp,Get-PSBreakpoint
gc,Get-Content
gcb,Get-Clipboard
gci,Get-ChildItem
gcim,Get-CimInstance
gcm,Get-Command
gcs,Get-PSCallStack
gdr,Get-PSDrive
ghy,Get-History
gi,Get-Item
gin,Get-ComputerInfo
gjb,Get-Job
gl,Get-Location
gm,Get-Member
gmo,Get-Module
gp,Get-ItemProperty
gps,Get-Process
gpv,Get-ItemPropertyValue
group,Group-Object
gsn,Get-PSSession
gsnp,Get-PSSnapin
gsv,Get-Service
gtz,Get-TimeZone
gu,Get-Unique
gv,Get-Variable
gwmi,Get-WmiObject
h,Get-History
history,Get-History
icm,Invoke-Command
iex,Invoke-Expression
ihy,Invoke-History
ii,Invoke-Item
ipal,Import-Alias
ipcsv,Import-Csv
ipmo,Import-Module
ipsn,Import-PSSession
irm,Invoke-RestMethod
ise,powershell_ise.exe
iwmi,Invoke-WmiMethod
iwr,Invoke-WebRequest
kill,Stop-Process
lp,Out-Printer
ls,Get-ChildItem
man,help
md,mkdir
measure,Measure-Object
mi,Move-Item
mount,New-PSDrive
move,Move-Item
mp,Move-ItemProperty
mv,Move-Item
nal,New-Alias
ndr,New-PSDrive
nmo,New-Module
npssc,New-PSSessionConfiguretionFile
nsn,New-PSSession
nv,New-Variable
ogv,Out-GridView
oh,Out-Host
popd,Pop-Location
ps,Get-Process
pushd,Push-Location
pwd,Get-Location
r,Invoke-History
rbp,Remove-PSbreakpoint
rcjb,Receive-Job
rcsn,Receive-PSSession
rd,Remove-Item
rdr,Remove-PSDrive
ren,Rename-Item
rjb,Remove-Job
rm,Remove-Item
rmo,Remove-Module
rni,Rename-Item
rnp,Rename-ItemProperty
rp,Rename-ItemProperty
rsn,Remove-PSSession
rsnp,Remove-PSSnapin
rujb,Resume-Job
rv,Remove-Variable
rvpa,Resolve-Path
rwmi,Remove-WmiInstance
sajb,Start-Job
sal,Set-Alias
saps,Start-Process
sasv,Start-Service
sbp,Set-PSBreakpoint
sc,Set-Content
scb,Set-Clipboard
select,Select-Object
set,Set-Variable
shcm,Show-Command
si,Set-Item
sl,Set-Location
sleep,Start-Sleep
sls,Select-String
sort,Sort-Object
sp,Set-ItemProperty
spjb,Stop-Job
spps,Stop-Process
spsv,Stop-Service
start,Start-Process
sujb,Suspend-Job
sv,Set-Variable
stz,Set-TimeZone
swmi,Set-WmiInstance
tee,Tee-Object
trcm,Trace-Command
type,Get-Content
wget,Invoke-WebRequest
where,Where-Object
wjb,Wait-Job
write,Write-Output

【VB.net/C#】OleDbによるcsvファイルをDataGlidViewに表示するプログラム

開発環境 VisualStudio2017
OS Windows10
フレームワーク .NET Framework 4.7.2

DataGridViewをFormにドッキングさせる方法

ドッキング方法はプロパティでDataGridViewを選択すると
デザインビューでDataGridViewがアクティブになり
右上に三角マークが出るのでこれをクリック
「DataGridViewのタスク」のダイアログが出るので
下にある「親コンテナーにドッキングする」をクリック
するとメニューを除くフォームの大きさになる

命名規則とプロパティ設定値

MenuStrip  mnuStrip
OpenFileDialog  ofdCsv  ofdCsv.Filter=Csvファイル|*.csv
ToolStripMenuItem CsvOpenToolStripMenuItem CsvOpenToolStripMenuItem.Text=Csvファイルを開く
DataGridView  dgvCsv
DataSet   oDS
DataTable  oTB
DataGridViewColumn oColumn
OleDb.OleDbConnection oCon
OleDb.OleDbCommand() oCommand
OleDb.OleDbDataAdapter oDataAdapter

VB.netコード

Public Class frmCsv
    Private Sub CsvOpenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CsvOpenToolStripMenuItem.Click
        ofdCsv.ShowDialog()
    End Sub
    Private Sub ofdCsv_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles ofdCsv.FileOk
        Dim sHeader As String
        If MsgBox("ヘッダー(1行目)にタイトルを含みますか?", MsgBoxStyle.YesNo, "ヘッダーの有無指定") = MsgBoxResult.Yes Then
            sHeader = "YES"
        Else
            sHeader = "NO"
        End If
        Dim oCon As New OleDb.OleDbConnection
        Dim oCommand As New OleDb.OleDbCommand()
        Try
            Dim sFileName As String = ofdCsv.SafeFileName
            Dim sFilePath As String = Strings.Left(ofdCsv.FileName, Len(ofdCsv.FileName) - Len(sFileName))
            Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFilePath & ";Extended Properties='Text;HDR=" & sHeader & ";FMT=CSVDelimited';"
            Dim oDataSet As New DataSet
            Dim oDataAdapter As New OleDb.OleDbDataAdapter
            Dim oDataTable As DataTable = New DataTable
            oCon.ConnectionString = sConnectionString
            oCommand.Connection = oCon
            oCommand.CommandText = "SELECT * FROM [" & sFileName & "]"
            oDataAdapter.SelectCommand = oCommand
            oDataSet.Clear()
            oDataAdapter.Fill(oDataTable)
            dgvCsv.DataSource = oDataTable
            Dim oColumn As DataGridViewColumn
            For Each oColumn In dgvCsv.Columns
                oColumn.SortMode = DataGridViewColumnSortMode.NotSortable
            Next
        Catch ex As Exception
            Debug.Write(ex.Message)
        Finally
            If Not Command() Is Nothing Then oCommand.Dispose()
            If Not oCon Is Nothing Then oCon.Dispose()
        End Try
    End Sub
End Class

C#コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb; //←追加
namespace CsvViewCSharp
{
    public partial class frmCsv : Form
    {
        public frmCsv()
        {
            InitializeComponent();
        }
        private void CsvOpenFileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ofdCsv.ShowDialog();
        }
        private void ofdCsv_FileOk(object sender, CancelEventArgs e)
        {
            bool bIsHeader = MessageBox.Show("ヘッダー(1行目)にタイトルを含みますか?", "ヘッダーの有無指定", MessageBoxButtons.YesNo) == DialogResult.Yes;
            string sHeader = bIsHeader ? "YES" : "NO";
            string sFileName = ofdCsv.SafeFileName;
            string sFilePath = ofdCsv.FileName.Substring(0, ofdCsv.FileName.Length - sFileName.Length);
            string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";Extended Properties='Text;HDR=" + sHeader + ";FMT=CSVDelimited';";
            OleDbConnection oCon = new OleDbConnection(sConnectionString);
            OleDbCommand oCommand = new OleDbCommand("SELECT * FROM [" + sFileName + "]", oCon);
            OleDbDataAdapter oDataAdapter = new OleDbDataAdapter(oCommand);
            DataSet oDataset = new DataSet();
            DataTable oDataTable = new DataTable();
            oDataset.Clear();
            oDataAdapter.Fill(oDataTable);
            dgvCsv.DataSource = oDataTable;
            foreach (DataGridViewColumn oColumn in dgvCsv.Columns)
            {
                oColumn.SortMode = DataGridViewColumnSortMode.NotSortable;
            }
            if (oCommand != null)
            {
                oCommand.Dispose();
            }
            if(oCon != null)
            {
                oCon.Dispose();
            }
        }
    }
}

【Java】ログインデータ管理プログラム【csv】

import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.*;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.LinkedList;
class ConsoleLoginEntry{
  public static final String csLoginRootPath = "";
  public static final String csLoginFilePath = "LoginData.csv";
  public static void main(String args[]){
    File ofLogin = new File(csLoginRootPath + csLoginFilePath);
    if (ofLogin.exists()){
      //System.out.println("ファイルは存在します");
    }else{
      System.out.println("ファイルが存在しません");
      System.out.println("ファイルを作成しますか?(Y)");
      try{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String sYesNo = br.readLine();
        if(sYesNo.equals("Y")){
          if(!ofLogin.createNewFile()){
            System.out.println("ファイルを作成できませんでした 終了します");
            return;
          }
        }else{
          System.out.println("終了します");
          return;
        }
      }catch(IOException e){
        System.out.println("Exception :" + e);
      }
    }
    String sID = "";
    String sPassWord = "";
    boolean bId = false;
    //IDの入力検査
    try{
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      System.out.print("IDを入力してください   ⇒  ");
      sID = br.readLine();
      sID = sID.trim();
      if(sID.equals("")){
        System.out.println("IDが入力されませんでした 終了します");
        return;
      }
      if(sID.indexOf(',') > -1){
        System.out.println("IDに','(カンマ)文字を使う事はできません");
        return;
      }
    }catch(IOException e){
      System.out.println("Exception :" + e);
    }
    
    //ログイン情報ファイル
    if (ofLogin.exists()){
      try{
        BufferedReader brFile = new BufferedReader(new FileReader(ofLogin));
        List<String[]> csv = new ArrayList<String[]>();
        String str = brFile.readLine();
        while (str != null) {
          csv.add(str.split(","));
          str = brFile.readLine();
        }
        brFile.close();
        bingo:
        for(String[] line : csv) {
          String s[] = line[0].split(",");          
          if (sID.equals(s[0])){
            bId = true;
            break bingo;
          }
        }
      }catch(IOException e){
        System.out.println("Exception :" + e);
      }
      //パスワードの変更可否
      if (bId){
        System.out.println("そのIDは既に存在します");
        System.out.println("PassWordを変更しますか?(Y) IDを削除しますか?(D)");
        try{
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          String sYesNoDelete = br.readLine();
          //パスワードのみ変更
          if(sYesNoDelete.equals("Y")){
            System.out.println("パスワードを入力して下さい");
            BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
            String sChangePassWord = br2.readLine();
            sChangePassWord = sChangePassWord.trim();
            if(sChangePassWord.equals("")){
              System.out.println("PassWordが入力されませんでした 終了します");
              return;
            }
            if(sChangePassWord.indexOf(',') > -1){
              System.out.println("PassWordに','(カンマ)文字を使う事はできません 終了します");
              return;
            }
            System.out.println("ID=" + sID + " PassWord=" + sChangePassWord);
            //変更前ログインデータを取得
            try{
              BufferedReader brFile = new BufferedReader(new FileReader(ofLogin));
              List<String[]> csv = new ArrayList<String[]>();
              String str = brFile.readLine();
              while (str != null) {
                csv.add(str.split(","));
                str = brFile.readLine();
              }
              brFile.close();
              //変更するログインデータ作成
              LinkedList<String> Newlist = new LinkedList<String>();
              for(String[] line : csv) {
                String s[] = line[0].split(",");          
                if (sID.equals(s[0])){
                  Newlist.add(sID + "," + sChangePassWord);
                }else{
                  Newlist.add(line[0] + "," + line[1]);
                }
              }
              //変更ログインデータファイル作成
              try{
                File Tempfile = new File(csLoginRootPath + "Temp.csv");
                FileWriter filewriter = new FileWriter(Tempfile);
                for (int i = 0; i < Newlist.size(); i++) {
                  filewriter.write(Newlist.get(i) + "\r\n");
                }
                filewriter.close();
                //リネームして正規ログインデータファイルにする
                ofLogin.delete();
                File fNew = new File(csLoginFilePath);
                Tempfile.renameTo(fNew);
              }catch(IOException e){
                System.out.println(e);
              }
              for (int i = 0; i < Newlist.size(); i++) {
                System.out.println(Newlist.get(i));
              }      
              System.out.println("パスワードは変更されました 終了します");
            }catch(IOException e){
              System.out.println("Exception :" + e);
            }
            return;
          //IDごと削除する
          }else if(sYesNoDelete.equals("D")){
            try{
              BufferedReader brFile = new BufferedReader(new FileReader(ofLogin));
              List<String[]> csv = new ArrayList<String[]>();
              String str = brFile.readLine();
              while (str != null) {
                csv.add(str.split(","));
                str = brFile.readLine();
              }
              brFile.close();
              //変更するログインデータ作成
              LinkedList<String> Newlist = new LinkedList<String>();
              for(String[] line : csv) {
                String s[] = line[0].split(",");          
                if (sID.equals(s[0])){
                  //Newlist.add(sID + "," + sChangePassWord);
                }else{
                  Newlist.add(line[0] + "," + line[1]);
                }
              }
              //変更ログインデータファイル作成
              try{
                File Tempfile = new File(csLoginRootPath + "Temp.csv");
                FileWriter filewriter = new FileWriter(Tempfile);
                for (int i = 0; i < Newlist.size(); i++) {
                  filewriter.write(Newlist.get(i) + "\r\n");
                }
                filewriter.close();
                //リネームして正規ログインデータファイルにする
                ofLogin.delete();
                File fNew = new File(csLoginFilePath);
                Tempfile.renameTo(fNew);
              }catch(IOException e){
                System.out.println(e);
              }
              //ログインデータ一覧を表示(確認用)
              /*
              for (int i = 0; i < Newlist.size(); i++) {
                System.out.println(Newlist.get(i));
              }
              */      
              System.out.println("正常に削除されました 終了します");
            }catch(IOException e){
              System.out.println("Exception :" + e);
            }
            return;
          }else{
            System.out.println("終了します");
          }
        }catch(IOException e){
          System.out.println("Exception :" + e);
        }
        return;
      }
    }
    //新規IDのパスワードの入力検査
    try{
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      System.out.print("PassWordを入力してください   ⇒  ");
      sPassWord = br.readLine();
      sPassWord = sPassWord.trim();
      if(sPassWord.equals("")){
        System.out.println("PassWordが入力されませんでした 終了します");
        return;
      }
      if(sPassWord.indexOf(',') > -1){
        System.out.println("PassWordに','(カンマ)文字を使う事はできません 終了します");
        return;
      }
    }catch(IOException e){
      System.out.println("Exception :" + e);
    }
    //新規IDと新規パスワードを登録
    try{
      File file = new File(csLoginRootPath + csLoginFilePath);
      FileWriter filewriter = new FileWriter(file, true);
      filewriter.write(sID + ',' + sPassWord + "\r\n");
      filewriter.close();
      System.out.println("登録は完了しました 終了します");
    }catch(IOException e){
      System.out.println(e);
    }
  }
}

【Java】JDBCを使ってSQLServerに接続する【JDBC】

JDBCを使ってSQLServerに接続するのに大変苦労したので解決方法を紹介します。
因みに名前付きインスタンスのサーバーに接続しています。

環境はWindows10、Java11、JDBCドライバは7.0です。
https://www.microsoft.com/ja-JP/download/details.aspx?id=57175 

先ずソースコードは以下の通り

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnectURL {
    public static void main(String[] args) {
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        }
        catch(ClassNotFoundException e){
            e.printStackTrace();
            return;
        }
        String connectionUrl = "jdbc:sqlserver://localhost\\MSSQLSERVER2017;databaseName=Login;user=sa;password=パスワード";
        try {
            Connection con = DriverManager.getConnection(connectionUrl);
            Statement stmt = con.createStatement();
            String SQL = "SELECT TOP 10 * FROM LOGIN";
            ResultSet rs = stmt.executeQuery(SQL);
            while (rs.next()) {
                System.out.println(rs.getString("ID") + " " + rs.getString("PWD"));
            }
            rs.close();
            con.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

通常のJava環境ではドライバを認識できなかったのでEclipseでドライバを参照設定すると成功した。

しかし通常のJava環境で実現したかったのでYahoo!知恵袋で質問した所、ドライバをカレントディレクトリに展開してクラスパスをカレントディレクトリに指定せよとの回答。

展開コマンドは以下の通り

>jar -xvf mssql-jdbc-7.2.1.jre11.jar

次にクラスパスを指定してコンパイル

>javac ConnectURL.java -cp .

実行時にはクラスパスは必要ありません

>java ConnectURL

あとでわかったことですがカレントディレクトリに展開しておけばコンパイル時も実行時にもクラスパスは必要ありませんでした。

Eclipseでも同様の事が行われているかは疑問ですがどんな環境構築しているのか興味が湧きますね。しかし通常のJava開発環境で簡単に実装出来ない(ドライバを展開しなければならない)のは問題があると思います。

【JavaScript/JQuery】YTPlayerを使ってWebページの背景に動画を表示する

Webページの背景に動画を表示する方法です。

https://github.com/pupunzi/jquery.mb.YTPlayer
からダウンロードし
Distフォルダ内のj query.mb.YTPlayer.min.jsと

Dist\cssフォルダ内のjquery.mb.YTPlayer.min.css
をhtmlファイルと同じフォルダ内に置きます。

HTMLファイルは次のコードになります。

<!DOCTYPE html>
<html>
<head>
<link href="jquery.mb.YTPlayer.min.css" media="all" rel="stylesheet" type="text/css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="jquery.mb.YTPlayer.min.js"></script>
<script>
    jQuery(function(){
      var myPlayer;
      myPlayer = jQuery("#bgVideo").YTPlayer({});
    });
</script>
</head>
<body>
<!--<button onclick="jQuery('#bgVideo').YTPToggleVolume()">Mute/Unmute</button>
<button onclick="jQuery('#bgVideo').YTPFullscreen()">Fullscreen</button>-->
<input id="videoID" type="text" value="RawC-7fxME0" onfocus="$('#loadOptions').slideDown()">
<button onclick="jQuery('#bgVideo').YTPChangeMovie({videoURL: $('#videoID').val(), mute: false,stopMovieOnBlur: false,showControls: true, loop: true, autoplay: true, ratio: 16/9})">change video</button>
<div class="video" id="bgVideo" data-property="{ videoURL: 'biMO46z_VSY',containment:'body', mute: false,stopMovieOnBlur: false,showControls: true, loop: true, autoplay: true, ratio: 16/9,opacity:1,addFilters: {grayscale: 50,sepia: 80,opacity: 30}}">jquery.mb.YTPlayer</div>
</body>
</html>

初期値の動画を変更する場合はコード内のvideoURL: '***********'の*に
YouTubeの動画へのリンクを入力してください。

テキストボックスにYouTubeのリンクを入力して「change video」ボタンを
押すことで動画を変更することができます。
テキストボックスに入力する動画の指定方法は以下の3タイプが指定できます。
https://www.youtube.com/watch?v=V2rifmjZuKQ
http://youtu.be/V2rifmjZuKQ
V2rifmjZuKQ

設定やメソッドなどの詳しい情報は
https://github.com/pupunzi/jquery.mb.YTPlayer/wiki
を見てください。

因みにChromeではファイルを直接開いても再生されますが、
EdgeではWebサイトにアクセスしないと再生されません。
Edgeの場合はIISなどをインストールするなどしてWebサイトから
ファイルを呼び出して確認してください。

補足情報
以前のバージョンでは動画変更するのにはYTPChangeVideoが
使われていましたが新しいバージョンではYTPChangeMovieになりました。

参考デモページ
https://pupunzi.com/mb.components/mb.YTPlayer/demo/demo.html

【Python/Tkinter】写真を点滅させる

Python/Tkinter】写真を点滅させる
f:id:Jikoryuu:20200119175545g:plain
PILをインストールする必要があります
PILで扱える画像の種類はbmptiff、gif、jpg、pngtiffppm、pgmです

PILがインストールされてない場合はpipでインストールしてください

>pip install Pillow

※参考URL

pythonGUIでオブジェクトを点滅させたい

https://teratail.com/questions/191769

PythonGUIに画像を表示する
https://water2litter.net/rum/post/python_tkinter_canvas_create_image/

円が動くアニメーションをつくるよ!after()でタイマーを作ろう!
https://python-channel.com/1370.html

ライブラリ:PIL
https://www.lifewithpython.com/2013/09/pil.html

 

import tkinter as tk
from PIL import Image, ImageTk

root = tk.Tk()
root.geometry('800x560')
root.title('IMG')

class Photo(object):
  root = None
  canvas = None
  # dt=点滅間隔[msec]
  def __init__(self,id,dt):
    self.id= str(id)
    self.state = 'normal'
    self.dt = dt
    Photo.root.after(self.dt, self.blink)
  def blink(self):
    if self.state == 'normal':
      self.state = 'hidden'
    else:
      self.state = 'normal'
  self.canvas.itemconfigure(self.id, state=self.state)
  self.root.after(self.dt, self.blink)

class Photo2(object):
  root = None
  canvas = None
  # dt=点滅間隔[msec]
  def __init__(self,id,dt):
    self.id= str(id)
    self.state = 'normal'
    self.dt = dt
    Photo2.root.after(self.dt, self.blink)
  def blink(self):
    if self.state == 'normal':
      self.state = 'hidden'
    else:
      self.state = 'normal'
    self.canvas.itemconfigure(self.id, state=self.state)
    self.root.after(self.dt, self.blink)

rimg1 = Image.open('picture.png')
img1 = ImageTk.PhotoImage(rimg1) # 表示するイメージを用意

canvas1 = tk.Canvas(
  root, # 親要素をメインウィンドウに設定
  #scrollregion=tk.W,
  width=rimg1.width-20, # 幅を設定
  height=rimg1.height-20, # 高さを設定
  relief=tk.RIDGE, # 枠線を表示
  borderwidth=10# 枠線の幅を設定
)
canvas1.create_image( # キャンバス上にイメージを配置
  0, # x座標
  0, # y座標
  image=img1, # 配置するイメージオブジェクトを指定
  tag="illust", # タグで引数を追加する。
  anchor=tk.NW # 配置の起点となる位置を左上隅に指定
)
canvas1.pack(fill = 'none', side = 'left')
Photo.root = root
Photo.canvas = canvas1
root.a1 = Photo(1,500)

rimg2 = Image.open('picture2.png')
img2 = ImageTk.PhotoImage(rimg2) # 表示するイメージを用意

canvas2 = tk.Canvas(
  root, # 親要素をメインウィンドウに設定
  width=rimg2.width-20, # 幅を設定
  height=rimg2.height-20, # 高さを設定
  relief=tk.RIDGE, # 枠線を表示
  borderwidth=10# 枠線の幅を設定
)
canvas2.create_image( # キャンバス上にイメージを配置
  0, # x座標
  0, # y座標
  image=img2, # 配置するイメージオブジェクトを指定
  tag="illust2", # タグで引数を追加する。
  anchor=tk.NW # 配置の起点となる位置を左上隅に指定
)
canvas2.pack(fill = 'none', side = 'left')
Photo2.root = root
Photo2.canvas = canvas2
Photo2(1,250)

root.mainloop()