[過去ログ]
C#, C♯, C#相談室 Part95 (1002レス)
C#, C♯, C#相談室 Part95 http://mevius.5ch.net/test/read.cgi/tech/1508168482/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
823: デフォルトの名無しさん (ワッチョイ 477b-yNzz) [sage] 2020/02/16(日) 11:26:32 ID:j/dbz9ZG0 >>819 まあその「俺のプログラムが一番だ」という姿勢は俺は嫌いではないし、 むしろプログラマは全員持つべきだとも思うけども、 動的結合の価値(意味)が分からないのなら、まずはそこを理解した方がいい。 現在、Clickイベントをエミュレーション出来ないGUIフレームワークなんて、存在してない。 リフレクションも割と一般的になりつつある。(常用するのはどうかとも思うが) だから、使いどころはあるんだよ。 静的結合だけでやれ、みたいなのは言ってしまえばC++がそうだが、それでもRTTIは検討されている。 動的結合の価値は>>816も書いてくれているが、同様に以下でも触れられている。(これらだけでもないが) https://www.atmarkit.co.jp/fdotnet/dotnettips/270performclick/performclick.html 言ってしまえば「実行速度を捨てて保守性を採る」わけであり、これが適切かどうかは状況によるので、 PerformClickやリフレクション等を使うこと自体が間違いだ、というのはさすがに行きすぎてる。 (なお既に言ったが、速度至上主義のC++は割とそういう思想だし、これも間違いでもないが) ただそれはさておき、PowerShellは使ったこと無いから調べてみたが、確かに面白いものではある。 ポイントは、.NETオブジェクトをインスタンス化出来ることと、それらをパイプで流せる点か。 >>815を見る限り、C#等CLRな物ならリフレクションで内部の関数をぶち抜いて、自在に呼べるのか! (名前があやふやだが確か)COMでも似たようなことをしていたMSならあり得るか!とも思ったが、 そうではなくて、自分で.NETクラスをインスタンス化して呼べるだけか? まあそれでもリフレクションを使えば何でもありにはなるし、 .NETを使うだけで本式のバッチスクリプト環境が自動的に提供されてしまう、というのは画期的ではある。 ここら辺はMSの上手いところだとは思う。 http://mevius.5ch.net/test/read.cgi/tech/1508168482/823
824: デフォルトの名無しさん (ワッチョイ 477b-yNzz) [sage] 2020/02/16(日) 11:28:34 ID:j/dbz9ZG0 >>816 俺も「仕様バグ」に近いものだとは思うが、おそらくMSはそう認識してないと思う。 理由は、.NETは比較的「仕様バグ」は少ない環境であり、これは、 ・MSがガッツリ保守している ・バイナリ側がランタイムのバージョンを指定出来るので、改訂しやすい 為、「仕様バグ」を後方互換性の為に残す必然性がほぼ無いからだ。 少なくともobsolete(非推奨)にすることは簡単に出来るのだが、してない。 多分何か理由があるのだろうけど、俺には分からない。 なお後知恵だがDobonには書いてある。 > ただし、コントロールのCanSelectプロパティがfalseの時は、PerformClickメソッドは何もしません。 > 例えば、コントロールのVisibleプロパティがfalseの時、CanSelectプロパティはfalseとなります。 > https://dobon.net/vb/dotnet/control/performclick.html Dobonは、というよりMSDN以外は基本的に見ないことにしていたのだが、妙な嵌り方をした場合は役に立つのかも。 なお他にも > クリックの動作と同じ動きをするため、EnabledプロパティやVisubleプロパティが"False"の場合、 > PerformClickメソッドを呼び出しても何も実行されません。 > https://www.ipentec.com/document/csharp-simulate-click-event http://mevius.5ch.net/test/read.cgi/tech/1508168482/824
827: デフォルトの名無しさん (ワッチョイ 477b-yNzz) [sage] 2020/02/16(日) 13:03:06 ID:j/dbz9ZG0 >>826 このページのコードと用例が糞なのは事実として、エミュレーションが適切な場合もあるってことだよ。 だから現在の全てのGUIフレームワークはエミュレーション出来るようになってるし、 リフレクションも装備しつつある。 MとVを厳密に分離してVはMのラッパ扱いに留めろ、というのは現在の思想としては正しいとして、 2005頃には今ほど言われていなかった、というより、そのころの失敗を経て現在の思想があるわけだから、 このページに対してそれを言ってもしょうがない。 ただそれにしても、現在もまだエミュレーションの価値はあると思うよ。 今回の点に関しての不満なら、俺は MS:「OnClickがprotectedで呼べないからPerformClickを用意しました」 俺:「なら最初からOnClickをpublicにしとけよ」 であって、private至上主義という勘違いオブジェクト指向の面影を.NETもまた引きずっている点についてだね。 http://mevius.5ch.net/test/read.cgi/tech/1508168482/827
829: デフォルトの名無しさん (ワッチョイ 477b-yNzz) [sage] 2020/02/16(日) 14:00:28 ID:j/dbz9ZG0 エミュレーションの有用性が分からないのは根本的に経験が足りない。 何故現在の全てのGUIフレームワークがその機能を持っているのか、その意味をよく考えた方がいい。 そしてそのレベルの奴がコードの善し悪しを議論するのは5年早い。 ただ、このレベルの初心者と話をしても意味がないから俺はやる気無い。 お前らが正しいのなら、MSは数年以内に.NETからエミュレーション機能、 つまりPerformClick/OnClick/リフレクション等を全削除することになるが、 俺はこれはあり得ないとしか思えない。 正否は結果で判断でいい。 ここで低レベルな水掛け論をやる意味はない。 http://mevius.5ch.net/test/read.cgi/tech/1508168482/829
836: デフォルトの名無しさん (ワッチョイ 477b-yNzz) [sage] 2020/02/16(日) 18:32:01 ID:j/dbz9ZG0 >>832 「UIに依存する」のではなく、「UIの代替を提供する」のであって、 UIが変更された場合にはUIと同じく変更されるのが正しいんだよ。この点が違う。 そしてソース変更無しで自動追従させる手法がエミュレーションになる。 「UIに依存する」というのは、UIとは本来関係ない事をUIを通してやってしまっていることにより、 UIが変更された場合に動かなくなって困る(動作が変わってしまう)ことを言ってるだろ。 そうじゃない。今回はそこは動作が変わるのが正しいんだよ。 それはさておき、PowerShellって流行ってるのか? 思想が面白いのは認めるが、これはつまり「.NETアプリをライブラリとして公開する」訳であり、 ガチのプログラマに対してソース公開して、後はお前が頑張れ、と言っているに近い。 勿論これで行ける奴はいいが、実際のところ、使う側はアプリを使いたいのであって、 ソースを読みたいわけでもなく、プログラミングしたいわけでもない。 そしてアプリと完全に密結合してしまうから、そもそも同レベルのプログラマじゃないとソースは読めない。 だから現実的に、アプリ+PowerShellで何とかしろ、と言われても、プログラマでも困ると思うが。 ただし再三言っているが、思想が面白いのは認める。 これにより、全ての.NETアプリはPowerShellライブラリとして動作し、 また、ガチのスクリプト環境が手に入るわけだ。これ自体は(有用性はともかく)面白い。 http://mevius.5ch.net/test/read.cgi/tech/1508168482/836
842: デフォルトの名無しさん (ワッチョイ 477b-yNzz) [sage] 2020/02/16(日) 20:24:37 ID:j/dbz9ZG0 >>838 違う。定石に反しているのは君の方で、つまりはカッコイイソリューションを目指しすぎている。 馬鹿みたいなソリューションの方が、現実的に使いやすいことは多々ある。 多分、ちょっと若すぎて元気がありすぎるのだと思う。 これ自体は悪いことではなく、むしろ上達には必須の性格で、良いことだとは思うが、 世の中のアプリがどうなっているか、もう少し周りを見た方がいい。 GUIの自動化で一番簡単なソリューションは、GUIを記録してしまうことだ。…(A) 俺が昔使ったアプリだと、「ログ画面」にGUI操作と等価のコマンドが一々流れる、というのがあった。 そして自動化したい場合は、このログ画面内の該当部分をコピペしたファイルを読ませるだけ、というものだ。 当然、見れば分かる程度であり、例えばファイルを読み込んだらそのファイルパスがまんま表示されている。 なら、そこを変更するだけで同じ処理を他ファイルに適用出来るよね、というわけだ。 冷静に考えれば分かるが、Unixのshもこれと同様だ。(というより上記方式がshのパクリだが) shもhistoryで出てくる履歴をコピペすればバッチファイルになるようになっている。 そして必要なら該当部分を変数化してループを回せ、ということでしかない。 俺は使ったことないけど、Webブラウザの自動化ツールとして有名なSeleniumも以下見る限り似たようなもんだ。 https://www.valtes.co.jp/qbookplus/509 だから、初段階のスクリプト環境はこの程度でいいし、実際、この程度でも相当有益なんだよ。 そしてそれを手っ取り早く実装する方法がGUIのエミュレーション(PerformClick等)になる。 だから、 > 自社アプリにオートメーションサポートを実装するための基盤ではない これはちょっと意識が高すぎる。(気持ちは分からなくもないが) PowerShellでオートメーション、というのはその先の先の先位で、 初期段階に於いては超オーバースペックでしかない。 そして殆どのアプリでは最終的にも必要としない。 http://mevius.5ch.net/test/read.cgi/tech/1508168482/842
843: デフォルトの名無しさん (ワッチョイ 477b-yNzz) [sage] 2020/02/16(日) 20:25:18 ID:j/dbz9ZG0 例えば上記アプリ(A)方式だと、ループ機能すらないのだから、 アプリ(A)だけで100個のファイルに同じ処理を適用しようとすると困る。 そこでループ機能を、とか言い出すと色々他が必要になって結局PowerShell、という思想もありだが、 そうではなく、Perl等でファイル名だけ変更するスクリプトを作り、 それでループを回して作ったドベタに展開された糞長いバッチファイルをアプリ(A)に流し込む、 というのもありなんだよ。 全ての処理を自アプリでやろうとするから無理が発生する。 unixはこれと逆で、他コマンドで出来ることは自コマンドでするな、で上手く行ってるだろ。 ソースコードについてもそうだが、アプリについてもKISS原則は重要なんだよ。 そして話を戻すと、UIの自動化のド定番は「実際に行われたUIを記録してそのまま流すこと」であり、 「PowerShell等のガチスクリプト環境と連携すること」ではない。 だからクリックエミュレーション等も今のところは今後とも必要な機能でしかない。 が、まあ、PowerShellを推す気持ちも分からなくはない。 おそらくIEだとPowerShellで自動化出来ると推測されるので、 IEが天下取っていたときに自動化の流れが来てたら少しは違ったかもしれん。 http://mevius.5ch.net/test/read.cgi/tech/1508168482/843
853: デフォルトの名無しさん (ワッチョイ 477b-yNzz) [sage] 2020/02/16(日) 23:43:22 ID:j/dbz9ZG0 >>844 だから君は意識が高すぎるんだよ。 誰もAPIを欲してないし、スクリプトを書きたいとも思ってない。 GUIを自動化したいだけ。 そして君だって、1つや2つのファイル名の変更は、普通にエクスプローラで行うだろ。 勿論APIは整備されていて、コマンドプロンプトでren fileA fileB と打つだけなのに。 GUIの方が簡単だから、GUIで済む場合はGUIを選択する、これが普通だ。 勿論100個と言われたら考えるが、10個程度なら普通はそこでAPI調べてDSLとはならない。 理由は、10個程度なら我慢出来る範囲で、DSLを書く方が時間がかかるからだ。 そしてこの原因は、DSLの方言が酷く、オレオレアプリのDSLなんて書いてもすぐには動かないからだ。 だから「今やった操作をする為のスクリプト」が吐かれ、それをコピペすればすぐ動く、というのは優れたAPIではあるんだよ。 ただ、根本的な原因は既に言ったが『方言が酷すぎる』事だから、それをPowerShellで統一する、という野望は、 方向性として合ってるから悪くもない。 でもそれが達成出来てるとは全く思わないけど。 Unixの「テキストファイル/テキスト操作ツール群/ファイル操作」で統一しているシステムが出来が良すぎて、 結局WindowsもWSLやDockerを導入してる有り様だろ。 話を戻すと、PowerShell+APIでPerformClickが不要になる、なんて事にはなってないし、今後ともならないよ。 GUIの方が直感的で簡単だから世の中GUIな訳で、その操作を自動化するのならエミュレーションは一つの正しい解だ。 ただ、PowerShellの野望は面白いと思うし、なったらなったで俺は普通にそっちに乗っても問題ないけど。 そしてPowerShellが本当に面白いのは、.NETアプリならリフレクション使って何とでも出来ることだろ。 プロセスへのアタッチ機能も有るようだし、APIなんて無くてもやりたい放題だ。 これが、そそる、というのは分かる。 http://mevius.5ch.net/test/read.cgi/tech/1508168482/853
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.042s