アカウント名:
パスワード:
クラス名"Edit"のウィンドウをメモ帳の子ウィンドウからFindWindowExで探してWM_SETTEXTかEM_REPLACESELで投げつける。Windows 11の新しいメモ帳ではクラス名を変えないと動かないけど、そもそも新しいメモ帳はタイトルも「無題 - メモ帳」ではないのでWindows 10専用ということで。
SendMessageでテキスト送りつけられる [coocan.jp]のを初めて知った。SendMessageはWM_CLOSEでウィンドウ閉じたり電卓のボタン押させたりする [perl-users.jp]位でしか使うシーンが思い浮かべられなかったし、不必要に使うとシステムが不安定化するみたいな心配があって積極的には触れてこなかった。いま改めてSendMessageを使う決心をしてみるとWin32::GuiTest [metacpan.org]にも
SendMessage(hWnd,Msg,wParam,lParam)WMSetText($hwnd)
の様な関数が用意されていることにも気付けた。それらを利用して試行錯誤でワンライナ書いてみた。
hogehoge | perl -MWin32::GuiTest=:ALL -ne "BEGIN{($hwnd)=grep{GetWindowText($_)!~/cmd\.exe/}FindWindowLike(undef, qq/無題 - メモ帳/);($edit)=grep{GetClassName($_) eq 'Edit'}GetChildWindows($hwnd)}WMSetText($edit,WMGetText($edit) . qq/$_/)"
最初Editの親の方にテキスト送りつけていてウィンドウタイトルを一生懸命書き換えていた。伺か [sakura.vg]にそんな機能あったな。Editにテキストをセットするのも毎行書き換えてしまうので一旦WMGetTextで取り出したものに連結していくようにしたがなんか冗長な感じがなくもない。
EM_SETSEL(初回のみカーソル位置移動)とEM_REPLACESEL(置換と言いつつ未選択なら追記)でやれば追記になるからスッキリすると思う。
最初のコメント [srad.jp]で何でEM_REPLACESEL [microsoft.com](0xC2 [ipentec.com])が提示されてるのかと訝しんだが伏線だったのか。一人でドキュメント読んでたら気付かなかったことを考えると恥ずかしさに耐えて日記書いてよかったのか。
PerlならWin32::GuiTestのWMSetTextをSendMessageに変えれば簡単だろうと思ったらモジュールの仕様上子ウィンドウに対して使えないらしく、結局Win32::APIで呼ぶ羽目になった。
hogehoge | perl -MWin32::GuiTest=:ALL -MWin32::API -ne "BEGIN{($hwnd)=grep{GetWindowText($_)!~/cmd\.exe/}FindWindowLike(undef, qq/無題 - メモ帳/);($edit)=grep{GetClassName($_) eq 'Edit'}GetChildWindows($hwnd)}Win32::API->new('user32','SendMessageA','NNNP','N')->Call($edit,0xc2,0,qq/$_/)"
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy
WM_SETTEXTを送ってはいかが (スコア:0)
クラス名"Edit"のウィンドウをメモ帳の子ウィンドウからFindWindowExで探してWM_SETTEXTかEM_REPLACESELで投げつける。
Windows 11の新しいメモ帳ではクラス名を変えないと動かないけど、そもそも新しいメモ帳はタイトルも「無題 - メモ帳」ではないのでWindows 10専用ということで。
Re:WM_SETTEXTを送ってはいかが (スコア:1)
SendMessageでテキスト送りつけられる [coocan.jp]のを初めて知った。
SendMessageはWM_CLOSEでウィンドウ閉じたり電卓のボタン押させたりする [perl-users.jp]位でしか使うシーンが思い浮かべられなかったし、不必要に使うとシステムが不安定化するみたいな心配があって積極的には触れてこなかった。
いま改めてSendMessageを使う決心をしてみるとWin32::GuiTest [metacpan.org]にも
の様な関数が用意されていることにも気付けた。
それらを利用して試行錯誤でワンライナ書いてみた。
最初Editの親の方にテキスト送りつけていてウィンドウタイトルを一生懸命書き換えていた。
伺か [sakura.vg]にそんな機能あったな。
Editにテキストをセットするのも毎行書き換えてしまうので一旦WMGetTextで取り出したものに連結していくようにしたがなんか冗長な感じがなくもない。
Re: (スコア:0)
EM_SETSEL(初回のみカーソル位置移動)とEM_REPLACESEL(置換と言いつつ未選択なら追記)でやれば追記になるからスッキリすると思う。
Re:WM_SETTEXTを送ってはいかが (スコア:1)
最初のコメント [srad.jp]で何でEM_REPLACESEL [microsoft.com](0xC2 [ipentec.com])が提示されてるのかと訝しんだが伏線だったのか。
一人でドキュメント読んでたら気付かなかったことを考えると恥ずかしさに耐えて日記書いてよかったのか。
PerlならWin32::GuiTestのWMSetTextをSendMessageに変えれば簡単だろうと思ったらモジュールの仕様上子ウィンドウに対して使えないらしく、結局Win32::APIで呼ぶ羽目になった。