Add files via upload
This commit is contained in:
176
source/par2j/com.cpp
Normal file
176
source/par2j/com.cpp
Normal file
@@ -0,0 +1,176 @@
|
||||
// com.c
|
||||
// Copyright : 2022-01-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
#define _UNICODE
|
||||
#endif
|
||||
#ifndef UNICODE
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
#include <Shobjidl.h>
|
||||
|
||||
extern "C" { // C 言語の関数呼び出しに対応する
|
||||
|
||||
/*
|
||||
Sample code
|
||||
https://docs.microsoft.com/ja-jp/windows/win32/api/shobjidl_core/nf-shobjidl_core-ifileoperation-copyitem
|
||||
|
||||
HRESULT CopyItem(__in PCWSTR pszSrcItem, __in PCWSTR pszDest, PCWSTR pszNewName)
|
||||
{
|
||||
//
|
||||
// Initialize COM as STA.
|
||||
//
|
||||
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
IFileOperation *pfo;
|
||||
|
||||
//
|
||||
// Create the IFileOperation interface
|
||||
//
|
||||
hr = CoCreateInstance(CLSID_FileOperation,
|
||||
NULL,
|
||||
CLSCTX_ALL,
|
||||
IID_PPV_ARGS(&pfo));
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
//
|
||||
// Set the operation flags. Turn off all UI from being shown to the
|
||||
// user during the operation. This includes error, confirmation,
|
||||
// and progress dialogs.
|
||||
//
|
||||
hr = pfo->SetOperationFlags(FOF_NO_UI);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
//
|
||||
// Create an IShellItem from the supplied source path.
|
||||
//
|
||||
IShellItem *psiFrom = NULL;
|
||||
hr = SHCreateItemFromParsingName(pszSrcItem,
|
||||
NULL,
|
||||
IID_PPV_ARGS(&psiFrom));
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
IShellItem *psiTo = NULL;
|
||||
|
||||
if (NULL != pszDest)
|
||||
{
|
||||
//
|
||||
// Create an IShellItem from the supplied
|
||||
// destination path.
|
||||
//
|
||||
hr = SHCreateItemFromParsingName(pszDest,
|
||||
NULL,
|
||||
IID_PPV_ARGS(&psiTo));
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
//
|
||||
// Add the operation
|
||||
//
|
||||
hr = pfo->CopyItem(psiFrom, psiTo, pszNewName, NULL);
|
||||
|
||||
if (NULL != psiTo)
|
||||
{
|
||||
psiTo->Release();
|
||||
}
|
||||
}
|
||||
|
||||
psiFrom->Release();
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
//
|
||||
// Perform the operation to copy the file.
|
||||
//
|
||||
hr = pfo->PerformOperations();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Release the IFileOperation interface.
|
||||
//
|
||||
pfo->Release();
|
||||
}
|
||||
|
||||
CoUninitialize();
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
*/
|
||||
|
||||
HRESULT DeleteItem(__in PCWSTR pszSrcItem)
|
||||
{
|
||||
//
|
||||
// Initialize COM as STA.
|
||||
//
|
||||
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
IFileOperation *pfo;
|
||||
|
||||
//
|
||||
// Create the IFileOperation interface
|
||||
//
|
||||
hr = CoCreateInstance(CLSID_FileOperation,
|
||||
NULL,
|
||||
CLSCTX_ALL,
|
||||
IID_PPV_ARGS(&pfo));
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
//
|
||||
// Set the operation flags. Turn off all UI from being shown to the
|
||||
// user during the operation. This includes error, confirmation,
|
||||
// and progress dialogs.
|
||||
//
|
||||
hr = pfo->SetOperationFlags(FOF_ALLOWUNDO | FOF_NO_UI);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
//
|
||||
// Create an IShellItem from the supplied source path.
|
||||
//
|
||||
IShellItem *psiFrom = NULL;
|
||||
hr = SHCreateItemFromParsingName(pszSrcItem,
|
||||
NULL,
|
||||
IID_PPV_ARGS(&psiFrom));
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
//
|
||||
// Add the operation
|
||||
//
|
||||
hr = pfo->DeleteItem(psiFrom, NULL);
|
||||
|
||||
psiFrom->Release();
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
//
|
||||
// Perform the operation to delete the file.
|
||||
//
|
||||
hr = pfo->PerformOperations();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Release the IFileOperation interface.
|
||||
//
|
||||
pfo->Release();
|
||||
}
|
||||
|
||||
CoUninitialize();
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
} // end of extern "C"
|
||||
|
||||
Reference in New Issue
Block a user