shikaku's blog

AIコーディングメモ 指定URLにある仕様書を読んで答えてもらいたい時

URL指定では呼んでくれないことがほとんどないので、
まずURL先をDLして読み込んでもらうpyコード作ってもらって実行してもらうが吉。

htttps://hogehoge.com の内容をダウンロードするpythonコードを書いてダウンロードしてください。 ダウンロードしたら内容を読み込んで理解してください

Python仮想環境

現在最も推奨されているのは venv の使用です。これはPythonに標準で組み込まれており、最も安定していて信頼性が高いためです。

新しいプロジェクトディレクトリの作成と移動:

mkdir myproject
cd myproject

仮想環境の作成:

python -m venv .venv

仮想環境の有効化:
Windows の場合:

.venv\Scripts\activate

不安定なネットワーク環境をWindowsでエミュレートする方法 (clumsy)

clumsyを使おう

ダウンロード

jagt.github.io

使い方

管理者権限でexeを起動

受信の調子を悪くした環境を趣味レート下かあtらPresetsの欄で「all receiving packets」を選ぶ。

Startボタンでシミュレート開始
Stopで止まる

LagとかDropにチェックいれて、具合のわるい感じをON/OFFする。


Discordに通知するpython関数(WEBHOOKを使う版)

import requests
from typing import Optional

....

# Discord通知用の設定
DISCORD_WEBHOOK_URL = "https://discord.com/api/webhooks/xxxxxx"  # ここにDiscord WebhookのURLを設定してください

# Discord通知用の関数
def send_discord_notification(message: str) -> bool:
    """Discordにメッセージを送信する"""
    try:
        payload = {"content": message}
        response = requests.post(DISCORD_WEBHOOK_URL, json=payload)
        return response.status_code == 204
    except Exception as e:
        print(f"Discord通知エラー: {e}")
        return False

Discord豆知識

Discordのバッジ(未読通知)を表示させるためには、メッセージにメンション(@)を含める必要があります。
例:

send_discord_notification('@everyone testだよ')

Discord WebhookのURLを取得する手順

Discordのサーバー設定を開く

通知を送りたいチャンネルの横にある⚙️(歯車アイコン)をクリック
または、チャンネル名を右クリックして「チャンネルの設定」を選択

「連携サービス」を選択

左側のメニューから「連携サービス」をクリック

Webhookを作成

「Webhook」セクションにある「新しいWebhook」をクリック
Webhookの名前を設定(例:「GMOコイン通知Bot」)
アイコンも必要に応じて変更可能

WebhookのURLをコピー

作成したWebhookの下にある「WebhookのURL」の「コピー」ボタンをクリック

MFCでWin10以上かどうかのチェック関数

BOOL IsWindows10OrGreater()
{
    HMODULE hNtdll = GetModuleHandleW(L"ntdll.dll");
    if (!hNtdll)
        return FALSE;

    typedef void (WINAPI *RtlGetVersionPtr)(PRTL_OSVERSIONINFOW);
    RtlGetVersionPtr RtlGetVersion = (RtlGetVersionPtr)GetProcAddress(hNtdll, "RtlGetVersion");
    
    if (!RtlGetVersion)
        return FALSE;

    RTL_OSVERSIONINFOW osvi = { 0 };
    osvi.dwOSVersionInfoSize = sizeof(osvi);
    RtlGetVersion(&osvi);

    return (osvi.dwMajorVersion >= 10);
}

Edgeとかでタイトル指定でタブ閉じる(MFC)

windowHandleにEdgeのハンドル渡す。
タイトルにHogeHogeがあるタブをキー押して消してる

// タブを閉じる処理
void CloseTab(HWND windowHandle) {
    if (!IsWindow(windowHandle)) {
        return;
    }

    TCHAR title[256] = { 0 };
    if (!GetWindowText(windowHandle, title, 256)) {
        return;
    }

    if (_tcsstr(title, _T("HogeHoge")) != nullptr) {
        TRACE(_T("Closing auth tab: %s\n"), title);

        // Ctrl+Wキーの送信
        INPUT inputs[4] = {};

        // Ctrl キーを押す
        inputs[0].type = INPUT_KEYBOARD;
        inputs[0].ki.wVk = VK_CONTROL;

        // W キーを押す
        inputs[1].type = INPUT_KEYBOARD;
        inputs[1].ki.wVk = 'W';

        // W キーを離す
        inputs[2].type = INPUT_KEYBOARD;
        inputs[2].ki.wVk = 'W';
        inputs[2].ki.dwFlags = KEYEVENTF_KEYUP;

        // Ctrl キーを離す
        inputs[3].type = INPUT_KEYBOARD;
        inputs[3].ki.wVk = VK_CONTROL;
        inputs[3].ki.dwFlags = KEYEVENTF_KEYUP;

        // ウィンドウをフォアグラウンドに
        if (SetForegroundWindow(windowHandle)) {
            Sleep(100); // ウィンドウがフォアグラウンドになるのを待つ
            SendInput(4, inputs, sizeof(INPUT));
        }
        else {
            TRACE(_T("Failed to set foreground window\n"));
        }
    }
    else {
        TRACE(_T("Skip closing tab: %s\n"), title);
    }
}

セクティゴ EV認証で exeに署名する方法(visual studio編)

まずはコマンドライン版を作る

利用可能なキーコンテナを確認します

certutil -csp "SafeNet Smart Card Key Storage Provider" -key -user -v

Cert ハッシュ(sha1)をメモります。

signtool.exeを実行してみます。

signtool.exeの場所は環境に合わせて変えてください

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe" sign ^
  /fd sha256 ^
  /tr http://timestamp.sectigo.com ^
  /td sha256 ^
  /sha1 <メモったハッシュ> ^
  /v /debug /a ^
  "hogehoge.exe"

無事署名出来たらOK

Visual Sudioでビルド後のイベントに設定する

プロパティ>ビルド>イベントに”ビルド後のイベント”の欄があるので以下のように入力。

signtool.exeの場所は環境に合わせて変えてください

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe" sign ^
  /fd sha256 ^
  /tr http://timestamp.sectigo.com ^
  /td sha256 ^
  /sha1 <メモったハッシュ> ^
  /v /debug /a ^
  "$(TargetPath)"

MFCプロジェクトの場合例

echo Starting code signing for MFC application...
echo Target file: "$(OutDir)$(TargetName)$(TargetExt)"
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe" sign ^
/fd sha256 ^
/tr http://timestamp.sectigo.com ^
/td sha256 ^
/sha1 <メモったハッシュ> ^
/v /a ^
"$(OutDir)$(TargetName)$(TargetExt)"
if errorlevel 1 (
	echo Code signing failed with error level %errorlevel%
	exit /b %errorlevel%
)
echo Code signing completed successfully