33 # define WIN32_SKIP_HKEY_PROTECTION
52 if (dir[
a - 1] ==
'\\') {
61 static void register_blend_extension_failed(HKEY root,
const bool background)
68 MessageBox(0,
"Could not register file extension.",
"Blender error", MB_OK | MB_ICONERROR);
70 TerminateProcess(GetCurrentProcess(), 1);
78 BOOL usr_mode =
false;
82 char BlPath[MAX_PATH];
85 const char *ThumbHandlerDLL;
86 char RegCmd[MAX_PATH * 2];
93 printf(
"Registering file extension...");
94 GetModuleFileName(0, BlPath, MAX_PATH);
97 blender_app = strstr(BlPath,
"blender-app.exe");
98 if (blender_app !=
NULL) {
99 strcpy(blender_app,
"blender.exe");
103 lresult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"Software\\Classes", 0, KEY_ALL_ACCESS, &root);
104 if (lresult != ERROR_SUCCESS) {
107 lresult = RegOpenKeyEx(HKEY_CURRENT_USER,
"Software\\Classes", 0, KEY_ALL_ACCESS, &root);
108 if (lresult != ERROR_SUCCESS) {
109 register_blend_extension_failed(0, background);
113 lresult = RegCreateKeyEx(
114 root,
"blendfile", 0,
NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hkey, &dwd);
115 if (lresult == ERROR_SUCCESS) {
116 strcpy(
buffer,
"Blender File");
117 lresult = RegSetValueEx(hkey,
NULL, 0, REG_SZ, (BYTE *)
buffer, strlen(
buffer) + 1);
120 if (lresult != ERROR_SUCCESS) {
121 register_blend_extension_failed(root, background);
124 lresult = RegCreateKeyEx(root,
125 "blendfile\\shell\\open\\command",
128 REG_OPTION_NON_VOLATILE,
133 if (lresult == ERROR_SUCCESS) {
134 sprintf(
buffer,
"\"%s\" \"%%1\"", BlPath);
135 lresult = RegSetValueEx(hkey,
NULL, 0, REG_SZ, (BYTE *)
buffer, strlen(
buffer) + 1);
138 if (lresult != ERROR_SUCCESS) {
139 register_blend_extension_failed(root, background);
142 lresult = RegCreateKeyEx(root,
143 "blendfile\\DefaultIcon",
146 REG_OPTION_NON_VOLATILE,
151 if (lresult == ERROR_SUCCESS) {
152 sprintf(
buffer,
"\"%s\", 1", BlPath);
153 lresult = RegSetValueEx(hkey,
NULL, 0, REG_SZ, (BYTE *)
buffer, strlen(
buffer) + 1);
156 if (lresult != ERROR_SUCCESS) {
157 register_blend_extension_failed(root, background);
160 lresult = RegCreateKeyEx(
161 root,
".blend", 0,
NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hkey, &dwd);
162 if (lresult == ERROR_SUCCESS) {
163 strcpy(
buffer,
"blendfile");
164 lresult = RegSetValueEx(hkey,
NULL, 0, REG_SZ, (BYTE *)
buffer, strlen(
buffer) + 1);
167 if (lresult != ERROR_SUCCESS) {
168 register_blend_extension_failed(root, background);
173 ThumbHandlerDLL =
"BlendThumb.dll";
175 RegCmd, MAX_PATH * 2,
"%s\\regsvr32 /s \"%s\\%s\"", SysDir, InstallDir, ThumbHandlerDLL);
179 printf(
"success (%s)\n", usr_mode ?
"user" :
"system");
182 "File extension registered for %s.",
183 usr_mode ?
"the current user. To register for all users, run as an administrator" :
185 MessageBox(0, MBox,
"Blender", MB_OK | MB_ICONINFORMATION);
187 TerminateProcess(GetCurrentProcess(), 0);
192 char str[MAX_PATH + 1];
197 if (GetWindowsDirectory(
str, MAX_PATH + 1)) {
206 if (GetModuleFileName(
NULL,
str, MAX_PATH + 1)) {
208 "Error! Could not get the Windows Directory - "
209 "Defaulting to Blender installation Dir!\n");
221 "Error! Could not get the Windows Directory - "
222 "Defaulting to first valid drive! Path might be invalid!\n");
223 tmp = GetLogicalDrives();
224 for (i = 2; i < 26; i++) {
225 if ((tmp >> i) & 1) {
230 if (GetFileAttributes(root) != 0xFFFFFFFF) {
237 printf(
"ERROR in 'BLI_windows_get_default_root_dir': can't find a valid drive!\n");
void BLI_split_dir_part(const char *string, char *dir, const size_t dirlen)
Compatibility-like things for windows.
void BLI_windows_get_default_root_dir(char *root_dir)
int BLI_windows_get_executable_dir(char *str)
void BLI_windows_register_blend_extension(const bool background)
Read Guarded memory(de)allocation.
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer