Pythonでスクリプトを実行した際に、そのスクリプトファイルのあるパスを取得

import os

# 現在のファイルのフルパスを取得
file_path = os.path.abspath(__file__)

# ファイルパスからディレクトリのパスを取得
directory = os.path.dirname(file_path)

print(directory)

Pythonでスクリプトを実行した際に、そのスクリプトファイルのフルパスを取得するには、__file__ 属性を使用します。この属性は現在実行中のファイルのパスを保持しています。ただし、いくつかの状況(たとえば、インタラクティブシェルや一部の組み込みモジュールでの使用)では、この属性が存在しないことがありますので、その点に注意が必要です。

ファイル名を抜いて、そのスクリプトが存在するフォルダ(ディレクトリ)のパスだけを取得したい場合は、os.path.dirname 関数を使用します。これにより、フルパスからディレクトリ部分のみを抽出することができます。

タスクスケジューラでpython呼び出すとき、DOS窓表示させない方法

タスク スケジューラで Python スクリプトを実行する際に DOS ウィンドウ(コマンド プロンプト ウィンドウ)を表示させない方法にはいくつかのアプローチがあります。以下にその方法を説明します。

1. Pythonw.exe を使用する

Python には pythonw.exe という実行可能ファイルが含まれており、これを使うことでコンソール ウィンドウを表示せずに Python スクリプトを実行できます。

スクリプトのパスを指定する際に、python.exe の代わりに pythonw.exe を使用します。
例: C:\Python39\pythonw.exe C:\path\to\your\script.py

2. バッチファイルを使用してスタートアップを隠す

Python スクリプトを実行するバッチファイルを作成し、そのバッチファイルをタスク スケジューラで実行します。

バッチファイル(.bat)に以下のようなコードを記述します。

@echo off
python C:\path\to\your\script.py

タスク スケジューラでは、このバッチファイルを直接実行します。

3. VBS スクリプトを使う

VBS スクリプトを使用して Python スクリプトを隠れて実行することもできます。

以下のような内容の VBS スクリプト(例: run_hidden.vbs)を作成します。

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run "python C:\path\to\your\script.py", 0
Set WshShell = Nothing

タスク スケジューラでこの VBS スクリプトを実行します。

注意点

pythonw.exe を使用する場合、スクリプト内での標準出力(print 文など)は無視されます。デバッグやログ出力が必要な場合はファイルに記録するなどの工夫が必要です。
セキュリティの観点から、ダウンロードしたスクリプトや信頼できないソースからのスクリプトは慎重に扱う必要があります。
タスク スケジューラの設定で「最上位の特権で実行」を選択すると、管理者権限でスクリプトが実行されます。これはセキュリティ上のリスクを伴うことがあるため、必要な場合にのみ使用してください。
これらの方法を用いれば、Python スクリプトを実行する際に DOS ウィンドウを表示させずに済むでしょう。

inno setupでインストール時に選択肢を出す

MsgBox()が使える
CurStep = ssInstallはインストールプロセスが開始された時。
実際のファイルコピーが開始される前にカスタムアクションを実行することができます。

[Code]
var
  ShouldCreateRestorePoint: Boolean;

function InitializeSetup(): Boolean;
begin
  // ユーザーに復元ポイントの作成を尋ねる
  ShouldCreateRestorePoint := (MsgBox('復元ポイントを作成しますか?', mbConfirmation, MB_YESNO) = IDYES);

  Result := True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  // インストール開始時に復元ポイントを作成する
  if (CurStep = ssInstall) and ShouldCreateRestorePoint then
  begin
    Exec('powershell.exe', '-ExecutionPolicy RemoteSigned -File "{app}\checkpoint.ps1" runas', '', SW_HIDE, ewWaitUntilTerminated, 0);
  end;
end;

Powershellでwin10未満とwin10以降なら64bit/32bitかの判定

# OSのバージョンを取得
$osVersion = (Get-CimInstance -ClassName Win32_OperatingSystem).Version
$osVersionMajor = [int]$osVersion.Split('.')[0]

# OSのアーキテクチャを取得
$osArchitecture = (Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture

if ($osVersionMajor -lt 10) {
 # OSのバージョンがWin 10未満
} else {
 # それ以外の場合は、OSのアーキテクチャに基づいて適切なインストーラーを起動
    if ($osArchitecture -like "*64*") {
        #64bit
    } else {
        #32bit
    }
}

S&P500の時系列データ取得 python

yfinanceとpandasはpip installしてね

import yfinance as yf
import pandas as pd

# S&P 500のデータを取得 (^GSPCはS&P 500のシンボル)
sp500 = yf.Ticker("^GSPC")

# 例として過去5年間の日次データを取得
df = sp500.history(period="5y")

# インデックスの日付形式を 'yyyy/mm/dd' に変更
df.index = df.index.strftime('%Y/%m/%d')

# すべての数値列を小数点以下2桁に丸める
# round() 関数は DataFrame の各数値を指定した精度で丸める
df = df.round(2)

# Shift_JIS形式でCSVファイルに保存
df.to_csv('sp500_5y.csv', encoding='shift_jis', index=True)

# 確認メッセージ
print("S&P 500の時系列データを'yyyy/mm/dd'形式、小数点以下2桁でShift_JIS形式のCSVに保存しました。")

std::sortで指定する比較関数に追加の引数を渡す書き方

bAscendingOrderというBOOL型の変数をcompare関数に渡すには、ラムダ式を使用してこの変数をキャプチャします。そして、その変数をcompare関数内で使用することで、昇順か降順かを判定できるようにします。

以下のコードは、bAscendingOrderをキャプチャして、比較処理に使用する例です。

auto compare = [index, bAscendingOrder](const ItemInfo& a, const ItemInfo& b) {
    if (a.values.size() <= index || b.values.size() <= index) return false;

    // bAscendingOrderに基づいて比較方法を変更
    if (bAscendingOrder) {
        return compareWithPadding(a.values[index], b.values[index]);
    } else {
        return compareWithPadding(b.values[index], a.values[index]);
    }
};

// ソート実行
std::sort(m_vItems.begin(), m_vItems.end(), compare);

MFCでCStaticにicon表示する方法

アイコンリソースの追加: まず、使用したいアイコンをリソースとしてプロジェクトに追加します。リソースビューで新しいアイコンリソースを追加し、それに一意のIDを割り当てます。

CStatic コントロールの準備: ダイアログエディタを使用して、ダイアログに CStatic コントロールを追加します。このコントロールは、SS_ICON スタイルを持つように設定する必要があります。

アイコンのロードと設定: ダイアログの初期化時(例えば、OnInitDialog など)に、アイコンリソースをロードして、CStatic コントロールに設定します。

普通にやると一番小さいアイコンで表示するので、大きいiconで表示させるには以下のようにする。

BOOL CYourDialog::OnInitDialog()
{
    CDialog::OnInitDialog();

    // 大きいアイコンをロードする
    HICON hLargeIcon = (HICON)::LoadImage(
        AfxGetInstanceHandle(),
        MAKEINTRESOURCE(IDI_LARGE_ICON), // 大きいアイコンのリソースID
        IMAGE_ICON,
        64, 64, // ここでアイコンのサイズを指定
        LR_DEFAULTCOLOR
    );

    // CStatic コントロールに大きいアイコンを設定
    CStatic* pStaticIcon = (CStatic*)GetDlgItem(IDC_YOUR_STATIC_ICON);
    if (pStaticIcon != nullptr && hLargeIcon != nullptr)
    {
        pStaticIcon->SetIcon(hLargeIcon);
    }

    return TRUE;
}