2023/03/29

Microsoft Rewards 4回目

 前回は2023/1/26なので2ヶ月と3日。前回3回目にも同じだったのでこれがやり続けると達成出来る期間なのかなぁ。ただ、マイクロソフトEdgeボーナスは毎日最大12ポイント。パソコン検索(90)とモバイル検索(60)もあるから、毎日達成すればもう少し短縮は出来なるのかも。デイリーストリークは234日は。365日も見えてきたかな😄

これ、毎日頑張ると日々のセットで最低30、その日によってボーナスクイズで+20なんですが、確定ではないのでカウント外にするとして、10日毎のデイリーストリークボーナスが150なので15/日として検索ボーナスが12+90+60なので合計207は確定とすると最短26日でアマゾンギフト600円なので23円/日のポイ活ですが、検索ボーナスのEdgeボーナスはあっという間の4回の検索で達成出来ますが、PCとモバイルをフルにもらうのはキツイかも。自分自身は現状がベストなのでこれを続けられる様にやっていこう😜

2023/03/26

DataGridViewでの謎

 徐々にC#でのコーディングも慣れたり、コントロールの使い方もボチボチなんだけど、以前も謎な現象がDataGridViewで逢ったんですが今回もかなり苦労した。

そもそもカラムが何とかだとSortModeはAutomaticらしい。なので、実際普通にカラムヘッダークリックすればソートされ、もう一度クリックすればソートが逆にって感じだったんです。で、その方向が表示されれば良いなって事でアイビー先生に訊ねるとAutomaticにすれば表示される的な回答で、はて、既にAutomaticでも表示されないので色々と試す。

結論として、最初から自動だと表示されてなかったとは思うが、今となっては戻すの面倒なので確認しませんが、ColumnHeaderMouseClickイベントに追加で該当カラムのヘッダーセルのSortGlyphDirectionに現在のSortOrderをセットして解決するべくコーディングしたり、そもそも、表示したいヘッダーに十分な幅が無いので広げたり、で、フォームのデザイン画面から幅いじり出したらその昔に苦労させられたバグに遭遇。いじったカラムも設定値にならないし、他のカラムもなんか変なサイズになったり、ヘッダーの高さまで変わる始末orz まあ、幅や高さをフォームのLoadイベントで全て設定する様に変更しました。で、このグリム何故かヘッダーの高さを33以上にすると表示される。32では表示されない。

private void dvg_ColumnHeaderMouseClick(Object sender, DataGridViewCellMouseEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    DataGridViewColumn sortedColumn = dgv.Columns[e.ColumnIndex];
    sortedColumn.HeaderCell.SortGlyphDirection = dgv.SortOrder;
}

2023/03/11

WebView2のSourceプロパティ

 懸命にアイビー先生(BingのAI検索なのかな)に質問し、WebView2の実装時の再確認してました。まあ、そもそもWebView2コントロールも理解せず、C#の理解もまだまだな状態で進めてますので何が良くて何が間違ってるとかの理解が無いまま、猿真似でコーディングしてますが😅、フォームのデザインから見直しして作り直し。

ここまでポップアップする入出金時の部分をWebView2を2つ用意して、フォームに2つ並べておいたのですが、これを同じ位置に重ねておき、ポップアップ時に2つ目のVisibleをTrueにして終わったらまたFalseにしてフォームのサイズダウンをした。更にどこぞのサイトのSourceプロパティにデザイン時に設定しておくと出来ない事がある的なのが頭の片隅に残ってたので、この対処も含めフォームの根本的な作り直し。で、ついでにだらだと書いてたプロセスも子プロセスにして視認性の向上をしてみた。で、この際にここまでの間違いも発見。どこのサイトを参考に書いたかはもう覚えてないけど、

webView2.CoreWebView2.ExecuteScriptAsync($"...");
await Task.Run(async () =>;
{
    // 読み込み完了まで待機
    if (condition2.Wait(wait_time))
        timeout_err = false;
    else
        timeout_err = true;
});

としてたんですが、"Task.Run(async () =>"ではなく"Task.Run( () =>"にする。更に、ExecuteScrriptAsyncの行にもawaitをつけてみた。つまり、

await webView2.CoreWebView2.ExecuteScriptAsync($"...");
await Task.Run(() =>;
{
    // 読み込み完了まで待機
    if (condition2.Wait(wait_time))
        timeout_err = false;
    else
        timeout_err = true;
});

って感じです。で、子プロセス化する際に

private async Task<bool> Child_Process()
{
    bool timeout_err = false;
    //ここにExecuteScriptAsyncとTask.Run()を
    return timeout_err;
}

って感じに書き直しました。呼び出し側は、

Task<bool> taskChild_Process = Child_Process();
timeout_err = await taskChild_Process;
if (!timeout_err)
{
    // 続行する処理
}

としてみた。

2023/03/05

自分の技量に見合うのはWebView2のみかもorz

 AngleSharpもHttpClientも現在の自分には無理orz 何をどうしたらいいのかとか何が悪いかが見当もつかない状態なので終わりです。で、元鞘?(笑) WebView2は分かり易さは他2つとは別次元で分かり易い。BingのAI導入でグーグル先生よりも頼りになる事も多々ある😉 最悪の事態は放棄して誰かが作ったツールに乗っかるんですが、今はまだそこまでは妥協しないで進めます。

WebView2自体は悪くはないし、分かり易いです。Bing先生に質問すると的確な答えも得られたりします。って事は、まあ、ネット上にノウハウが有るんだと😁 つまり、多くの方が利用して情報提供してるんだという事ですね。

今回得た情報は選択ボックスでの指定方法ですが、

<select id="bet-basic-type" ng-model="vm.oSelectType" ng-options="oType as oType.name for oType in vm.oaType" ng-change="vm.changeType()" class="ng-pristine ng-valid ng-not-empty ng-touched" aria-invalid="false" style=""><option label="単勝" value="object:3215" selected="selected">単勝</option><option label="複勝" value="object:3216">複勝</option><option label="枠連" value="object:3217">枠連</option><option label="馬連" value="object:3218">馬連</option><option label="ワイド" value="object:3219">ワイド</option><option label="馬単" value="object:3220">馬単</option><option label="3連複" value="object:3221">3連複</option><option label="3連単" value="object:3222">3連単</option></select>

みたいに、どの選択肢なら"value='object:????'" 的な事が分かるので

document.querySelector('???').value = 'object:3215';
document.querySelector('???').dispatchEvent(new Event('change'));"

をExecuteScriptAsynciにて指定すれば良い事が分かる。