ふらっと C#,C♯,C#(初心者用) Part141
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 >>30
使う側目線に立てばね。「大は小を兼ねる」
実装する側に立てば違うでしょ。
Enumerable<T> がなければイテレーターも存在できない。
>>15に書いた↓みたいな奴ね
static IEnumerable<Color> GetWebColors()
{
foreach (PropertyInfo info in typeof(Color).GetProperties(BindingFlags.Public | BindingFlags.Static))
yield return (Color)info.GetValue(null, null);
} LINQみたいな(値の集合ではなく)シーケンスとして扱うライブラリも存在できなくなるね 使う側からしても大は小を兼ねるは無い。
いざメソッドを使ってみたら、NotSupportedException例外が飛んでくるとか嫌でしょ。 IList使ったからって容量が膨大になるわけじゃないでしょ?
謎すぎる 機能の意義の話か
列挙して読み取りするだけの機能なのに
AddやRemove機能ついてるのもおかしいよねって話か IEnumerable 読み取り専用、前方走査可能
ICollection 読み書き可能、集合全般(順序有り集合、順序無し集合など集合のスーパーセット)
IList 読み書き可能、順序有り集合、ランダムアクセス可能(実装上ランダムアクセスを装っているだけのものもあるが)
それぞれ特性が全く異なるので使い分けが必要です そういや、インターフェイスの使い方が全く身につかん
DI等でインターフェイスを使うことが強制される場面を除いては使ったこともない・・・・
どうすればまともなコードを書けるように練習できるん? >>38-39
ありがとう
SOLIDの原則を大雑把に見てきたんで、守れるように努力するよ 異なるクラスなんだけど、List〈インターフェース〉とかにして、foreach回したり出来るのがうれしいってことでおけ? WPF覚えると何か嬉しい事ありますか?フォームとの違いが知りたい。 IEの自動操縦には大分慣れてきました。
そこで今回、
MicrosoftEdgeを自動操縦したいと思います。
この方法を解説している良いブログなどありませんか? >>42
Bindingが強力。
GUIデザインが(良くも悪くも)自由。
高DPI対応が簡単。(ほとんど何もしなくていい) >>44
Ruby で、Selenium WebDriver で、ブラウザを自動操作してるけど、
Chrome, Edge のどちらでも動く >>47
C#になれてるので
できればC#で操作したいです。
C#でEdgeを操作できますか? pythonとかのコードコピーしてもエラーになるからな。
若干メソッドが違う。その辺の勘所あれば大丈夫。 >>50
ほんまやね。
久々にC#のWindowsFormを使ってるんですが
右上の「×」ボタンをなくすにはどうすればよいですか?
自前で「閉じる」ボタンを用意しているので
邪魔なので消し去りたいのです。 ControlBoxをfalseにすれば最大化最小化ボタンとともに消せる
単独で消す方法は特にない サイトに自動ログインしたいのですが
ID/PASSの自動入力、ログインボタンのクリックはできました。
しかし、Googleの認証エリア(私はロボットではありません。 reCAPTCHA)へのチェックを
どうしても入れられません。
iFrameを使っているみたいなのですが、
こういう場合ってIEの自動操縦で操作する事は無理でしょうか?
自動ログインをして手間を省きたいのです。 まぁそういう自動ログインを防ぐための仕組みだしなぁ
googleと勝負するかそのサービス提供者にrecaptcha外してもらうかくらいじゃない? >>56 >>57
ID/PASSを入力してからTABキーを押すとiFrameの中の
チェックボックスにフォーカスが入るみたいです。
もしかして突破できる!!??
C# + Windows APIで
TABキーを送ってチェックボックスのクリックって
どうかけばいいですかね? >>58
キーが送れるなら普通はspaceでチェックボックスonできるけどrecaptchaを突破できるかはしらん >>59
サンクス
TAB+spaceキーのsendで試してみます。
自動ログインするとだいぶん手間がはぶける 自動ログインしてるとロボット判定くらって
パズルやる羽目になるんじゃないかな。 >>61
パズルは目視でやるつもり
さすがに画像認証は無理だわ。 Navigate と Navigate2の違いは何ですか?
サイトによって前者だったり後者だったりします。 https://docs.microsoft.com/en-us/previous-versions/aa752134
IWebBrowser2::Navigate2のことなら
> This method extends the IWebBrowser2::Navigate method to allow for Shell integration;
> however, this method does not make IWebBrowser2::Navigate obsolete.
> The original method can still be used for URL navigations. 「実戦で役立つ C#プログラミングのイディオム/定石&パターン」っていう本が気になるんですが、これってSOLIDの原則みたいなものが解説されてる本なんですか?
https://www.amazon.co.jp/dp/4774187585
本の題名から、デザインパターンの本っぽく見えるものの、見方を変えればただの逆引き系テクニック本っぽくも見えて判別が付きません・・・・
持ってる人いたら教えて! ときどき話題になるけど
初心者用
プログラマーなら大半が無駄 >>67
Microsoftが出してる参考書がいい勉強になると思う
タイトルは忘れたけど黒い表紙のやつ これかあ・・・なんと540ページ・・・・やっぱりこれ級の本が必要なの?
https://www.amazon.co.jp/dp/4822253546
本当はレジュメ10枚とかそんな簡単なのが欲しいんだけどそういう傾向のはないのかな 「自分用に要約したまとめが欲しい」ってC#の自由度だと無理
ネットで公開されているオープンソースのもの読んで勉強したら本買うことも無い >>67
良本だけど、デザパタは解説してないかな。
コーディングの定石を紹介してる感じ。 今更の質問ですが
ブラウザの自動操縦はC#で行ってました。
VBAで自動ログインだったりスクレイピングもできますか???
だとするとC#で抽出してExcelに転記する必要なかったなぁ〜〜〜 >>73
できますよ
ぐぐればたくさん出てきます
自分も最近会社のPCに仕込んでます >>74
ありがとうございます。
VBAでIE操作する事にします。
最初からこっちにしとけばよかったかな〜〜〜〜 便利なツールを作りました。
しかし、悪い奴がそれをコピーして複数端末で使われると困ります。
そこでアドビ製品の様なライセンス制御の仕組みを取り入れたいのですが
何か参考になるサイトはありますか?
不正利用防止対策としてユーザに一意のキーを埋め込んで
アプリの起動時にWEBサーバにその情報を送って突合させようかと思っています。
何かもっとスマートなやり方をご存知の方はいませんか? C#で作っていたらアクチだろうが何だろうがILSPYあたりで逆アセンブルされるから無駄
アクチ部分抜いてビルドしなおせば終わる >>78
うーん、、、やっぱりそうかー
そもそもそーいう事できる人間は
ソフト自体を自分で作れるから
いちいちやるかな〜というパラドックス
100人いたら3人位がそーいう悪い事するかな ドングル使う手もあるよね。
まあそんなケツの穴の小さいこと考えないのが一番簡単ではある ↑はじめてきいたわ
そんなのあったんだ。
うーんまいったなー
一定の割合で犯罪者がいるから悩む web認証プラス重要なメソッドをwebapi化すれば本体リコンパイルされても再現不可能だな。 >>83
どうしてもクライアントじゃないとごにょごにょできない処理なんですよ
犯罪者の違法コピー使用はあきらめるしかないかな ここで聞くような人のものをそんな手間かけて使うのかって話 対応する工数とそれで得られる利益が見合うならやればいい
adobe製品とかならまだしも見合うことなんてまず無いから
不正利用者はセキュリティしっかりしてたらそもそも利用しないから対応しても利益にはならない 簡単な認証かけておけばカジュアルコピーは防げる。
リバースエンジニアリングまでするようなのは少数なはずだから、無視するのが現実的。
ガチでやるならドングル。面倒臭いから正規利用者からも嫌われるけど。 >>86 >>87
うーん、一部の犯罪者はスルーして
カジュアルライセンス制御しまう。
起動時と処理部分でWEBサーバに通信して認証チェックします。
アプリ内に一意な識別キーを入れておいて
AがBにコピーを渡した場合
異なるIPでAとBから同一キーがWEBサーバに送られるからそいつは不正利用
という判断でいこうかと思います。
逆アセンブルするヤツはそもそも自分で作れるだるから
いちいちコピーして使わないかな。 どういうアプリかしらんけどIPみたいコロコロ変わるもんを認証に使って大丈夫なの?
macアドレスとか取ればいいんでね?
偽装は簡単にできるけどそういうのはスルーするんだろうし
とはいえ購入者が別端末使ったりPC買い換えるだけで不正利用扱いされることにはなるが >>89
おお!!いいですね!!
@ユーザ個別の識別キー
Aユーザ利用のMACアドレス
BIPアドレス
カジュアルライセンス制御は、これでうまくいけそうです!
(一部の犯罪者はもうスルーします。どうせ作れるだろうし、、、) というか、毎回認証するのはユーザーにとっても提供側にとっても負担大き過ぎでしょw
ネットつないでないと使えないし
普通にMSのアクティベーションと同様の仕組みでいいでしょ。
プロダクトキー使って一度認証したらライセンス返上するまでずっと有効。
1つのプロダクトキーがいくつかの(通常は一つ)のライセンス枠を持ってる。
枠が全部埋まってると誰かが返上して空きができない限り新たな認証はできない
以前使ってたTIの開発ツールはこんな感じだったよ >>90
IPアドレスは何に使うんだ…。
変わる上に被ることもあるのに。 >>91
なるほど!そーいう手もありますね!
ツール自体はネットがつながっている事前提なので
そこはユーザにとってもサーバにしても心配していません。
>>92
IP偽装も簡単にされてしまうので
確かにあまり意味をなさないですね。 >>93
偽装はともかく、正規ユーザーが不正判定され易いのは問題だよ。 不正対策のために正規利用者が不利益を被ることは極力避けるべき
大抵が開発者の自己満足
ちょっとした手順が必要になるだけでも使い勝手は極端に下がる
ましてや誤って不正利用認定なんかされた日にはもう2度と関わりたくないと思う
さらにwebサーバーの常時保守と認証周りでのトラブルのカスタマーサポートとかまで考えたら本当に必要な工数なのかも疑わしい
そこまでする必要があるレベルのプロダクトならいちいちこんなところで質問なんて投げないだろうしね >>94 >>95
うーん、、、
WEBサーバが確かに攻撃されたらアプリ使えなくなるな〜。
いろいろ考えます。 鯖への攻撃まで考慮しなきゃいけないくらいでかいソフトなの?
どんだけ高価なもん作ってるのか知らんけどパス付きzip程度じゃあかんの? >>97
世の中には悪い奴がいてWEBサーバ攻撃してくるヤツもいるんですよ
zipだと解凍してコピーして横流しされそう。
まぁ、ごく一部でしょうけどね。 >>98
インストール時にだけWeb経由で認証して、認証データはローカルで暗号化して格納しとけば良い。
認証データの暗号化はProtectedDataクラスを使うのが簡単かつ安全。 自分の作ったソフト売りたいって話なら言語は関係ない
パッケージソフトなら不正コピーの心配必要だけどユーザー登録型のライセンス販売なら普通はサポート見込んで買うからそんな心配するのがおかしい >ユーザー登録型のライセンス販売
1か月1000円で販売予定 悪いやつがいるかいないかなんて話してないんだけど伝わらんな
悪いやつに対処するコストと悪いことされたときの被害額が見合うかって話だ
実被害なんてほぼ出ないのに無駄に開発コストかける意味は?
売れて実被害が出てから対策したって十分だよ この知識レベルだとライセンスの前にセキュリティが不安になる 初心者用で質問する人が月額モデルでしかも1000円も取るのか
そもそも月額モデルなら毎月の引き落としどうすんの?
クレカは?全部自前で用意すんの?
せめてvectorとか使ってシェアウェアにしときな
有料ソフトがいかに売れないかを知る良い体験できるよ SDカードって確かこっそりCPRM対応だと思ったけど、
あれをドングル的に流用できたりしないかなとちょっと思ったがどうだろう
CPRMの仕組みを理解してないので的外れかもしれんがw データ整形について質問です。
Dictionary< string, object > に属性名、属性値が格納されています。
例
Key:Value
開催日:2019/3/20
場所:東京
1名前:太郎
1誕生日:2000/1/1
1年齢:19
2名前:花子
2誕生日:1998/2/14
2備考:魚アレルギー
これをDetail型(開催日,場所,名前,誕生日,年齢,備考)の配列かListに変換したいです。
1,2,...がとても不格好で整形しづらいのですが、変更が許されません。
この数字は多くても6個です。また、数字によっては該当の属性名がないものもあります。
なにかよい方法はないでしょうか。 >>108
こんなので出来ない?
検証してないので知らんけど
public class Detail
{
public static Detail RetrieveFromDictionay(Dictionary<string, object> dic, int index)
{
var d = new Detail();
foreach (PropertyInfo info in typeof(Detail).GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
var key = $"{index}{info.Name}";
object obj;
if (dic.TryGetValue(key, out obj))
if (obj.GetType() == info.PropertyType) info.SetValue(d, obj);
}
return d;
}
public DateTime 開催日 { get; set; }
public string 場所 { get; set; }
public string 名前 { get; set; }
public DateTime 誕生日 { get; set; }
public int 年齢 { get; set; }
public string 備考 { get; set; }
} >>108
全keyを走査しながら1個1個処理していけばいいだけに見えるけどそれじゃだめ? UWPで作れば色々面倒なことはMSが面倒見てくれるけどな
あの範囲で問題ないプログラム限定では有るが >>110
できました。ありがとうございます。
勉強になりました。
ちなみにプロパティ名が英語の場合、もう一つ日本語と英語名が対になったDictionaryを定義して、そこから参照する形がいいでしょうか。 Adobe製品の開発言語は、逆アセンブルされない為にC++で開発してるの? C#でArrayListのSortを実行すると
昇順で並び替えられています。
これをDESC(降順)で行うにはどうすればよいですか?
LINQとやらを使った方が確実かな〜。 Sort()した後でReverse()すればいいよ
ArrayListだとSortだけで逆順にするにはIComparer書く必要があってだるいし
というか今時ArrayListなんて使ってないでList<T>使おう >>116
サンクス!そーいうのがあったんだね。
(長らく現場から離れていてC#はコボラーみたいな感じになってます) VBAには、#region #endregion 的な機能はありますか?
コードが長くなってしまって縮小したいです。 VS2017で
前のブックマークへ移動するショートカットコマンドですが
Control + K → P
はもう使えなくなったのでしょうか?
Control + B → P は使えます。
ただ、「K」はVS2010では普通に使えていたはずなのですが、、、 例えばセッターのみが非publicなプロパティーがあるとして、
セッターにアクセスできるスコープからのみ見えるXMLコメントを
書くみたいなことって可能だったっけ? IEを自動起動して、スクレイピングのプログラムを作っています。
スクレイピングに詳しい人教えてください。
ページ内にliが複数あるため、getElementByTagNameでliを指定すると
全部の要素を走査してしまい、時間が結構かかっています。
そこで上位ブロックの divのidが[id_koregahosii]になっている
liの要素を取得するといったコードを書きたいのですが
よい方法はありますでしょうか?
<div id="id_aaa"><li>あいうえお</li></div>
<div id="id_bbb"><li>かきくけこ</li></div>
・・・複数(1000以上)・・・
<div id="id_koregahosii"><li>このliを取得した</li></div>
mshtml_ec = ie.Document.getElementsByTagName("li");
foreach (mshtml.IHTMLElement i_ele in mshtml_ec)
{
//取得したデータを変数にセット
} .Document,getElementByIdしてからそのIHTMLElement2に対してgetElementsByTagNameすればいいんじゃね >>126
ありがとうございます!
試してみます! DataGridViewで特定列を除いて
編集させたくないので以下コードを書きました。
dgv_test.AllowUserToAddRows = false;
dgv_test.AllowUserToDeleteRows = false;
dgv_test.ReadOnly= true;
ただし、その中のCheckBox列だけは
チェックのON/OFFを出来る様にしたいです。
これを実現するにはどういうコードをかけば良いのでしょうか? 地道に全セルをなめてReadOnlyを設定して
実現できました。 助けてくださいm(_)m
DataGridViewの2列目(インデックスは1)がチェックボックスです。
画面上でチェックを入れ「実行」ボタンを押した時に
その行にチェックが入っているかを判定しようとしていますが
うまくできません。。。どう判定したらいいのでしょうか?
エラー
ハンドルされていない例外
System.InvalidCasException:'指定されたキャストは有効ではありません。'
if ((bool)dgv_test[1, i_row].Value == true ) ← ここでエラーが発生
{
Debug.WriteLine("checkあり");
}
else
{
Debug.WriteLine("checkなし");
} ■ このスレッドは過去ログ倉庫に格納されています