MFC C++でdouble型の変数から小数点以下が0なら整数の文字列、0でないなら小数点以下を含む文字列を生成する

#include <iostream>
#include <iomanip>
#include <sstream>

std::string doubleToStr(double value) {
	std::ostringstream oss;
	if (fmod(value, 1.0) == 0.0) {
		// 小数点以下が0の場合、整数として出力
		oss << std::fixed << int(value);
	}
	else {
		// 小数点以下がある場合、小数点を含めて出力
		oss << std::fixed << std::setprecision(2) << value;
	}

	return oss.str();
}

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
    }
}