/* リンク あらかじめ、CoInitialize(NULL); を実行しておくこと */ BOOL SymLink(LPCSTR src, LPSTR dest, LPCSTR arg) { IShellLink *shellLink; IPersistFile *persistFile; Wstr wsrc(src), wdest(dest), warg(arg); BOOL ret = FALSE; char buf[MAX_PATH_U8]; if (SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (void **)&shellLink))) { shellLink->SetPath((char *)wsrc.Buf()); shellLink->SetArguments((char *)warg.Buf()); GetParentDirU8(src, buf); shellLink->SetWorkingDirectory((char *)U8toWs(buf)); if (SUCCEEDED(shellLink->QueryInterface(IID_IPersistFile, (void **)&persistFile))) { if (SUCCEEDED(persistFile->Save(wdest.s(), TRUE))) { ret = TRUE; GetParentDirU8(WtoU8(wdest.s()), buf); ::SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH|SHCNF_FLUSH, U8toAs(buf), NULL); } persistFile->Release(); } shellLink->Release(); } return ret; }
/* リンクファイル削除 */ BOOL DeleteLink(LPCSTR path) { char dir[MAX_PATH_U8]; if (!DeleteFileU8(path)) return FALSE; GetParentDirU8(path, dir); ::SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH|SHCNF_FLUSH, U8toAs(dir), NULL); return TRUE; }
BOOL LogMng::Write(LPCSTR str) { BOOL ret = FALSE; if (!cfg->LogCheck || *logFile == 0) return TRUE; HANDLE fh; DWORD size; if ((fh = CreateFileWithDirU8(logFile, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)) != INVALID_HANDLE_VALUE) { ::SetFilePointer(fh, 0, 0, FILE_END); str = cfg->LogUTF8 ? str : U8toAs(str); ret = ::WriteFile(fh, str, (DWORD)strlen(str), &size, NULL); ::CloseHandle(fh); } return ret; }