Changeset 551 for trunk/dll/shadow.c
- Timestamp:
- Feb 28, 2007, 2:33:51 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/shadow.c
r334 r551 31 31 #pragma alloc_text(SHADOW,CreateProgramObject,CreateDataObject,CreateFolderObject,CreateShadowObject) 32 32 33 HOBJECT CreateProgramObject (CHAR *objtitle,CHAR *location,CHAR *path,34 CHAR *cnr)35 { 36 HOBJECT obj = (HOBJECT) 0;37 CHAR 38 39 if (!cnr)33 HOBJECT CreateProgramObject(CHAR * objtitle, CHAR * location, CHAR * path, 34 CHAR * cnr) 35 { 36 HOBJECT obj = (HOBJECT) 0; 37 CHAR *s; 38 39 if (!cnr) 40 40 return obj; 41 41 obj = WinCreateObject(WPProgram, 42 objtitle, 43 "NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO", 44 (location) ? location : cnr, 45 CO_FAILIFEXISTS); 46 if(obj) { 47 s = xmalloc(5192,pszSrcFile,__LINE__); 42 objtitle, 43 "NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO", 44 (location) ? location : cnr, CO_FAILIFEXISTS); 45 if (obj) { 46 s = xmalloc(5192, pszSrcFile, __LINE__); 48 47 if (s) { 49 48 sprintf(s, 50 "EXENAME=%s%s%s%s%s;PARAMETERS=%%*;OBJECTID=<FM2_%s>", 51 (path) ? path : "", 52 (path) ? "\\" : "", 53 objtitle, 54 (path) ? ";STARTUPDIR=" : "", 55 (path) ? path : "",objtitle); 56 WinSetObjectData(obj, 57 s); 49 "EXENAME=%s%s%s%s%s;PARAMETERS=%%*;OBJECTID=<FM2_%s>", 50 (path) ? path : "", 51 (path) ? "\\" : "", 52 objtitle, 53 (path) ? ";STARTUPDIR=" : "", (path) ? path : "", objtitle); 54 WinSetObjectData(obj, s); 58 55 free(s); 59 56 } … … 62 59 } 63 60 64 65 HOBJECT CreateDataObject (CHAR *objtitle,CHAR *location,CHAR *path, 66 CHAR *cnr) { 67 68 HOBJECT obj = (HOBJECT)0; 69 CHAR s[1050],s2[1050],*p, 70 *type[] = {"WPDataFile","WPIcon","WPBitmap"}; 71 72 if(!cnr) 73 return obj; 74 sprintf(s, 75 "%s%s%s", 76 (path) ? path : "", 77 (path) ? "\\" : "", 78 objtitle); 79 p = strrchr(objtitle,'.'); 80 if(p) { 81 if(!stricmp(p,".ICO")) 61 HOBJECT CreateDataObject(CHAR * objtitle, CHAR * location, CHAR * path, 62 CHAR * cnr) 63 { 64 65 HOBJECT obj = (HOBJECT) 0; 66 CHAR s[1050], s2[1050], *p, 67 *type[] = { "WPDataFile", "WPIcon", "WPBitmap" }; 68 69 if (!cnr) 70 return obj; 71 sprintf(s, "%s%s%s", (path) ? path : "", (path) ? "\\" : "", objtitle); 72 p = strrchr(objtitle, '.'); 73 if (p) { 74 if (!stricmp(p, ".ICO")) 82 75 p = type[1]; 83 else if (!stricmp(p,".BMP"))76 else if (!stricmp(p, ".BMP")) 84 77 p = type[2]; 85 78 else … … 89 82 p = type[0]; 90 83 obj = WinCreateObject(p, 91 s, 92 "NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO", 93 (location) ? location : cnr, 94 CO_FAILIFEXISTS); 95 if(obj) { 84 s, 85 "NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO", 86 (location) ? location : cnr, CO_FAILIFEXISTS); 87 if (obj) { 96 88 sprintf(s2, 97 "%s%s%sOBJECTID=<FM2_%s>", 98 objtitle, 99 (p == type[1]) ? "ICONFILE=" : "", 100 (p == type[1]) ? s : "", 101 (p == type[1]) ? ";" : "", 102 objtitle); 103 WinSetObjectData(obj, 104 s2); 105 } 106 return obj; 107 } 108 109 110 HOBJECT CreateFolderObject (CHAR *objtitle,CHAR *cnr) 111 { 112 HOBJECT obj = (HOBJECT)0; 113 CHAR s[1050]; 114 115 if(!cnr) 89 "%s%s%sOBJECTID=<FM2_%s>", 90 objtitle, 91 (p == type[1]) ? "ICONFILE=" : "", 92 (p == type[1]) ? s : "", (p == type[1]) ? ";" : "", objtitle); 93 WinSetObjectData(obj, s2); 94 } 95 return obj; 96 } 97 98 HOBJECT CreateFolderObject(CHAR * objtitle, CHAR * cnr) 99 { 100 HOBJECT obj = (HOBJECT) 0; 101 CHAR s[1050]; 102 103 if (!cnr) 116 104 return obj; 117 105 obj = WinCreateObject("WPFolder", 118 objtitle, 119 "NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO", 120 cnr, 121 CO_FAILIFEXISTS); 122 if(obj) { 123 sprintf(s, 124 "OBJECTID=<FM2_%s>", 125 objtitle); 126 WinSetObjectData(obj, 127 s); 128 } 129 return obj; 130 } 131 132 133 HOBJECT CreateShadowObject (CHAR *objtitle,CHAR *location,CHAR *path, 134 BOOL executable,CHAR *cnr) { 135 136 HOBJECT obj = (HOBJECT)0; 137 CHAR *s; 138 139 if(!cnr) 140 return obj; 141 s = xmalloc(5192,pszSrcFile,__LINE__); 106 objtitle, 107 "NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO", 108 cnr, CO_FAILIFEXISTS); 109 if (obj) { 110 sprintf(s, "OBJECTID=<FM2_%s>", objtitle); 111 WinSetObjectData(obj, s); 112 } 113 return obj; 114 } 115 116 HOBJECT CreateShadowObject(CHAR * objtitle, CHAR * location, CHAR * path, 117 BOOL executable, CHAR * cnr) 118 { 119 120 HOBJECT obj = (HOBJECT) 0; 121 CHAR *s; 122 123 if (!cnr) 124 return obj; 125 s = xmalloc(5192, pszSrcFile, __LINE__); 142 126 if (s) { 143 127 sprintf(s, 144 "SHADOWID=%s%s%s", 145 (path) ? path : "", 146 (path) ? "\\" : "", 147 objtitle); 148 { /* find an icon for it if possible */ 149 CHAR *p,temp[CCHMAXPATH + 1]; 128 "SHADOWID=%s%s%s", 129 (path) ? path : "", (path) ? "\\" : "", objtitle); 130 { /* find an icon for it if possible */ 131 CHAR *p, temp[CCHMAXPATH + 1]; 150 132 151 133 sprintf(temp, 152 "%s%s%s", 153 (path) ? path : "", 154 (path) ? "\\" : "", 155 objtitle); 156 p = strrchr(temp,'.'); 157 if(p) { 158 *p = 0; 159 strcat(p,".ICO"); 160 if(IsFile(temp) == 1) 161 sprintf(&s[strlen(s)], 162 ";ICONFILE=%s", 163 temp); 164 } 165 } 166 if(executable) 134 "%s%s%s", (path) ? path : "", (path) ? "\\" : "", objtitle); 135 p = strrchr(temp, '.'); 136 if (p) { 137 *p = 0; 138 strcat(p, ".ICO"); 139 if (IsFile(temp) == 1) 140 sprintf(&s[strlen(s)], ";ICONFILE=%s", temp); 141 } 142 } 143 if (executable) 167 144 sprintf(&s[strlen(s)], 168 ";EXENAME=%s%s%s%s%s;PARAMETERS=%%*", 169 (path) ? path : "", 170 (path) ? "\\" : "", 171 objtitle, 172 (path) ? ";STARTUPDIR=" : "", 173 (path) ? path : ""); 174 strcat(s, 175 ";NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO"); 176 sprintf(&s[strlen(s)], 177 ";OBJECTID=<FM2_%s>", 178 objtitle); 145 ";EXENAME=%s%s%s%s%s;PARAMETERS=%%*", 146 (path) ? path : "", 147 (path) ? "\\" : "", 148 objtitle, (path) ? ";STARTUPDIR=" : "", (path) ? path : ""); 149 strcat(s, ";NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO"); 150 sprintf(&s[strlen(s)], ";OBJECTID=<FM2_%s>", objtitle); 179 151 obj = WinCreateObject("WPShadow", 180 objtitle, 181 s, 182 (location) ? location : cnr, 183 CO_FAILIFEXISTS); 152 objtitle, 153 s, (location) ? location : cnr, CO_FAILIFEXISTS); 184 154 free(s); 185 155 } … … 189 159 #pragma alloc_text(SHADOW2,MakeShadows,OpenObject) 190 160 191 VOID MakeShadows (HWND hwnd,CHAR **list,ULONG Shadows,CHAR *cnr, CHAR *foldername) 192 { 193 INT x = 0; 194 CHAR szBuff[CCHMAXPATH + 8]; 195 HOBJECT obj = (HOBJECT)0; 196 FILESTATUS3 fsa; 161 VOID MakeShadows(HWND hwnd, CHAR ** list, ULONG Shadows, CHAR * cnr, 162 CHAR * foldername) 163 { 164 INT x = 0; 165 CHAR szBuff[CCHMAXPATH + 8]; 166 HOBJECT obj = (HOBJECT) 0; 167 FILESTATUS3 fsa; 197 168 198 169 *szBuff = 0; 199 if (foldername)200 strcpy(szBuff, foldername);201 if (list) {202 if ((list[0] && list[1]) || Shadows > 1) {170 if (foldername) 171 strcpy(szBuff, foldername); 172 if (list) { 173 if ((list[0] && list[1]) || Shadows > 1) { 203 174 204 175 STRINGINPARMS sip; … … 209 180 sip.inputlen = CCHMAXPATHCOMP; 210 181 sip.title = GetPString(IDS_MAKESHADOWTITLETEXT); 211 if(WinDlgBox(HWND_DESKTOP, 212 hwnd, 213 InputDlgProc, 214 FM3ModHandle, 215 STR_FRAME, 216 &sip)) { 217 if(*szBuff) { 218 obj = CreateFolderObject(szBuff,cnr); 219 if(!obj) { 220 saymsg(MB_CANCEL | MB_ICONEXCLAMATION, 221 hwnd, 222 GetPString(IDS_ERRORTEXT), 223 GetPString(IDS_MAKESHADOWCREATEFAILEDTEXT), 224 szBuff); 225 return; 226 } 227 } 182 if (WinDlgBox(HWND_DESKTOP, 183 hwnd, InputDlgProc, FM3ModHandle, STR_FRAME, &sip)) { 184 if (*szBuff) { 185 obj = CreateFolderObject(szBuff, cnr); 186 if (!obj) { 187 saymsg(MB_CANCEL | MB_ICONEXCLAMATION, 188 hwnd, 189 GetPString(IDS_ERRORTEXT), 190 GetPString(IDS_MAKESHADOWCREATEFAILEDTEXT), szBuff); 191 return; 192 } 193 } 228 194 } 229 195 else 230 return; 231 } 232 while(list[x]) { 233 if(!DosQueryPathInfo(list[x], 234 FIL_STANDARD,&fsa, 235 (ULONG)sizeof(FILESTATUS3))) { 236 237 ULONG apt; 238 CHAR *p,*pp,szDir[CCHMAXPATH + 1],szBuffer[CCHMAXPATH + 1]; 239 240 if(DosQAppType(list[x], 241 &apt)) 242 apt = 0; 243 p = strrchr(list[x],'.'); 244 if(p) { 245 if(!stricmp(p,".BAT") || 246 !stricmp(p,".CMD")) 247 apt |= FAPPTYP_BOUND; 248 } 249 *szBuffer = 0; 250 p = strrchr(list[x],'\\'); 251 if(!p) 252 p = strrchr(list[x],':'); 253 if(p) 254 p++; 255 else 256 p = list[x]; 257 strcpy(szDir, 258 list[x]); 259 pp = strrchr(szDir,'\\'); 260 if(!pp) { 261 pp = strrchr(szDir,':'); 262 if(pp) { 263 pp++; 264 *pp = '\\'; 265 pp++; 266 } 267 } 268 if(pp) 269 *pp = 0; 270 else 271 *szDir = 0; 272 if(obj && *szBuff) 273 sprintf(szBuffer, 274 "<FM2_%s>", 275 szBuff); 276 else 277 *szBuffer = 0; 278 if((fsa.attrFile & FILE_DIRECTORY) || 279 Shadows) 280 CreateShadowObject(p, 281 (obj) ? szBuffer : NULL, 282 szDir, 283 0, 284 cnr); 285 else if(!(apt & (FAPPTYP_NOTWINDOWCOMPAT | 286 FAPPTYP_WINDOWCOMPAT | 287 FAPPTYP_WINDOWAPI | 288 FAPPTYP_BOUND | FAPPTYP_DOS | 289 FAPPTYP_WINDOWSREAL | 290 FAPPTYP_WINDOWSPROT | 291 0x1000))) /* not an executable app? */ 292 CreateDataObject(p, 293 (obj) ? szBuffer : NULL, 294 szDir, 295 cnr); 296 else 297 CreateProgramObject(p, 298 (obj) ? szBuffer : NULL, 299 szDir, 300 cnr); 196 return; 197 } 198 while (list[x]) { 199 if (!DosQueryPathInfo(list[x], 200 FIL_STANDARD, &fsa, 201 (ULONG) sizeof(FILESTATUS3))) { 202 203 ULONG apt; 204 CHAR *p, *pp, szDir[CCHMAXPATH + 1], szBuffer[CCHMAXPATH + 1]; 205 206 if (DosQAppType(list[x], &apt)) 207 apt = 0; 208 p = strrchr(list[x], '.'); 209 if (p) { 210 if (!stricmp(p, ".BAT") || !stricmp(p, ".CMD")) 211 apt |= FAPPTYP_BOUND; 212 } 213 *szBuffer = 0; 214 p = strrchr(list[x], '\\'); 215 if (!p) 216 p = strrchr(list[x], ':'); 217 if (p) 218 p++; 219 else 220 p = list[x]; 221 strcpy(szDir, list[x]); 222 pp = strrchr(szDir, '\\'); 223 if (!pp) { 224 pp = strrchr(szDir, ':'); 225 if (pp) { 226 pp++; 227 *pp = '\\'; 228 pp++; 229 } 230 } 231 if (pp) 232 *pp = 0; 233 else 234 *szDir = 0; 235 if (obj && *szBuff) 236 sprintf(szBuffer, "<FM2_%s>", szBuff); 237 else 238 *szBuffer = 0; 239 if ((fsa.attrFile & FILE_DIRECTORY) || Shadows) 240 CreateShadowObject(p, (obj) ? szBuffer : NULL, szDir, 0, cnr); 241 else if (!(apt & (FAPPTYP_NOTWINDOWCOMPAT | FAPPTYP_WINDOWCOMPAT | FAPPTYP_WINDOWAPI | FAPPTYP_BOUND | FAPPTYP_DOS | FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT | 0x1000))) /* not an executable app? */ 242 CreateDataObject(p, (obj) ? szBuffer : NULL, szDir, cnr); 243 else 244 CreateProgramObject(p, (obj) ? szBuffer : NULL, szDir, cnr); 301 245 } 302 246 x++; … … 306 250 } 307 251 308 309 VOID OpenObject (CHAR *filename,CHAR *type,HWND hwnd) 252 VOID OpenObject(CHAR * filename, CHAR * type, HWND hwnd) 310 253 { 311 254 HOBJECT hWPSObject; 312 255 313 if (!type)256 if (!type) 314 257 type = Default; 315 if((*filename == '<' && 316 filename[strlen(filename) - 1] == '>') || 317 IsFile(filename) != -1) { 258 if ((*filename == '<' && 259 filename[strlen(filename) - 1] == '>') || IsFile(filename) != -1) { 318 260 hWPSObject = WinQueryObject(filename); 319 if (hWPSObject != NULLHANDLE) {/* got something; try to to open it */261 if (hWPSObject != NULLHANDLE) { /* got something; try to to open it */ 320 262 321 263 CHAR s[CCHMAXPATH]; 322 264 HWND hwndDesktop; 323 265 324 if(hwnd) { 325 hwndDesktop = WinQueryDesktopWindow((HAB)0, 326 NULLHANDLE); 327 WinSetFocus(HWND_DESKTOP, 328 hwndDesktop); 329 } 330 sprintf(s, 331 "OPEN=%s", 332 type); 333 if(!WinSetObjectData(hWPSObject, 334 s) && 335 hwnd) 336 WinSetFocus(HWND_DESKTOP, 337 hwnd); 338 } 339 } 340 } 341 342 343 BOOL RunSeamless (CHAR *exename,CHAR *args,HWND hwnd) 266 if (hwnd) { 267 hwndDesktop = WinQueryDesktopWindow((HAB) 0, NULLHANDLE); 268 WinSetFocus(HWND_DESKTOP, hwndDesktop); 269 } 270 sprintf(s, "OPEN=%s", type); 271 if (!WinSetObjectData(hWPSObject, s) && hwnd) 272 WinSetFocus(HWND_DESKTOP, hwnd); 273 } 274 } 275 } 276 277 BOOL RunSeamless(CHAR * exename, CHAR * args, HWND hwnd) 344 278 { 345 279 CHAR settings[1024 + CCHMAXPATH + 80]; … … 347 281 348 282 sprintf(settings, 349 "EXENAME=%s;PROGTYPE=SEAMLESS;PARAMETERS=%s;OPEN=DEFAULT", 350 exename, 351 args); 352 if(hwnd) 353 WinSetFocus(HWND_DESKTOP, 354 HWND_DESKTOP); 283 "EXENAME=%s;PROGTYPE=SEAMLESS;PARAMETERS=%s;OPEN=DEFAULT", 284 exename, args); 285 if (hwnd) 286 WinSetFocus(HWND_DESKTOP, HWND_DESKTOP); 355 287 ret = WinCreateObject(WPProgram, 356 exename, 357 settings, 358 "<WP_NOWHERE>", 359 CO_REPLACEIFEXISTS); 360 if(!ret && hwnd) 361 WinSetWindowPos(hwnd, 362 HWND_TOP, 363 0, 364 0, 365 0, 366 0, 367 SWP_ZORDER | SWP_ACTIVATE); 288 exename, 289 settings, "<WP_NOWHERE>", CO_REPLACEIFEXISTS); 290 if (!ret && hwnd) 291 WinSetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_ZORDER | SWP_ACTIVATE); 368 292 return ret; 369 293 }
Note:
See TracChangeset
for help on using the changeset viewer.