1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #ifndef NULLSOFT_UTILITY_AUTOCHARFN_H
- #define NULLSOFT_UTILITY_AUTOCHARFN_H
- /* Winamp defines this, but this little block lets us use this thing outside of Winamp */
- #ifndef FILENAME_SIZE
- #define FILENAME_SIZE (MAX_PATH*4)
- #define REMOVE_FILENAME_SIZE
- #endif
- #include <windows.h>
- #include <shlwapi.h>
- class AutoCharFn
- {
- public:
- AutoCharFn(const wchar_t *filename)
- {
- out[0]=0;
- if (!filename)
- return;
- if (PathIsURLW(filename))
- {
- WideCharToMultiByte(CP_ACP, 0, filename, -1, out, FILENAME_SIZE, NULL, NULL);
- return ;
- }
- BOOL unconvertable = FALSE;
- WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, filename, -1, out, FILENAME_SIZE, NULL, &unconvertable);
- if (unconvertable)
- {
- wchar_t temp[MAX_PATH];
- if (GetShortPathNameW(filename, temp, MAX_PATH))
- WideCharToMultiByte(CP_ACP, 0, temp, -1, out, FILENAME_SIZE, NULL, NULL);
-
- }
- }
- operator char *() { return out; }
- private:
- char out[FILENAME_SIZE];
- };
- #ifdef REMOVE_FILENAME_SIZE
- #undef FILENAME_SIZE
- #endif
- #endif
|