🥳
-
応援・寄付のお願い
Cliborの真似です。
https://chigusa-web.com/clibor/dntAmazonギフトカード
Amazonギフトカード メールアドレス「develop.kozawa@gmail.com」を用意してみました。
15円から投げられて、手数料・消費税はかからないとか。
より良いフリーソフトのためにー
欲しいものリスト
欲しいものリスト おいしーーーー!
オレはまだイチローになりたいんだー
-
クリップボードロギングツール
C#学習中… 学習目的なので車輪の再開発です。
Clibor
目指したのはこちら。
https://chigusa-web.com/clibor
ミニPCにインストールして使っています。クリップボードツールでググると必ず上がってくる有名どころですね。
クリップNOTE
真似したのはこちら。
http://www.ost-net.com/clipnoteA/clip01.html
会社の社給パソコンにインストールして使っています。快適な入力支援ソフトです。間違いない。
作ったもの
WPF版
https://github.com/kozawa-tokyo/clipboardio
clipboardio_20250125.zipReleaseフォルダ配下を配布すれば他の環境で実行できるのか、.NETの野良アプリを配布するのは初めてで確認がとれていない。これらのリリース作業も含めてひと通り動作確認するために、C#学習3か月を記念して初回リリースします。
ファイルサイズが10MB近くあってRaspiに置くとblogの公開に支障がありそうなのでGitHubにアップロードしました。バイナリだけです。ソースファイルは、いつになるかは分かりませんが、バグ修正が落ち着いた後に学習用の試行錯誤処理をキレイにして公開できればと思います。
動作環境
TRIGKEY/ミニPC環境
- OS:Windows 11 Pro
- バージョン:24H2
- ビルド:26100
まだまだバグだらけなので上記環境でのみ起動するように制限しています。
インストール手順
任意のフォルダに展開してください。
C:\tool\clipboardio
├─ CommunityToolkit.Mvvm.dll
├─ GongSolutions.WPF.DragDrop.dll
├─ Microsoft.Web.WebView2.Core.dll
├─ Microsoft.Web.WebView2.Core.xml
├─ Microsoft.Web.WebView2.WinForms.dll
├─ Microsoft.Web.WebView2.WinForms.xml
├─ Microsoft.Web.WebView2.Wpf.dll
├─ Microsoft.Web.WebView2.Wpf.xml
├─ Microsoft.Xaml.Behaviors.dll
├─ clipData
├─ clipboardio.deps.json
├─ clipboardio.dll
├─ clipboardio.exe
├─ clipboardio.ini
├─ clipboardio.pdb
├─ clipboardio.runtimeconfig.json
├─ phraseData
├─ resource
├─ runtimes
└─ script使用方法
clipboardio.exe を起動します。
→タスクトレイに常駐します。基本動作
クリップボードのデータをファイルに保存します。
対象データ
- テキスト
- 画像
- HTML
保存フォルダ
C:\tool\clipboardio
└─clipData
├─ bitmap
├─ html*
└─ unicodeTextファイル名は、クリップボードの更新時刻です。
*:html配下は、「HTML クリップボードの形式」に準拠です。そのままHTMLファイルとして表示できるファイルではありません。
メイン画面の表示
右Shiftキー×2回:メイン画面表示
右Shiftキー×2回:メイン画面非表示
右Shiftキー×2回:メイン画面最前面移動
Esc:メイン画面非表示
タスクトレイアイコンクリック:メイン画面表示ツールバー
アイコン1つ目:選択項目の格納場所をファイラーで表示
アイコン2つ目:アプリの再起動リストビュー
クリップボードのテキストの先頭1行をリスト表示テキストボックス
クリップボードのテキストの複数行を表示
※後述の定義ファイルを編集した場合、画像およびHTMLを表示可能ステータスバー
ペースト先の画面のタイトル文字列を表示画面右上「×」ボタン
メイン画面非表示
※アプリを終了する場合はタスクトレイのアイコンから「閉じる」を選択してください。操作方法
左右キー:タブ切り替え(phraseDataフォルダにフォルダやファイルを作成することで複数のタブが表示されます)。
上下キー:項目選択
Enterキー:メイン画面表示時にアクティブだった画面に選択項目のテキスト等をペーストします。ペースト先の画面のタイトル文字列はステータスバーに表示されます。
右Shiftキーをダムダムして矢印キーで項目を選択してEnterする操作が基本となります。左手は添えるだけです。必ず成功するわけではありません。
これを貼っておこー
Ctrl+Enter:選択項目のコピーだけ(ペーストはしない)
Ctrl+「+」キー:画面フォントを+0.5ポイント
Ctrl+「-」キー:画面フォントを-0.5ポイント
Ctrl+「0」キー:画面フォントを14ポイントにリセットCtrl+「e」キー:選択項目のファイルをファイラーで表示
Deleteキー:選択項目に対応するファイルを削除(ごみ箱に移動)
Ctrl+「G」キー:秀丸またはサクラエディタがインストールされている場合は、Grepダイアログを表示。秀丸は32bit版を想定しています。定義ファイルでインストールパスを変更可能
Ctrl+「F」キー:「クリップボード」タブの「値」カラムにフィルタ入力領域を表示・非表示だけ。項目のフィルタ処理は今後実装予定。
「1」~「0」キー:タブの選択
※定型文フォルダ配下にフォルダ・ファイルを作成した場合のみ有効スペースキー:Pythonスクリプトが埋め込まれている場合、Pythonスクリプトを実行して画面下部のテキストボックスに表示
F5キー:アプリ再起動
定型文フォルダ
C:\tool\clipboardio
└─phraseDataフォルダまたはファイル(txt、csv、tsv)を作成します。ファイルはUTF8/CRLF前提です。フォルダ名、ファイル名がタブ名になります。(拡張子なし・あり)
作成したフォルダまたはファイルを画面に反映するためにはアプリを再起動する必要があります。
例:
C:\tool\clipboardio
└─phraseData
└─ 「定型文」フォルダ
│ └─ ファイル1.txt
│ └─ ファイル2.txt
└─ ファイル.txt
└─ ファイル.csv
└─ ファイル.tsv「定型文」、「ファイル.txt」、「ファイル.csv」、「ファイル.tsv」のタブが生成されます。タブおよびリストの項目はドラッグアンドドロップで入れ替え可能ですが、「クリップボード」タブは最左端固定です。
フォルダ:テキストファイルのみ格納できます。ファイル名が「ラベル」列に、テキストファイルの先頭1行目だけが「値」列に読み込まれます。「クリップボード」タブと同様にEnterキーでペーストできます。
複数行を定型文としてペーストしたい場合はフォルダ配下にテキストファイルを作成してください。
「ファイル.txt」:「ラベル」列に行番号が表示されます。
「ファイル.csv」:「ラベル」列に1カラム目の文字列が表示されます。
「ファイル.tsv」:「ラベル」列に1カラム目の文字列が表示されます。1行単位でペーストしたい場合はファイルを作成してください。
「script」フォルダ
定型文フォルダ配下のファイルには、「script」フォルダに作成したPythonスクリプトの実行結果を埋め込むことが可能です。
例1:
C:\tool\clipboardio
└─ script
│ └─ 現在日時.py
└─ phraseData
└─ 「定型文」フォルダ
└─ ファイル3.txt
ファイル3.txt の内容
————————————————————
【現在日時】 です。
————————————————————【】カッコ内の文字列が、scriptフォルダのPythonスクリプトのファイル名(拡張子なし)に対応しています。
Pythonスクリプトを実行結果の標準出力がペースト時に反映されます。
ペースト文字列
————————————————————
2025-01-25 09:36:51.640573 です。
————————————————————Pythonがインストールされていることが前提です。
Download the latest version for Windows
https://www.python.org/downloadsコマンドプロンプトで以下が実行できるか事前に確認してください。
python C:\tool\clipboardio\script\現在日時.py例2:
ファイル4.txt の内容
————————————————————
【年】/【月】/【日】 【時】:【分】:【秒】
————————————————————上記のファイル4.txtの場合は、ペースト時に以下の6ファイルのPythonスクリプトが逐次実行されてペーストされます。
年.py
月.py
日.py
時.py
分.py
秒.py少しラグがあります。今後並列実行に修正予定。
ペースト文字列
————————————————————
2025/01/25 09:41:02
————————————————————例3:
Pythonスクリプトが単独で実行できることが前提です。標準ライブラリ以外を使用する場合は、事前に依存するパッケージをインストールしてください。
C:\tool\clipboardio
└─ script
│ └─ clipboard.py
└─ phraseData
└─「定型文」フォルダ
└─ ファイル5.txt
clipboard.py
————————————————————
import urllib.parse
import pyperclipclip = pyperclip.paste()
print(clip, end=””)
————————————————————clipboard.pyにはクリップボードを扱うためのpyperclipパッケージが必要となります。
コマンドプロンプト
pip install pyperclipコマンドプロンプト
python C:\tool\clipboardio\script\clipboard.py事前にpipコマンド等でパッケージをインストールしてPythonスクリプトが実行できるか事前に確認してください。
ファイル5.txt
————————————————————
https://kozawa.tokyo/images/【clipboard】
————————————————————上記のファイル5.txtの場合は、clipboard.pyでクリップボードのテキストを取得して、固定文字列に結合/埋め込みしています。
「script」フォルダのファイル一覧
C:\tool\clipboardio
└─ script
現在日時.py ・・・ 上記の例1
月.py ・・・ 上記の例2
時.py
日.py
年.py
秒.py
分.py
曜日.py
clipboard.py ・・・ 上記の例3
string_count.py ・・・ クリップボード内の文字数をカウント
decode_url.py ・・・ クリップボード内の文字列をURLデコード「定型文」フォルダ配下および「script」フォルダ配下については、必要なファイルやスクリプトをユーザーが作成・追加する想定です。
Pythonスクリプトでネットワークやデータベースから情報を取得したり、アプリを起動したり、Pythonスクリプトを噛ませることで何でもできるかと思いますが、この辺りはユーザーのやりたいこと次第ですね。
今後、必要に応じてスクリプトを追加していく予定ですが、どのようなスクリプトがあれば便利に使えるのか検討/見当するところからです。
定義ファイル(clipboardio.ini)
[Application] fontName=Yu Gothic UI fontSize=14 hotKey=RShiftKey minInterval=50 maxInterval=200 restartFlag=False fileManager=C:\Program Files\HmFilerClassic\HmFilerClassic.exe fileManagerArg=/select,%s editor=C:\Program Files (x86)\Hidemaru\Hidemaru.exe editorArg=/d%s /g editor2=C:\Program Files (x86)\sakura\sakura.exe editorArg2=-GREPMODE -GREPDLG -GFILE="*.txt" -GFOLDER=%s startTag=【 endTag=】 imageFileVisible=False htmlFileVisible=False [Window] title=Clipboard I/O height=372 width=644 minColumnWidth=[100,100,125,50] marginColumnWidth=60 ; 灰色 ItemBackground1=#FFFFFF ItemBackground2=#F0F0F0 SelectBorderBrush=Gray SelectBorderThickness=2 ; 赤色 ;ItemBackground1=#FFFFFF ;ItemBackground2=#FFD5EC ;SelectBorderBrush=Red ;SelectBorderThickness=2 ; 青色 ;ItemBackground1=#FFFFFF ;ItemBackground2=#D9E5FF ;SelectBorderBrush=Blue ;SelectBorderThickness=2 ; 紫色 ;ItemBackground1=#FFFFFF ;ItemBackground2=#EAD9FF ;SelectBorderBrush=#5507FF ;SelectBorderThickness=2 [clipboardTab] maxRoadFile=50 tabLabel=クリップボード columnWidth=[0,378,147,59] [customTabInfo] tabCount=1 [customTab0] tabLabel=blog columnWidth=[100,484,0,0] itemCount=6 item0=webp.txt item1=rp4-img.txt item2=png.txt item3=jpg.txt item4=http-img.txt item5=avif.txt
編集する場合は、メモ帳で編集してください。
文字コード:Shift-JIS
改行コード:CRLFです。clipboardio.iniファイルだけSJIS、他のファイルはUTF8です。Iniファイルを修正するAPIが古い。脱Iniファイルも追い追いやっていきます。
————————————————————
[Application]
fontName=フォント名
fontSize=フォントサイズ
hotKey=ホットキー定義
minInterval=ホットキーのタイプ間隔下限値
maxInterval=ホットキーのタイプ間隔上限値
restartFlag=Trueで起動後に画面表示。
fileManager=秀丸ファイラーClassicパス。存在しなければエクスプローラを起動
fileManagerArg=ファイラー引数
editor=エディタパス
editorArg=エディタ引数
editor2=エディタパス
editorArg2=エディタ引数
startTag=Pythonスクリプト名開始タグ
endTag=Pythonスクリプト名終了タグ
imageFileVisible=Trueで「クリップボード」タブに画像ファイル名表示
htmlFileVisible=Trueで「クリップボード」タブにHTMLファイル名表示[Window]
title=メイン画面タイトル
height=メイン画面高さ
width=メイン画面幅
minColumnWidth=リストカラムの最小幅
marginColumnWidth=リストカラムのマージン(スクロールバー幅); 灰色
ItemBackground1=リストのゼブラ色
ItemBackground2=リストのゼブラ色
SelectBorderBrush=項目の選択色
SelectBorderThickness=項目の選択幅
・・・[clipboardTab]
maxRoadFile=起動時に「クリップボード」タブに読み込むファイル数
tabLabel=「クリップボード」タブのラベル文字列
columnWidth=「クリップボード」タブのカラム幅[customTabInfo]
tabCount=タブ数(phraseDataフォルダ配下のフォルダ・ファイル数)
[customTab0]
tabLabel=タブラベル
columnWidth=リストのカラム幅
itemCount=リストのアイテム数
item0=アイテムのファイル名/順序
————————————————————カラー変更
; 灰色
ItemBackground1=#FFFFFF
ItemBackground2=#F0F0F0
SelectBorderBrush=Gray
SelectBorderThickness=2色を変更する場合は、上記の4行を修正してください。
定義ファイルの編集後にアプリ再起動が必要です。F5キーです。
既知の不具合
- Ctrl+ダブルクリックでアプリが異常終了する。
- Deleteキーでファイル削除後、アイテムの選択フォーカスが0に強制される。
- 複数項目選択できてしまう
- 起動時に画面がちらつく(画面の初期化が完了していないとキーボートフックの通知先が取得できずメイン画面が表示できない)
など多数あります。
注意事項
パスワードなどの機微情報をコピーした場合、作成された当該ファイルを削除してください。Deleteキーです。
コピーしたデータはすべて残していく仕様のため、大きなファイルを頻繁にコピーするような作業には向いていません。ディスク使用量を確認して必要に応じて不要なファイルを削除してください。
所感
- System.Windows.Forms(Formsアプリ)
- System.Windows.Window(WPFアプリ) <= 今ここ
- WinUI 3
C#初心者だけど愚見を述べたい。酒でも飲みながら…
-
フジテレビ問題の本質を理解するには○○を見てください
🫵フジテレビをぶっ壊す!
-
キーのリマッピング
もう「Microsoft PowerToys」の「FancyZones」でいいかもしれないけど、自分用に修正したので貼っておこー
バグ修正
- Alt+Qキーでの画面移動時に高さの指定に誤りがありましたので修正しました。
機能変更
Alt+Q、Alt+A、Alt+W、Alt+Sキー:画面幅を固定値(スクリーン幅/2)としていた処理を修正しました。
→Alt+1キーまたはAlt+3キーで画面幅を変更した後、Alt+Q、Alt+A、Alt+W、Alt+Sキーで高さを変更してください。機能追加
Alt+F12:アクティブ画面の位置・サイズを埋め込んだスクリプト文字列をメッセージボックスで表示します。
!F12:: { WinGetPos &x, &y, &width, &height, WinGetID("A") message := Format('WinMove({1}, {2}, {3}, {4}, WinGetID("A"))', x, y, width, height) A_Clipboard := message MsgBox(message,, "OK") }
→クリップボードに「WinMove(0, 0, 960, 516, WinGetID(“A”))」のようなスクリプト文字列がコピーされます。固定位置に画面を移動させたい場合に任意のホットキーに割り当ててください。
例:Alt+4、Alt+5、Alt+6
; 画面位置設定例 !*4:: WinMove(0, 0, 960, 516, WinGetID("A")) !*5:: WinMove(500, 250, 960, 600, WinGetID("A")) !*6:: WinMove(960, 516, 960, 516, WinGetID("A"))
スクリプト修正後はスクリプトのリロードが必要です。
作ったもの