/************************************************************************* * ExtractAssociatedIconW (SHELL32.@) * * Return icon for given file (either from file itself or from associated * executable) and patch parameters if needed. */ HICON WINAPI ExtractAssociatedIconW(HINSTANCE hInst, LPWSTR lpIconPath, LPWORD lpiIcon) { HICON hIcon = NULL; WORD wDummyIcon = 0; TRACE("%p %s %p\n", hInst, debugstr_w(lpIconPath), lpiIcon); if(lpiIcon == NULL) lpiIcon = &wDummyIcon; hIcon = ExtractIconW(hInst, lpIconPath, *lpiIcon); if( hIcon < (HICON)2 ) { if( hIcon == (HICON)1 ) /* no icons found in given file */ { WCHAR tempPath[MAX_PATH]; HINSTANCE uRet = FindExecutableW(lpIconPath,NULL,tempPath); if( uRet > (HINSTANCE)32 && tempPath[0] ) { lstrcpyW(lpIconPath,tempPath); hIcon = ExtractIconW(hInst, lpIconPath, *lpiIcon); if( hIcon > (HICON)2 ) return hIcon; } } if( hIcon == (HICON)1 ) *lpiIcon = 2; /* MSDOS icon - we found .exe but no icons in it */ else *lpiIcon = 6; /* generic icon - found nothing */ if (GetModuleFileNameW(hInst, lpIconPath, MAX_PATH)) hIcon = LoadIconW(hInst, MAKEINTRESOURCEW(*lpiIcon)); } return hIcon; }
static char * searchpath(char *name) { static char widename[2 * BUFSIZE]; static char location[2 * BUFSIZE + 2]; // There appears to be a bug in FindExecutableA() on Windows NT. // Use FindExecutableW() instead... PlatformId(); if (g_PlatformId == VER_PLATFORM_WIN32_NT) { MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)name, -1, (LPWSTR)widename, BUFSIZE); if (FindExecutableW((LPCWSTR)widename, (LPCWSTR)"", (LPWSTR)location) > (HINSTANCE)32) { WideCharToMultiByte(CP_ACP, 0, (LPWSTR)location, -1, (LPSTR)widename, 2 * BUFSIZE, NULL, NULL); return widename; } } else { if (FindExecutableA((LPCTSTR)name, (LPCTSTR)"", (LPTSTR)location) > (HINSTANCE)32) return location; } return (char *)""; }
static char * searchpath(char *name) { static char widename[2 * BUFSIZE]; static char location[2 * BUFSIZE + 2]; // There appears to be a bug in FindExecutableA() on Windows NT. // Use FindExecutableW() instead... MultiByteToWideChar(CP_ACP, 0, (LPCSTR)name, -1, (LPWSTR)widename, BUFSIZE); if (FindExecutableW((LPCWSTR)widename, (LPCWSTR)"", (LPWSTR)location) > (HINSTANCE)32) { WideCharToMultiByte(CP_ACP, 0, (LPWSTR)location, -1, (LPSTR)widename, 2 * BUFSIZE, NULL, NULL); return widename; } return (char *)""; }