プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

クリップボードに書式列を出力 - funcClipPutf()

2010年02月09日 07時33分00秒 | 便利ライブラリ関数

クリップボードに書式指定の文字列を出力するには次の手順で行います。(戻る)

  1. va_list型で argp を宣言
  2. va_start()マクロで可変引数の lpFormat をセット
  3. wvsprintf()関数で書式指定の文字列を作成
  4. va_end()マクロで可変引数の終了
  5. funcClipWrite()関数でクリップボードに文字列を出力

プロトタイプ宣言

void va_start(
    va_list argp,           // 可変リストへのポインタ
    prev_param              // 可変引数の1つ前の引数名
);
void va_end(
    va_list argp            // 可変リストへのポインタ
);
int wvsprintf(
    LPTSTR      lpBuff,     // 出力バッファ
    LPCTSTR     lpFormat,   // 書式制御文字列
    va_list     argp        // 書式制御引数の可変リスト
);

サンプル

// クリップボードに書式列を出力
extern BOOL funcClipPutf( HWND hWnd, LPCTSTR lpFormat, ... )
{
    TCHAR       szBuff[ 2048 ];
    DWORD       dwSize;
    va_list     argp;
    
    va_start( argp, lpFormat );
    dwSize = wvsprintf( szBuff, lpFormat, argp );
    va_end( argp );
    return funcClipWrite( hWnd, szBuff, dwSize );
}

// 使用例
int main( void )
{
    static LPCTSTR WeekTable[] = {
        TEXT("日"),
        TEXT("月"),
        TEXT("火"),
        TEXT("水"),
        TEXT("木"),
        TEXT("金"),
        TEXT("土"),
    };
    HWND        hWnd = GetDesktopWindow();
    SYSTEMTIME  st;
    
    GetLocalTime( &st );
    funcClipPutf( hWnd, TEXT("%04u/%02u/%02u (%s) %02u:%02u.%02u"),
        st.wYear, st.wMonth, st.wDay,
        WeekTable[ st.wDayOfWeek ],
        st.wHour, st.wMinute, st.wSecond );
    return 0;
}
  • hWnd にウインドウのハンドルを指定します。
  • hWnd に NULL を指定することも出来ます。
  • printf()関数と同じ可変引数をとるため便利に文字列をクリップボードに出力できます。
  • 現在の時刻をクリップボードにコピーする簡単なツール作成時などに利用して下さい。

その他

  • funcClipPutf 関数は「マルチバイト文字セット」、「Unicode文字セット」の両方に対応しています。
  • 使用例のコンパイル時は printf 使用のため「マルチバイト文字セット」で行って下さい。
  • なお、使用例ではクリップボードに現在の時刻を[西暦/月/日(曜日)時:分:秒]形式でコピーします。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« クリップボードに文字列を出... | トップ | 文字列バッファに NULL 文字... »
最新の画像もっと見る

コメントを投稿

便利ライブラリ関数」カテゴリの最新記事