Frost Moon Project

Src/clipNENNE.cpp-その娘なら今俺のクリップボードで寝てるけど Ver.1.00- - Frost Moon Project アクセスランキング

Home > ソフトウェア > その娘なら今俺のクリップボードで寝てるけど > clipNENNE100.zip > Src > clipNENNE.cpp

//clipNENNE.cpp
//メイン

/*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
    その娘なら今俺のクリップボードで寝てるけど Ver.1.00
    Coded by x@rgs

    This code is released under NYSL Version 0.9982
    See NYSL_withfaq.TXT for further details.

    「その娘なら今俺のクリップボードで寝てるけど」は、
    指定された画像ファイルの内容をクリップボードにコピーするソフトウェアです。
#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*/


#include"Pch.h"
#include"GDIPlusInit.h"

#include<gdiplus.h>

//HBITMAPとして画像を読み込む
HBITMAP LoadHBITMAP(TCHAR* pszFileName){
    Gdiplus::Bitmap* pBitmap=Gdiplus::Bitmap::FromFile(pszFileName);
    if(pBitmap->GetLastStatus()!=Gdiplus::Ok)return NULL;

    HBITMAP hBitmap=NULL;
    pBitmap->GetHBITMAP(0,&hBitmap);
    return hBitmap;
}

//クリップボードにあるテキストのサイズを取得
int GetClipboardSize(){
    if(!IsClipboardFormatAvailable(CF_TEXT))return -1;

    if(!OpenClipboard(NULL))return -1;

#ifdef UNICODE
    HGLOBAL hGlobal=GetClipboardData(CF_UNICODETEXT);
#else
    HGLOBAL hGlobal=GetClipboardData(CF_TEXT);
#endif //UNICODE

    CloseClipboard();
    return GlobalSize(hGlobal);
} 

//HBITMAPをクリップボードにコピー
bool SetClipboardBitmap(HWND hWnd,HBITMAP hBitmap){
    bool bResult=false;

    DIBSECTION ds;
    GetObject(hBitmap,sizeof(ds),&ds);
    //圧縮形式をBI_BITFIELDSからBI_RGBに変更
    ds.dsBmih.biCompression=BI_RGB;
    HDC hDC=GetDC(NULL);
    //DIBをDDBに変換
    HBITMAP hDDB=CreateDIBitmap(hDC,
                                &ds.dsBmih,
                                CBM_INIT,
                                ds.dsBm.bmBits,
                                (BITMAPINFO*)&ds.dsBmih,
                                DIB_RGB_COLORS);
    ReleaseDC(NULL,hDC);

    //If an application calls OpenClipboard with hwnd set to NULL, EmptyClipboard sets the clipboard owner to NULL; this causes SetClipboardData to fail.
    //(http://msdn.microsoft.com/en-us/library/windows/desktop/ms649051%28v=vs.85%29.aspx)
    if(!OpenClipboard(hWnd))return bResult;
    EmptyClipboard();
    if(SetClipboardData(CF_BITMAP,hDDB)){
        bResult=true;
    }
    CloseClipboard();
    return bResult;
}

//クリップボードのテキストを取得
bool GetClipboardText(TCHAR* pszResult){
    bool bResult=false;

    if(!IsClipboardFormatAvailable(CF_TEXT))return bResult;

    if(!OpenClipboard(NULL))return bResult;

#ifdef UNICODE
    HGLOBAL hGlobal=GetClipboardData(CF_UNICODETEXT);
#else
    HGLOBAL hGlobal=GetClipboardData(CF_TEXT);
#endif //UNICODE

    const TCHAR* pszText=(TCHAR*)GlobalLock(hGlobal);

    lstrcpy(pszResult,pszText);
    bResult=true;

    GlobalUnlock(hGlobal);
    CloseClipboard();

    return bResult;
}


//ウインドウプロシージャ
LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

//ウインドウクラスを登録
bool InitApplication(HINSTANCE hInstance,LPCTSTR lpszClassName){
    WNDCLASS wc;

    wc.style        =0;
    wc.lpfnWndProc    =(WNDPROC)WindowProc;
    wc.cbClsExtra    =0;
    wc.cbWndExtra    =0;
    wc.hInstance    =hInstance;
    wc.hIcon        =NULL;
    wc.hCursor        =NULL;
    wc.hbrBackground=NULL;
    wc.lpszMenuName    =NULL;
    wc.lpszClassName=lpszClassName;
    return RegisterClass(&wc);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){
    TCHAR szWindowClass[]=_T("{9DE68620-D6DB-43c7-8529-D7E2968E5E41}");

    //コマンドライン引数を取得
    int iArgc=0;//argc
    LPTSTR* lplpszArgv=NULL;//argv
    lplpszArgv=CommandLineToArgvW(GetCommandLine(),&iArgc);

    if(IsClipboardFormatAvailable(CF_TEXT)&&iArgc==1){
        bool bResult=false;
        TCHAR* pszBuffer=(TCHAR*)malloc(GetClipboardSize()+1);

        if(pszBuffer!=NULL){
            if(GetClipboardText(pszBuffer)){
                lplpszArgv[1]=pszBuffer;
                bResult=true;
            }else{
                MessageBox(NULL,_T("クリップボードからパスを取得できませんでした。"),NULL,MB_OK|MB_ICONERROR);
            }
        }else{
            return 1;
        }
        free(pszBuffer);
        if(!bResult)return -1;
    }else if(iArgc!=2){
        MessageBox(NULL,_T("引数が不正です。"),NULL,MB_OK|MB_ICONERROR);
        return 1;
    }

    InitApplication(hInstance,szWindowClass);

    HWND hWnd=CreateWindow(szWindowClass,
                           NULL,
                           0,
                           0,0,
                           0,0,
                           NULL,
                           NULL,
                           hInstance,
                           NULL);

    if(hWnd==NULL)MessageBox(NULL,_T("ウインドウの作成に失敗しました。"),NULL,MB_OK);

    //GDI+の初期化
    CGDIPlusInit GDIPlusInit;

    HBITMAP hBitmap=LoadHBITMAP(lplpszArgv[1]);
    if(hBitmap==NULL){
        MessageBox(NULL,_T("画像ファイルの読み込みに失敗しました。"),NULL,MB_OK|MB_ICONERROR);
    }else{
        if(!SetClipboardBitmap(hWnd,hBitmap))MessageBox(NULL,_T("クリップボードへのコピーに失敗しました。"),NULL,MB_OK|MB_ICONERROR);
        DeleteObject(hBitmap);
    }

    return 0;
}

Home > ソフトウェア > その娘なら今俺のクリップボードで寝てるけど > clipNENNE100.zip > Src > clipNENNE.cpp