Skip to content

Instantly share code, notes, and snippets.

View Tocchann's full-sized avatar

Toshiyuki Takahagi Tocchann

View GitHub Profile
@Tocchann
Tocchann / IsoImage.cs
Created March 11, 2024 07:59
IMAPI2を使ってISOイメージを保存
using System;
public class IsoImage
{
// 固定値(自動判定)
private const int mediaBlockSize = 2048;
private const long maxSizeDVD = 4488L * 512 * mediaBlockSize;
private const long maxSizeCD = 650L * 512 * mediaBlockSize;
public string SourceImageFolder { get; set; }
@Tocchann
Tocchann / NativeMethods.GetSafeOwnerWindow.cs
Last active September 16, 2023 08:24
WPF で Windows API のオーナーウィンドウとして渡すハンドルを取得する
using System;
using System.Runtime.InteropServices;
using System.Windows;
namespace Tocchann.Interop;
public static class NativeMethods
{
public static IntPtr GetSafeOwnerWindow( Window? ownerWindow )
{
@Tocchann
Tocchann / Utilities.GetOwnerWindow.cs
Created September 16, 2023 08:10
WPF でポップアップに渡すべきオーナーウィンドウにできる System.Windows.Window を取得する
using System.Windows;
namespace Tocchann;
public static class Utilities
{
public static Window? GetOwnerWindow()
{
var window = default(Window);
foreach( Window search in Application.Current.Windows )
{
@Tocchann
Tocchann / MyApp.cpp
Created September 12, 2023 16:48
AfxMessageBox をこっそり TaskDialog にして、HighDPI 対応するおまじない実装
int CMyApp::DoMessageBox( LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt )
{
// アイコンを整理しておく
if( (nType & MB_ICONMASK) == 0 )
{
switch( nType & MB_TYPEMASK )
{
case MB_OK:
case MB_OKCANCEL:
nType |= MB_ICONEXCLAMATION;
@Tocchann
Tocchann / RunMessageLoop_MsgWaitForMultipleObjects.cpp
Last active August 3, 2022 13:21
MsgWaitForMultipleObjects の例
#include <map>
#include <functional>
// waitActions に登録する例は載せていない(通常は、排他制御して追加処理するのが良い)
std::map<HANDLE, std::function<bool(bool,bool&)>> waitActions;
DWORD APIENTRY SetupWaitHandles( HANDLE* waitHandles, DWORD capacityCount )
{
DWORD waitCount = 0;
if( capacityCount > 0 )
{
@Tocchann
Tocchann / RelayCommand.cs
Created March 31, 2022 11:23
ICommand のミニマムベースクラス
using System;
using System.Diagnostics;
using System.Windows.Input;
namespace SimpleMVVM
{
public class RelayCommand : ICommand
{
private readonly Action<object> execute;
private readonly Predicate<object> canExecute;
@Tocchann
Tocchann / StdinPipe.ps1
Created February 6, 2022 08:39
PowerShellスクリプトでパイプ処理
# StdinPipe.ps1 [-InputObject] <string[]> [-ReqireParam] <string> [[-OptionalParam] <string>] [<CommonParameters>]
[CmdletBinding()]
param (
[parameter(Mandatory=$true,ValueFromPipeline=$true,HelpMessage="標準入力か引数で受け取るデータ")]
[string[]]$InputObject,
[parameter(Mandatory=$true,ValueFromPipeline=$false,HelpMessage="必須パラメータ")]
[string]$ReqireParam,
[parameter(Mandatory=$false,ValueFromPipeline=$false,HelpMessage="オプションパラメータ")]
[string]$OptionalParam
)
@Tocchann
Tocchann / ParallelRendering.cs
Last active November 23, 2021 15:31
レンダリング丸ごと並列化
// 排他制御せずにレンダリングしてもらう(メモリイータータイプ)
private ImageSource CreateThumbnail( stirng filePath, Cube.Pdf.Page page )
{
using( var renderer = new DocumentRenderer( filePath ) )
using( var image = renderer.Render( page, page.Size ) )
using( var stream = new MemoryStream() )
{
image.Save( stream, ImageFormat.png );
stream.Seek( 0, SeekOrigin.Begin );
return BitmapFrame( stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad );
class ClassA
{
public:
static bool IsValidHandle( HANDLE handle )
{
//return handle != INVALID_HANDLE_VALUE;
return handle != INVALID_HANDLE_VALUE && handle != nullptr;
//return handle != nullptr;
}
// ハンドルの複製をどうするかは何のハンドルかに依存するのでここでは言及しない
@Tocchann
Tocchann / LoadPngFromResouce
Created September 27, 2021 15:18
リソースに格納したPNGをGDI+でロードする(エラーチェックなし版)
// リソースファイル上はこんな感じで格納
// #define IDB_PNG 12345
// IDB_PNG PNG "res\\png.png"
Gdiplus::Bitmap* LoadPngFromResource( HINSTANCE hInst, UINT resID )
{
HRSRC hResInfo = FindResource( hInst, MAKEINTRESOURCE(resID), _T("PNG") );
HGLOBAL hResImage = LoadResource( hModule, hResInfo );
DWORD size = SizeofResource( hModule, hResInfo );
const BYTE* srcImage = static_cast<const BYTE*>( LockResource( hResImage ) );
IStreamPtr ptrStream( SHCreateMemStream( srcImage, size ) );