ロック画面のスポットライト画像をコピーしてデスクトップにも流用させたい

ロック画面は何にしてますか?僕は設定でWindowsスポットライトにしてます。
これ、たぶんBingから定期的にダウンロードしてロック画面にスライドショー的に表示していると思うんだけど、なぜかログイン後のデスクトップの背景の設定でWindowsスポットライトの選択肢がないんですよねぇ。

Microsoft Storeで壁紙系のアプリを探せばたぶんあると思いますが、たぶんに要らん機能がくっついてきたり個人情報が抜かれたりと面倒なのでやっぱり自分でなんとかするのが基本です。そうです、信じられるのは唯一自分なのです(笑)

Windowsスポットライトで使用される画像ファイルは、
%LOCALAPPDATA%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets
に保存されているようです。拡張子がないので判別はできませんが、概ね400KB以上のファイルサイズのファイルが該当する画像で、任意のフォルダにコピーして拡張子.JPGでリネームすれば使いまわせます。ライセンスとか分からんが、どこぞに配布するわけではないので大丈夫でしょう。

定期的にピクチャフォルダにコピーすればいいんですが・・・いちいちフォルダ開いてファイルを選別してコピーしてリネームして・・・うわぁぁぁあーーーーーーん、超絶メンドクセーーーーーーー。
さらに、バックグラウンドでダウンロードされる画像ファイルには縦長と横長がごちゃまぜになっている。縦長の画像は不要なので、これも選別項目です。さらにメンドクサイ。

UNIX系のOSなら find コマンドやらimagemagickを駆使してシェルスクリプト化すればいいんですが・・・。
PowerShellを使えばできそうですけど、んーーーー、C#で組んだ方が早ぇよ。。。ということで、組んでみる。

ファイルサイズを判別するのは簡単で、JPEGファイルの高さと幅を取得するのがメンドクサそうですが・・・単純にSOFマーカーから取得することで手抜きします。完璧にしようとすると僕の知識では無理です。

github

Windows10でこれだけ知ってれば飯食える(大嘘)基本キーボード操作

Linuxでターミナル中心にCUIでゴニョゴニョやってると、脳内がGUIからCUIになりつつあります。そりゃそうだよね、マウスでごちゃごちゃやるより、コマンド一発叩けば処理完了すんだから。

で、脳内がCUIに侵されつつある今、Windows10でもそれをやろう、というわけです。原点回帰です。MS-DOSは良かったな!的な。
Windows10ではすでにWSLがあるので、テキスト処理はもう快適です。コマンドプロンプトでの type とか findstr とかいう、意味わかんねーコマンドを叩く必要はありません。WSLで cat, grep できます。WSLで標準出力をクリップボードにも転送できるし、もちろん Windowsのコンソールプログラムにパイプで接続できますし、正直、昔のマイクロソフトはなんだったんだ?ってな具合です。

閑話休題。

本題です。脳内がCUIに侵されつつあるので、できるだけ Windowsでもマウスを触りたくないのです。特にエディタ(gVimとか)でガシガシコーディングしてると、キーボードから手を放したくないのです。

よく忘れるので、備忘録として残してます。

キーボードショットカット編
※ WIN は ウィンドウズキーでキーボードのWindowsのロゴがプリントされているキー。

( 1)WIN + SHIFT + S: スクショ
( 2)WIN + PAUSE: コントロールパネル⇒システム
( 3)WIN + . (ピリオド) :絵文字入力パレットを出す
( 4)WIN + , (カンマ) :押している間だけ 全ウィンドウを非表示(デスクトップ上のアイコン確認用途?)
( 5)WIN + +(プラス): 拡大鏡(拡大)
( 6)WIN + – (ハイフン):拡大鏡(縮小)
( 7)WIN + E :エクスプローラのE (エクスプローラ起動)
( 8)WIN + R :実行(Run) の R (コマンドを指定して実行ダイアログ)
( 9)WIN + D :デスクトップのD (全ウィンドウ表示・非表示の切り替え)
(10)WIN + I :INSTITUTE?の I (Windowsの設定を開く)
(11)WIN + G :GAMEのG (ゲーム用の情報FPSとか?を出す)
(12)WIN + V : なんのVだ? クリップボードの履歴表示

POWERSHELL編
※ コマンドの後に パイプで ogv に渡すとグリッドビューウィンドウで表示してくれる
 ( ogvは Out-GridView のエイリアス)

(1)gip LANインターフェイスのIPアドレス他の情報表示( Get-NetIPConfigurationのエイリアス)
   ipconfigコマンドよりこっちのほうがプロっぽいでしょワラ
(2)gin コンピュータの情報一覧 msinfo32のコンソール版?(Get-ComputerInfoのエイリアス)
(3)Get-NetAdapter (認識されているLANアダプター一覧)
(4)Get-NetFirewallRule (Windowsファイヤーウォール規則の一覧表示)

Powershellは.NET Fremeworkのほぼ100%にアクセスでき、NET Frameworkのクラスライブラリのほぼすべてのインスタンスを生成して使用することができる最強のシェルです。またレジストリを普通のファイル・ディレクトリのように扱えたりできて、マイクロソフトが提供するコマンドレット・ライブラリによってWindowsの設定、各種機能のインストールなど、Windowsのすべてを制御できるWindows=PowerShellといっても過言ではないでしょう。 水を飲むように、呼吸するように、Powershellを使えなければWindowsで飯を食うのは難しいでしょう。(そんなこたぁーねぇよ)

コマンドプロンプト編(POWERSHELL上でも可能)WSLなしでもOK
(1)where : unix系コマンドでいうところの which コマンドです。
(2)clip : 標準出力をパイプでつないでクリップボードにコピー。ex) dir | clip
(3)nbtstat -a コンピュータ名 :LAN内のNETBIOSコンピュータ名から情報を取得
(4)curl:ファイル送受信コマンド(最新のWindows10では標準で使えるようになってます)
(5)scp :リモートファイルコピーコマンド (最新のWindows10で OpenSSHがサポートされてます)

要望としてはnetcatも標準でサポートして欲しい。。。powershellではスクリプト組めばなんとかできそうだけどね。netcat相当のコマンドレットも提供して欲しいよ、標準で。

随時追加中。。。

gVimでのシェル切り替え

Visual Studio 2019 Community インストール。
まぁ、たまにC#とか、昔のC++で書いたツールをビルドするのにやっぱ必要。
IDEはほとんど立ち上げず、gVimで編集、編集。もうカーソル移動が HJKLバインドじゃないと苦痛を感じるレベルまで悪化。
xkeymacs ならぬ、xkeyvim ってググるおっさんがここにいる。

そんなことはさておき。

gVimでC#とかC,C++(Win32 API)のコードを叩いていると、terminal でビルドしたくなります。だけど、おっさんはgVimのshellオプションをWSL(Bash)に変えてあるので、困った、困った、こまどり姉妹になるわけです。

困るので、gVimの複数のオプションを一括変更するだけのコマンドを書く・・・なんか激しく無駄なことをしている気がしないでもないが・・・CMD と WSLを行ったり来たりするにはこれしかない。

vimスクリプトで、オプション変数を初期値に戻すにはどう書けばいいのかなぁ・・・???
追記:
オプション変数を規定値に戻すのは set {option}& にすればいいようで・・・ヘルプに書いてますね・・・反省

普段は シェルを wsl-bash にしているので、 :Setcmd とすれば、:termや:shell や :r !hogehoge でcmd.exeを使うデフォルトに戻れる。
こんなアホなことしてんのおっさんだけだよなぁ。。。

start的なコマンド


台風の影響で、帰宅命令が発動され、早退してきて急に暇になった。
まぁ、そんなことは兎も角。

ほとんどのcmdやpowershellのようなコマンドプロンプト操作は WSLのUbuntuで済ませられるようになりました!が、内部コマンドの start だけは、コマンドプロンプトに頼るしかない。

cygwinならcygstart的な、wslstart みたいなコマンドが欲しいところ。ググれば github にそのものズバリの wslstart のシェルスクリプトがあったが、スクリプト的なものは使いたくないし・・・だって、他所のパソコン触るとき無いとガッカリするよね。他所様のパソコンに勝手にスクリプトファイル置いたら怒られるよね・・・。

つーか、”start . ” でカレントディレクトリのフォルダウィンドウが開ければそれでいいんですよ。。。。

ってなわけで、alias を一個追加。これなら、覚えられるし、他所のパソコン触るときもチャチャっと書ける。

alias start='cmd.exe /c start'

おいらのパソコンの ~/.bash_alias に追記した。。。

gVim の :terminal から “start .” とかやる。助かる~(^^;;;


#追記 2018/09/17
やっぱり パス変換の判別が欲しい・・・っていう欲求が出てきて、数行のシェルスクリプトをかます事にした。
WSLでのstartコマンド簡易ヘルパー

gvim(+kaoriya) + WSL

ちょっと躓いたので、備忘録。

gvim(+Kaoriya)で特に何も設定しないと、シェルは cmd.exe が使われますよね。8.1から:terminalが使えるようになったので、とりあえず %USERPROFILE%\_gvimrc に 以下の記述をつけてシェルをWSLのbashにしました・・・。

set shell=C:\WINDOWS\System32\bash.exe

一瞬だけ自己満に浸ってしまいましたが・・・コマンドラインモードで次を実行すると・・・

:r !date

テンポラリファイルがオープンできない旨のエラーが出て撃沈。

困ったときのグーグル先生で検索するも探し方が悪いのか解決できない。基本に立ち戻り、vimのヘルプを参照(^^; ( :help options )

shell を変更する場合は、shellcmdflag,shellquote,shellxquote等も変更してね・・・ということらしい。
はじめからこちらを見てれば問題なかった・・・。
ヘルプのとおりに以下のように設定すると、問題なくでけた!

set shell=C:\WINDOWS\System32\bash.exe
set shellcmdflag=-c
set shellquote=\"
set shellxescape=
set shellxquote=

※修正:shellxquoteを空にすると perl のファイルを開く時に ftplugin/perl.vim で標準入力待ちになって帰ってこなくなったので、よくわからないけど 引用符をいれたらなんか治った・・・よくわからん。まぁいいや。
※修正の修正:shellxquoteを設定したら今度は !command が動かなくなった・・・ということで戻す・・・。該当ファイル(ftplugin/perl.vim)を見たら perlpath = system('perl -e "join ....");の部分で perlpath を設定しているみたいなので、仕方ないので _gvimrc に let g:perlpath = “ほにゃららら” とかでお茶を濁して切り抜けた。

紆余曲折がありましたが・・・:terminal のおかげで、なかなかスマートに事を為しとげることができ、いとをかし。。。

スクリプトをせっせと書きつつ、コード片を スクリプトに流し込み、動作確認、CTRL-W N で端末ノーマルモードに移行しコピって、スクリプトにペーストとかもうキーボードから手を放さず全部できちゃう!

今までのようにコンソール画面をマウスでチマチマ選択しながらコピペ・・・とかもうおさらばさ!もうWindowsはダサいとか言わせないぜ!・・・・とかいいつつ、使ってるツール、環境は全部Linux由来なんだけど・・・(^^;;; WSLのおかげで、gvimの端末からフツーのWindowsアプリも起動できるし、いうことなし。\(^o^)/。

ただ、一点惜しむらくは、:term command とすると、当然環境変数PATHからcommandを探そうとします。これを WSL の中で行わせるには、:term bash -c command とかやらないと無理っぽい。この “bash -c “っていうのはイチイチ打つのはメンドイ。しかし、初心者のおいらにはこれまた解決方法が分からず、一向に初心者からなかなか抜け出せないな・・・。

:continue
つづきは part2で