#pragma once typedef struct _MultiString { LPTSTR * Values; // Array of string values size_t Count; // Length of Values size_t TotalLength; // Used by registry helpers. // NOTE: This length includes the NULL // terminator characters of each string DWORD Reserved[2]; // Used internally } MultiString; // Initializes an existing MultiString array, with the given length. // If dwInitLen is 0, no entries are pre-allocated. BOOL MultiString_Init(MultiString *ms, DWORD dwInitLen); // Appends a copy of szNew to the end of the list. // // NOTE: A new string with the same length as szNew is allocated and // stored in ms. This makes future internal freeing easier, but means // the function caller is responsible for freeing the parameter. BOOL MultiString_Append(MultiString *ms, LPCTSTR szNew); // Removes the string at dwIdx, freeing the memory used. BOOL MultiString_Remove(MultiString *ms, DWORD dwIdx); // Replaces the string at dwIdx with szNew. Allocations are performed // similar to MultiString_Append. BOOL MultiString_Replace(MultiString *ms, DWORD dwIdx, LPCTSTR szNew); // Frees all memory in a MultiString structure. void MultiString_Dispose(MultiString *ms); typedef enum _HelperShortcut { HSC_MACOS, // Pretend to be like MacOS (Win+Shift+4) HSC_WIN10, // Pretend to be like Windows (Win+Shift+S) HSC_CUSTOM // Use a custom keyboard shortcut } HlprKbd; typedef struct _GlobalConfig { TCHAR ScreenshotDir[MAX_PATH]; BOOL Upload; BOOL KeepScreenshots; BOOL HelperStartup; HlprKbd HelperShortcut; } Config; typedef enum _AuthMethod { CFG_NOAUTH, // Anonymous HTTP requests CFG_BASICAUTH, // Use HTTP Basic auth CFG_DIGESTAUTH, // Use HTTP Digest auth CFG_TOKENAUTH // Use a custom Authorization header } AuthMethod; typedef struct _UploadConfig { LPTSTR Name; LPTSTR URL; LPTSTR Method; /* * NOTE: If AuthType == CFG_TOKENAUTH, Username is blank/NULL and * Password is the token. */ LPTSTR Username; LPTSTR Password; AuthMethod HTTPAuthMethod; MultiString Headers; MultiString Parameters; } UploadConfig; // Gets the current configuration from the registry. Config *GetConfig(void); // Saves the Config object to the registry. BOOL SaveConfig(Config *cfg); // Frees all memory associated with the Config object. void FreeConfig(Config *cfg);