トップ 追記

Masa's blog

検索キーワード:

2020年06月04日 Shell script to convert nega film to posi [長年日記]

_ nega2posi.sh

#! /bin/sh
trap "rm /tmp/nega2posi.$$.*.tmp.*; exit 1" INT TERM
#
if [ "X$1" = "X-h" -o "X$1" = "X--help" ]
then
	echo "Usage: $0 [-b X,Y] [-aw | -w X,Y] [-i input] [-o output]"
	echo "Convert input(nega film) to output(posi)."
        echo ""
	echo "-b X,Y              Specify position of black."
	echo "-aw                 Adjust white balance automatically."
	echo "-w X,Y              Specify position of white and adjust white balance."
	echo "-i input            If this option is omitted or - is specified, stdin is assumed."
	echo "-o output           If this option is omitted or - is specified, stdout is assumed."
        exit 0
fi
#
AutoWhiteSw="n"
white=""
black=""
input="-"
output="-"
#
while [ $# -ne 0 ]
do
	case $1 in
	-aw)
		AutoWhiteSw="y"
		;;
	-w)
		shift
		white=`echo $1 |\
		       tr ',' '+'`
		;;
	-b)
		shift
		black=`echo $1 |\
		       tr ',' '+'`
		;;
	-i)
		shift
		input="$1"
		;;
	-o)
		shift
		output="$1"
		;;
	esac
	shift
done
#
if [ "X${black}" = "X" ]
then
	convert ${input} txt: >/tmp/nega2posi.$$.3.tmp.txt
	darkestXYC=`cat /tmp/nega2posi.$$.3.tmp.txt |\
		egrep -v '^#' |\
		tr ',:()' '    ' |\
		tr -s ' ' |\
		awk 'BEGIN{
			FS=" ";
		}
		{
			printf("%d %d %d\n",$1,$2,($3+$4+$4));
		}
		END{
		}' |\
		sort -t ' ' -k 3,3nr |\
		head -1`
	x=`echo ${darkestXYC} | cut -d ' ' -f 1`
	y=`echo ${darkestXYC} | cut -d ' ' -f 2`
	black="${x}+${y}"
fi
#
if [ "X${AutoWhiteSw}" = "Xy" ]
then
	if [ ! -r /tmp/nega2posi.$$.3.tmp.txt ]
	then
		convert ${input} txt: >/tmp/nega2posi.$$.3.tmp.txt
	fi
	brightestXYC=`cat /tmp/nega2posi.$$.3.tmp.txt |\
		egrep -v '^#' |\
		tr ',:()' '    ' |\
		tr -s ' ' |\
		awk 'BEGIN{
			FS=" ";
		}
		{
			printf("%d %d %d\n",$1,$2,($3+$4+$4));
		}
		END{
		}' |\
		sort -t ' ' -k 3,3n |\
		head -1`
	x=`echo ${brightestXYC} | cut -d ' ' -f 1`
	y=`echo ${brightestXYC} | cut -d ' ' -f 2`
	white="${x}+${y}"
fi
#
convert +repage ${input} /tmp/nega2posi.$$.1.tmp.png
size=`convert /tmp/nega2posi.$$.1.tmp.png -format "%wx%h" info:`
convert +repage /tmp/nega2posi.$$.1.tmp.png -crop 1x1+${black} -resize ${size}! -negate -strip /tmp/nega2posi.$$.2.tmp.png
convert +repage /tmp/nega2posi.$$.1.tmp.png /tmp/nega2posi.$$.2.tmp.png \
	-compose blend -composite -negate -equalize /tmp/nega2posi.$$.4.tmp.png
#	-compose blend -composite -negate -auto-level ${output}
#	-compose blend -composite -negate -normalize ${output}
#
if [ "X${white}" = "X" ]
then
	convert +repage /tmp/nega2posi.$$.4.tmp.png ${output}
else
	convert +repage /tmp/nega2posi.$$.4.tmp.png -crop 1x1+${white} -resize ${size}! -negate -strip /tmp/nega2posi.$$.5.tmp.png
	convert +repage /tmp/nega2posi.$$.4.tmp.png /tmp/nega2posi.$$.5.tmp.png \
		-compose blend -composite -equalize ${output}
#		-compose blend -composite -auto-level ${output}
#		-compose blend -composite -normalize ${output}
fi
#
rm /tmp/nega2posi.$$.*.tmp.*

2020年05月23日 Shell script to reboot BUFFALO AirStation NFINITI WHR-G301N [長年日記]

_ reboot_whrg301n.sh

#! /bin/sh
trap "rm /tmp/reboot_whrg301n.$$.*.tmp; exit 1" INT TERM

whrg301n_ip=_IP_ADDRESS_
user=root
password=_PASSWORD_

random=`printf "%10.10d" ${RANDOM}${RANDOM}`
wget --http-user=${user} \
	--http-password=${password} \
	-O /tmp/reboot_whrg301n.$$.1.tmp \
	"http://${whrg301n_ip}/cgi-bin/cgi?req=frm&frm=init.html&rand=${random}" 2>/dev/null

reboot_url=`cat /tmp/reboot_whrg301n.$$.1.tmp |\
		tr '<>' '\n\n' |\
		egrep 'method="POST"' |\
		head -1 |\
		sed -e 's/^.*action="//;s/".*$//'`
reboot_url="http://${whrg301n_ip}${reboot_url}"

reboot=`cat /tmp/reboot_whrg301n.$$.1.tmp |\
	tr '<>' '\n\n' |\
	LC_ALL=C egrep reboot |\
	sed -e 's/^.*value="//;s/".*$//' |\
	od -tx1 |\
	egrep '^0000000 ' |\
	tr -s ' ' |\
	cut -d ' ' -f 2-7 |\
	sed -e 's/^/%/;s/ /%/g'`

sWebSessionnum=`cat /tmp/reboot_whrg301n.$$.1.tmp |\
	tr '<>' '\n\n' |\
	egrep 'sWebSessionnum' |\
	head -1 |\
	sed -e 's/^.*value=//;s/>.*$//'`

sWebSessionid=`cat /tmp/reboot_whrg301n.$$.1.tmp |\
	tr '<>' '\n\n' |\
	egrep 'sWebSessionid' |\
	head -1 |\
	sed -e 's/^.*value=//;s/>.*$//'`

wget --http-user=${user} \
	--http-password=${password} \
	--post-data="sWebSessionnum=${sWebSessionnum}&sWebSessionid=${sWebSessionid}&reboot=${reboot}" \
	-O /dev/null \
	"${reboot_url}" 2>/dev/null

rm -f /tmp/reboot_whrg301n.$$.*.tmp

2020年05月10日 Building firefox-76.0.1 on Slackware64-14.2 [長年日記]

_ Building firefox-76.0.1 on Slackware64-14.2

autoconf-2.13, yes just 2.13 is required!

$ wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.13.tar.gz
$ tar xvf autoconf-2.13.tar.gz
$ cd autoconf-2.13
$ ./configure --prefix=/usr/local/autoconf-2.13
$ make
# make install
# cd /usr/local/autoconf-2.13/bin/ && ln -s autoconf autoconf-2.13

Some tools must be upgraded before building firefox-76.0.1.

rust

$ PATH="/home/m-ito/.cargo/bin:/usr/local/autoconf-2.13/bin:${PATH}"; export PATH
$ curl https://sh.rustup.rs -sSf | sh
$ rustup update

cbindgen-0.14.2

$ PATH="/home/m-ito/.cargo/bin:/usr/local/autoconf-2.13/bin:${PATH}"; export PATH
$ wget https://github.com/eqrion/cbindgen/archive/v0.14.2.tar.gz
$ tar xvf cbindgen-0.14.2.tar.gz
$ cd cbindgen-0.14.2
$ cargo install --force cbindgen

node-v12.15.0

$ wget https://nodejs.org/dist/v12.15.0/node-v12.15.0.tar.gz
$ tar xvf node-v12.15.0.tar.gz
$ cd node-v12.15.0
$ ./configure && make && sudo make install

Python-3.7.4

$ wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
$ tar xvf Python-3.7.4.tar.xz
$ cd Python-3.7.4
$ ./configure --with-threads --enable-ipv6 --enable-shared && make && sudo make install

llvm-8.0.1

Required files.

# sh llvm.SlackBuild
# installpkg /tmp/llvm-8.0.1-x86_64-2.txz

isl-0.18

$ wget -c -np --passive-ftp -r https://slackbuilds.org/repository/14.2/libraries/isl/
# cd slackbuilds.org/repository/14.2/libraries/isl
# sh isl.SlackBuild
# installpkg /tmp/isl-0.18-x86_64-1_SBo.tgz

gcc-9.3.0

$ wget -c -np --passive-ftp -r https://mirrors.slackware.com/slackware/slackware64-current/source/d/gcc/
# cd mirrors.slackware.com/slackware/slackware64-current/source/d/gcc
# sh gcc.SlackBuild
# installpkg /tmp/gcc-go-9.3.0-x86_64-2.txz
# installpkg /tmp/gcc-objc-9.3.0-x86_64-2.txz
# installpkg /tmp/gcc-9.3.0-x86_64-2.txz
# installpkg /tmp/gcc-gdc-9.3.0-x86_64-2.txz
# installpkg /tmp/gcc-g++-9.3.0-x86_64-2.txz
# installpkg /tmp/gcc-gfortran-9.3.0-x86_64-2.txz
# installpkg /tmp/gcc-brig-9.3.0-x86_64-2.txz
# installpkg /tmp/gcc-gnat-9.3.0-x86_64-2.txz

Finally I could build firefox-76.0.1 on Slackware64-14.2 :)

create .mozconfig in source directory of firefox-76.0.1

export LDFLAGS="-latomic"
. $topsrcdir/browser/config/mozconfig
ac_add_options --enable-optimize
ac_add_options --enable-default-toolkit=cairo-gtk3
ac_add_options --disable-debug
ac_add_options --disable-tests

Command lines for building

$ PATH="/home/m-ito/.cargo/bin:/usr/local/autoconf-2.13/bin:${PATH}"; export PATH
$ tar xvf firefox-76.0.1.source.tar.xz
$ cd firefox-76.0.1
$ make clean; nice ./mach build && nice ./mach build package

make clean was very important! Without make clean, build failed with conflict about python's version :P

Command lines for installing

# mkdir /usr/local/firefox-76.0.1
# cd /usr/local/firefox-76.0.1
# tar xvf /home/m-ito/tmp/firefox-76.0.1/obj-x86_64-pc-linux-gnu/dist/firefox-76.0.1.en-US.linux-x86_64.tar.bz2

Misc

  • about:config -> intl.locale.requested=ja_JP
  • export MOZ_DISABLE_CONTENT_SANDBOX=1
  • export MOZ_PLUGIN_PATH=/usr/lib64/mozilla/plugins

_ Script to upgrade Slackware by slackpkg

update_system.sh

#! /bin/sh
slackpkg -batch=on -default_answer=y update
slackpkg -batch=on -default_answer=y install-new
slackpkg -batch=on -default_answer=y upgrade-all
slackpkg -batch=on -default_answer=y clean-system

echo '=== check .new files start ==='
for i in `locate '*\.new' | egrep 'new$'`
do
        org=`echo $i | sed -e 's/\.new$//'`
        if [ -r ${org}  ]
        then
                diff -c ${org} $i 2>&1
        fi
done
echo '=== check .new files end   ==='

2020年02月01日 How to mount exFat on Slackware64-14.2 [長年日記]

_ How to mount exFat on Slackware64-14.2

Install fuse-exfat (1.3.0)

Install exfat-utils (1.3.0)

How to mount exFat

  • mount -t exfat /dev/sdb1 /mnt/tmp

2019年11月16日 How to fix Windows that can't boot [長年日記]

_ How to fix Windows that can't boot

Rewrite MBR(Master Boot Record)

bootrec /FixMbr

Rebuild BCD(Boot Configuration Data)

bootrec /RebuildBcd

2019年10月17日 How to show Windows10's product key [長年日記]

_ How to show Windows10's product key

For Command prompt

wmic path softwarelicensingservice get OA3xOriginalProductKey

For Powershell

powershell "(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey"

2019年09月27日 Script to blur specified rectangle of movie [長年日記]

_ blurmovie.sh

#! /bin/sh
#
if [ "X$1" = "X-h" -o "X$1" = "X--help" ]
then
	echo "Usage: $0 [-s starttime] [-e elapstime] [-r rectangle] [-vc vcodec] [-vb vbitrate] [-ac acodec] [-ab abitrate] [-i input] [-o output]"
	echo "Apply blur effect on specified rectangle of input."
        echo ""
	echo "-s starttime           hh:mm:ss(default 00:00:00)"
	echo "-e elapstime           hh:mm:ss(default 99:00:00)"
	echo "-r rectangle           x:y:width:height:blur"
	echo "-vc vcodec             h264(default), mpeg2video"
	echo "-vb vbitrate           video bitrate(default 1000k)"
	echo "-ac acodec             aac(default), any"
	echo "-ab abitrate           audio bitrate(default 192k)"
        exit 0
fi
#
START="00:00:00"
ELAPS="99:00:00"
X=""
Y=""
WIDTH=""
HEIGHT=""
BLUR=""
VCODEC="h264"
VBITRATE="1000k"
ACODEC="aac"
ABITRATE="192k"
INPUT=""
OUTPUT=""
#
while [ $# -ne 0 ]
do
	case $1 in
	-s)
		shift
		START="$1"
		;;
	-e)
		shift
		ELAPS="$1"
		;;
	-r)
		shift
		X=`echo $1|cut -d: -f1`
		Y=`echo $1|cut -d: -f2`
		WIDTH=`echo $1|cut -d: -f3`
		HEIGHT=`echo $1|cut -d: -f4`
		BLUR=`echo $1|cut -d: -f5`
		;;
	-vc)
		shift
		VCODEC="$1"
		;;
	-vb)
		shift
		VBITRATE="$1"
		;;
	-ac)
		shift
		ACODEC="$1"
		;;
	-ab)
		shift
		ABITRATE="$1"
		;;
	-i)
		shift
		INPUT="$1"
		;;
	-o)
		shift
		OUTPUT="$1"
		;;
	esac
	shift
done
#
if [ "${VCODEC}" = "h264" ]
then
	FFORMAT="mp4"
elif [ "${VCODEC}" = "mpeg2video" ]
then
	FFORMAT="mpegts"
else
	echo "vcodec should be h264 or mpeg2video, aborted."
	exit 1
fi
#
ffmpeg -y \
	-i ${INPUT} \
	-strict -2 \
	-ss ${START} \
	-t ${ELAPS} \
	-c:v ${VCODEC} \
	-b:v ${VBITRATE} \
	-c:a ${ACODEC} \
	-b:a ${ABITRATE} \
	-filter_complex "[0:v]crop=w=${WIDTH}:h=${HEIGHT}:x=${X}:y=${Y},boxblur=lp=${BLUR}[chat];[0:v][chat]overlay=${X}:${Y}" \
	-f ${FFORMAT} \
	${OUTPUT}

2019年09月26日 How to capture Windows desktop with ffmpeg [長年日記]

_ How to capture Windows desktop with ffmpeg

ffmpeg.exe -y -f gdigrab -framerate 29.97 -i desktop -r 29.97 -c:v h264 -b:v 1000k -pix_fmt yuv420p capture.mp4

2019年07月15日 Building firefox-68.0 on Slackware64-14.2 [長年日記]

_ Building firefox-68.0 on Slackware64-14.2

I had to update some tools to build firefox-68.0 on Slackware64-14.2.

cbindgen-0.9.0

$ PATH="/home/m-ito/.cargo/bin:/usr/local/autoconf-2.13/bin:${PATH}"; export PATH
$ wget https://github.com/eqrion/cbindgen/archive/v0.9.0.tar.gz
$ tar xvf v0.9.0.tar.gz
$ cd cbindgen-0.9.0
$ cargo install --force cbindgen

node-v10.16.0

$ wget https://nodejs.org/dist/v10.15.1/node-v10.16.0.tar.gz
$ tar xvf node-v10.16.0.tar.gz
$ cd node-v10.16.0
$ ./configure && make && sudo make install

Python-3.7.4

$ wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
$ tar xvf Python-3.7.4.tar.xz
$ cd Python-3.7.4
$ ./configure --with-threads --enable-ipv6 --enable-shared && make && sudo make install

llvm-4.0.1

Required files.

# sh llvm.SlackBuild
# installpkg /tmp/llvm-4.0.1-x86_64-2.txz

Finally I could build firefox-68 on Slackware64-14.2 :)

create .mozconfig in source directory of firefox-68.0

export LDFLAGS="-latomic"
. $topsrcdir/browser/config/mozconfig
ac_add_options --enable-optimize
ac_add_options --enable-default-toolkit=cairo-gtk3
ac_add_options --disable-debug
ac_add_options --disable-tests

Command lines for building

$ PATH="/home/m-ito/.cargo/bin:/usr/local/autoconf-2.13/bin:${PATH}"; export PATH
$ export LANG=C; export LC_ALL=C
$ tar xvf firefox-68.0.source.tar.xz
$ cd firefox-68.0
$ make clean; nice ./mach build && nice ./mach build package

make clean was very important! Without make clean, build failed with conflict about python's version :P

Command lines for installing

# mkdir /usr/local/firefox-68.0
# cd /usr/local/firefox-68.0
# tar xvf /home/m-ito/tmp/firefox-68.0/obj-x86_64-pc-linux-gnu/dist/firefox-68.0.en-US.linux-x86_64.tar.bz2

Misc

  • about:config -> intl.locale.requested=ja_JP
  • export MOZ_DISABLE_CONTENT_SANDBOX=1
  • export MOZ_PLUGIN_PATH=/usr/lib64/mozilla/plugins

2019年06月11日 UiPath memo (RPA) [長年日記]

_ UiPath memo (RPA)

フローチャート

使用可能 -> ワークフロー -> フローチャート -> フローチャート(Flowchart)

順実行

使用可能 -> ワークフロー -> 制御 -> シーケンス(Sequence)

並列実行

使用可能 -> ワークフロー -> 制御 -> 並列(Parallel)

if文

使用可能 -> ワークフロー -> 制御 -> 条件分岐(If)

繰り返し

使用可能 -> ワークフロー -> 制御 -> 繰り返し(前判定)(While)

配列の内容分繰り返す

使用可能 -> ワークフロー -> コントロール -> 繰り返し(コレクションの各要素)(ForEach)
  • コレクション -> CTRL-K 変数 -> IEnumerable型(デフォルト)。
  • Misc -> TypeArgument -> コレクションの型を選択できる。

指定時間スリープ

使用可能 -> ワークフロー -> 制御 -> 待機(Delay)
  • 待機時間 -> hh:mm:ss.MMM (時間:分:秒.ミリ秒)。

エラー処理(割込)

使用可能 -> ワークフロー -> エラー処理 -> トライキャッチ(Try Catch)
  • CTRL-T

ワークフローファイル(サブルーチン)をプロジェクト内に追加作成(引数受渡し可能)

CTRL-N

サブルーチン(ワークフローファイル)呼出(引数受渡し可能)

使用可能 -> ワークフロー -> 呼び出し -> ワークフローファイルを呼び出し(Invoke Workflow File)
  • 引数のインポート前には、サブルーチン側の引数定義を完成し、保存しておくこと。
  • 引数は変数ではないので、直接に値の代入はできない。
  • 引数定義で実際の値や変数と結びつける。

変数に値を代入

使用可能 -> ワークフロー -> 制御 -> 代入(Assign)

クリップボードから変数に代入

使用可能 -> システム -> クリップボード -> クリップボードから取得(Get From Clipboard)
  • 出力 -> 結果 -> CTRL-K 変数 -> GenericValue型。

文字列置換

使用可能 -> プログラミング -> 文字列 -> 置換(Replace)
  • 結果 -> 出力変数。
  • パターン -> 置換前文字列。
  • 入力 -> 入力文字列。
  • 置換 -> 置換後文字列。

文字列比較

使用可能 -> プログラミング -> 文字列 -> 文字列の一致をチェック(Is Match)
  • Misc -> 結果 -> CTRL-K 変数 -> boolean型。

メッセージボックス

使用可能 -> システム -> ダイアログ -> メッセージボックス(Message Box)

入力ダイアログ

使用可能 -> システム -> ダイアログ -> 入力ダイアログ(Input Dialog)
  • タイトル -> タイトルバーに表示。
  • ラベル -> 入力欄の左側に表示。
  • 出力 -> 結果 -> CTRL-K 変数 -> GenericValue型。

アプリケーションの起動

使用可能 -> システム -> アプリケーション -> プロセスを開始(Start Process)

キーボード入力

使用可能 -> UI Automation -> 要素 -> キーボード -> 文字を入力(Type Into)
  • ウィンドウメッセージを送信 -> バックグラウンド実行可能。互換性が高い。まぁまぁ早い。
  • 入力をシミュレート -> バックグラウンド実行可能。互換性が低い。早い。
  • フィールド内を削除 -> フィールド内の文字列を消してから、文字列を送信する。

制御キーを入力

使用可能 -> UI Automation -> 要素 -> キーボード -> ホットキーを押下(Send Hotkey)
  • ウィンドウメッセージを送信 -> バックグラウンド実行可能。

マウスクリック

使用可能 -> UI Automation -> 要素 -> マウス -> クリック(Click)
  • ウィンドウメッセージを送信 -> バックグラウンド実行可能。互換性が高い。まぁまぁ早い。
  • クリックをシミュレート -> バックグラウンド実行可能。互換性が低い。早い。
  • X,Yのオフセット -> 原点からの相対位置を指定する。
  • 位置 -> 原点を指定する。
  • クリックの種類 -> シングル、ダブル、アップ、ダウン。
  • キー修飾子 -> ALT, CTRL, SHIFT, WIN。
  • マウスボタン -> 右、左、中央。

テキストをクリック

使用可能 -> UI Automation -> テキスト -> マウス -> クリック(Click Text)

画像をクリック

使用可能 -> UI Automation -> 画像 -> マウス -> 画像をクリック(Click Image)

画像が出現したとき

使用可能 -> UI Automation -> 画像 -> イベント -> 画像が出現したとき(On Image Appear)

画像が消滅したとき

使用可能 -> UI Automation -> 画像 -> イベント -> 画像が消滅したとき(On Image Vanish)

要素が出現したとき

使用可能 -> UI Automation -> 要素 -> イベント -> 要素が出現したとき(On Element Appear)

要素が消滅したとき

使用可能 -> UI Automation -> 要素 -> イベント -> 要素が消滅したとき(On Element Vanish)

リストボックスの選択

使用可能 -> UI Automation -> 要素 -> コントロール -> 項目を選択(Select Items)

テキストの位置を探す

使用可能 -> UI Automation -> テキスト -> 画面スクレイピング -> テキスト位置を探す(Find Text Position)
  • 出力 -> UI要素 -> CTRL-K 変数名 -> UiElement型
  • 「テキストの位置を探す」で取得した「UiElement uiLoc」からテキスト文字列の真ん中をクリックするための座標を求める方法。
    • clickX = CInt(uiLoc.ClippingRegion.Rectangle.Value.X + uiLoc.ClippingRegion.Rectangle.Value.Width / 2)。
    • clickY = CInt(uiLoc.ClippingRegion.Rectangle.Value.Y + uiLoc.ClippingRegion.Rectangle.Value.Height / 2)。

フルテキストを取得

使用可能 -> UI Automation -> テキスト -> 画面スクレイピング -> フルテキストを取得(Get Full Text)

OCR日本語対応 tesseract OCR

ttps://github.com/tesseract-ocr/tessdata/blob/4.00/jpn.traineddata
  -> mkdir & copy into C:\Users\(自分のログイン名)\AppData\Local\UiPath\app-XX.X.X\tessdata\
                    or C:\Program Files\UiPath\Studio\tessdata\

OCRで文字列取得

使用可能 -> UI Automation -> OCR -> 画面スクレイピング -> OCRでテキストを取得(Get OCR Text)
  • 出力 -> テキスト -> CTRL-K 変数 -> GenericValue型。

OCRエンジン

使用可能 -> UI Automation -> OCR -> エンジン -> tesseract OCR

OCRで検出した文字列をマウスでクリック

使用可能 -> UI Automation -> OCR -> マウス -> OCRで検出したテキストをクリック(Click OCR Text)
  • ウィンドウメッセージを送信 -> バックグラウンド実行可能。互換性が高い。まぁまぁ早い。
  • X,Yのオフセット -> 原点からの相対位置を指定する。
  • 位置 -> 原点を指定する。
  • クリックの種類 -> シングル、ダブル、アップ、ダウン。
  • キー修飾子 -> ALT, CTRL, SHIFT, WIN。
  • マウスボタン -> 右、左、中央。

画面内の文字列の有無チェック(非OCR)

使用可能 -> UI Automation -> テキスト -> 検出 -> テキストの有無を確認(Text Exists)
  • 出力 -> 存在の有無 -> CTRL-K 変数 -> boolean型。

ウインドウを最小化する

使用可能 -> UI Automation -> ウィンドウ -> ウィンドウにアタッチ(Attach Window)
使用可能 -> UI Automation -> ウィンドウ -> ウィンドウを最小化(Minimize Window)

エクセルのセルの内容を読み込む

使用可能 -> システム -> ファイル -> ワークブック -> セルを読み込み(Read Cell)
  • 出力 -> 結果 -> CTRL-K 変数 -> GenericValue型。

エクセルの行の内容を読み込む

使用可能 -> システム -> ファイル -> ワークブック -> 行を読み込み(Read Row)
  • 開始セル -> 指定したセルから読み込む。
  • 出力 -> 結果 -> CTRL-K 変数 -> IEnumerable<System.Object>型。
  • Null判定 -> 変数 is nothing, 変数 isNot nothing。
  • 1個目の項目 -> 変数(0).toString()、100個目の項目 -> 変数(99).toString()。

エクセルの全行の内容を読み込む

使用可能 -> システム -> ファイル -> ワークブック -> 範囲を読み込み(Read Range)
  • ヘッダーの追加 -> 1行目を列名として認識させる。
  • 範囲 -> 読み込み範囲を指定(無指定時は全部)。
  • 出力 -> データテーブル -> CTRL-K 変数名 -> DataTable型。
  • 1行目の1個目の項目 -> 変数(0).Item(0).toString()、10行目の100個目の項目 -> 変数(9).Item(99).toString()。
  • 1行目の1個目の項目 -> 変数(0).Item("列名0").toString()、10行目の100個目の項目 -> 変数(9).Item("列名99").toString()。

CSVの読み込み

使用可能 -> アプリの連携 -> CSV -> CSVを読む(Read CSV)
  • エンコーディング -> "SJIS"、"UTF-8" etc。
  • 列名を含める -> 1行目を列名として認識させる。
  • 区切り文字 -> "\t"、","、";"、"|"。
  • 出力 -> データテーブル -> CTRL-K 変数名 -> DataTable型。
  • 1行目の1個目の項目 -> 変数(0).Item(0).toString()、10行目の100個目の項目 -> 変数(9).Item(99).toString()。
  • 1行目の1個目の項目 -> 変数(0).Item("列名0").toString()、10行目の100個目の項目 -> 変数(9).Item("列名99").toString()。

DataTable型 変数(Excel、CSV全行読み込んだ変数)分繰り返す

使用可能 -> プログラミング -> データテーブル -> 繰り返し(各行)(For Each Row)
  • 1個目の項目 -> row.Item(0).toString()、2個目の項目 -> row.Item(1).toString()。
  • 1個目の項目 -> row.Item("列名0").toString()、2個目の項目 -> row.Item("列名1").toString()。

エクセルのセルに色を付ける

使用可能 -> アプリの連携 -> Excel -> Excelアプリケーションスコープ(Excel Application Scope)
  • 可視 -> シートを表示する。
  • 自動保存 -> 修正内容を自動的に保存する。
使用可能 -> アプリの連携 -> Excel -> 範囲の色を設定(Set Range Color)
  • 入力 -> 色 -> Color.red etc。

デバッグ出力

使用可能 -> プログラミング -> デバッグ -> 1行を書き込み(Write Line)
  • 「出力」タブに出力される。

コメント文挿入

使用可能 -> プログラミング -> デバッグ -> コメント(Comment)

コメント化

使用可能 -> プログラミング -> デバッグ -> コメントアウト(Comment Out)
  • CTRL-D コメント化
  • CTRL-E 非コメント化

Misc

  • 整数化 -> CInt(変数)。
  • 文字列化 -> 変数.toString。
  • 数値チェック -> isNumeric(変数)。
  • CTRL-C(コピー)した文字列には改行(vbCrLf)が含まれる。
  • 空セルをCTRL-C(コピー)した時も改行(vbCrLf)が取り込まれる。
  • InternetExplorer -> インターネットオプション -> 詳細設定 -> セキュリティ -> マイコンピュータのファイルでのアクティブコンテンツでの実行を許可する。
  • publishを取り消す。
    • C:\ProgramData\UiPath\Package\対象パッケージ.nupkg を削除する。
    • C:\Users\ユーザ\.nuget\packages\対象パッケージ\ を削除する。
  • 操作対象アプリケーションの画面遷移の確定を判断する手法
    • 使用可能 -> UI Automation -> テキスト -> 画面スクレイピング -> フルテキストを取得(Get Full Text)
    • 使用可能 -> UI Automation -> テキスト -> 検出 -> テキストの有無を確認(Text Exists)
    • 使用可能 -> UI Automation -> 要素 -> イベント -> 要素が出現したとき(On Element Appear)
    • 使用可能 -> UI Automation -> 要素 -> イベント -> 要素が消滅したとき(On Element Vanish)
    • 使用可能 -> UI Automation -> 画像 -> イベント -> 画像が出現したとき(On Image Appear)
    • 使用可能 -> UI Automation -> 画像 -> イベント -> 画像が消滅したとき(On Image Vanish)
    • 使用可能 -> UI Automation -> OCR -> 画面スクレイピング -> OCRでテキストを取得(Get OCR Text)