#include <stdio.h>
#include "fileDialogWithSharedMemory.h"
using namespace std;
int main(int argc, char *argv[]) {
HANDLE hMapFile;
fileDialogData *pFddShared;
BOOL hasResult;
OPENFILENAMEW ofn;
hMapFile = OpenFileMapping(
FILE_MAP_ALL_ACCESS,
FALSE,
argv[1]);
if (hMapFile == NULL) {
printf("Could not open file mapping object (%d).\n", (int)GetLastError());
return 1;
}
pFddShared = (fileDialogData*)MapViewOfFile(
hMapFile,
FILE_MAP_ALL_ACCESS,
0,
0,
sizeof(fileDialogData));
if (pFddShared == NULL) {
printf("Could not map view of file (%d).\n", (int)GetLastError());
CloseHandle(hMapFile);
return 1;
}
pFddShared->fileDialogThreadId = GetCurrentThreadId();
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAMEW);
ofn.lpstrFile = pFddShared->filename;
ofn.lpstrInitialDir = pFddShared->directory;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrTitle = pFddShared->title;
ofn.lpstrFilter = pFddShared->filter;
ofn.nFilterIndex = pFddShared->filterIndex;
ofn.hwndOwner = (HWND)pFddShared->owningWindow;
if (pFddShared->trueForSave) {
if (pFddShared->trueForPromptOverwrite) {
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST ;
} else {
ofn.Flags = OFN_PATHMUSTEXIST;
}
hasResult = GetSaveFileNameW(&ofn);
} else {
if (pFddShared->trueForMultiSelect) {
ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT;
} else {
ofn.Flags = OFN_FILEMUSTEXIST;
}
hasResult = GetOpenFileNameW(&ofn);
}
if (hasResult) {
pFddShared->filterIndex = ofn.nFilterIndex;
} else {
ZeroMemory(&pFddShared->filename, sizeof(pFddShared->filename));
}
pFddShared->fileDialogDidReturn = TRUE;
UnmapViewOfFile(pFddShared);
CloseHandle(hMapFile);
return 0;
}