Автор | Сообщение |
|
| постоянный участник
|
Пост N: 138
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.12.06 02:01. Заголовок: Как узнать пути к системе
Привет, всем ! Как можно узнать путь к директории WINDOWS или WINNT ? Это же зависит от установки Виндов. Как можно узнать путь к директории Рабочий стол ? Только на чистом xHarbour'e.
|
|
|
Ответов - 13
[только новые]
|
|
|
| Администратор
|
Пост N: 421
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.12.06 10:06. Заголовок: Re:
#define CSIDL_DESKTOP 0x0000 // <desktop> #define CSIDL_INTERNET 0x0001 // Internet Explorer (icon on desktop) #define CSIDL_PROGRAMS 0x0002 // Start Menu\Programs #define CSIDL_CONTROLS 0x0003 // My Computer\Control Panel #define CSIDL_PRINTERS 0x0004 // My Computer\Printers #define CSIDL_PERSONAL 0x0005 // My Documents #define CSIDL_FAVORITES 0x0006 // <user name>\Favorites #define CSIDL_STARTUP 0x0007 // Start Menu\Programs\Startup #define CSIDL_RECENT 0x0008 // <user name>\Recent #define CSIDL_SENDTO 0x0009 // <user name>\SendTo #define CSIDL_BITBUCKET 0x000a // <desktop>\Recycle Bin #define CSIDL_STARTMENU 0x000b // <user name>\Start Menu #define CSIDL_DESKTOPDIRECTORY 0x0010 // <user name>\Desktop #define CSIDL_DRIVES 0x0011 // My Computer #define CSIDL_NETWORK 0x0012 // Network Neighborhood #define CSIDL_NETHOOD 0x0013 // <user name>\nethood #define CSIDL_FONTS 0x0014 // windows\fonts #define CSIDL_TEMPLATES 0x0015 #define CSIDL_COMMON_STARTMENU 0x0016 // All Users\Start Menu #define CSIDL_COMMON_PROGRAMS 0X0017 // All Users\Programs #define CSIDL_COMMON_STARTUP 0x0018 // All Users\Startup #define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019 // All Users\Desktop #define CSIDL_APPDATA 0x001a // <user name>\Application Data #define CSIDL_PRINTHOOD 0x001b // <user name>\PrintHood #define CSIDL_LOCAL_APPDATA 0x001c // <user name>\Local Settings\Applicaiton Data (non roaming) #define CSIDL_ALTSTARTUP 0x001d // non localized startup #define CSIDL_COMMON_ALTSTARTUP 0x001e // non localized common startup #define CSIDL_COMMON_FAVORITES 0x001f #define CSIDL_INTERNET_CACHE 0x0020 #define CSIDL_COOKIES 0x0021 #define CSIDL_HISTORY 0x0022 #define CSIDL_COMMON_APPDATA 0x0023 // All Users\Application Data #define CSIDL_WINDOWS 0x0024 // GetWindowsDirectory() #define CSIDL_SYSTEM 0x0025 // GetSystemDirectory() #define CSIDL_PROGRAM_FILES 0x0026 // C:\Program Files #define CSIDL_MYPICTURES 0x0027 // C:\Program Files\My Pictures #define CSIDL_PROFILE 0x0028 // USERPROFILE #define CSIDL_SYSTEMX86 0x0029 // x86 system directory on RISC #define CSIDL_PROGRAM_FILESX86 0x002a // x86 C:\Program Files on RISC #define CSIDL_PROGRAM_FILES_COMMON 0x002b // C:\Program Files\Common #define CSIDL_PROGRAM_FILES_COMMONX86 0x002c // x86 Program Files\Common on RISC #define CSIDL_COMMON_TEMPLATES 0x002d // All Users\Templates #define CSIDL_COMMON_DOCUMENTS 0x002e // All Users\Documents #define CSIDL_COMMON_ADMINTOOLS 0x002f // All Users\Start Menu\Programs\Administrative Tools #define CSIDL_ADMINTOOLS 0x0030 // <user name>\Start Menu\Programs\Administrative Tools #define CSIDL_CONNECTIONS 0x0031 // Network and Dial-up Connections #define CSIDL_FLAG_CREATE 0x8000 // combine with CSIDL_ value to force folder creation in SHGetFolderPath() #define CSIDL_FLAG_DONT_VERIFY 0x4000 // combine with CSIDL_ value to return an unverified folder path #define CSIDL_FLAG_MASK 0xFF00 // mask for all possible flag values C_getspecialfolder(CSIDL_WINDOWS) и так далее #pragma BEGINDUMP // из минигуи #include <windows.h> #include <hbapi.h> HB_FUNC( C_GETSPECIALFOLDER ) // Contributed By Ryszard Ry№ko { char *lpBuffer = (char*) hb_xgrab( MAX_PATH+1); LPITEMIDLIST pidlBrowse; // PIDL selected by user SHGetSpecialFolderLocation(GetActiveWindow(), hb_parni(1), &pidlBrowse) ; SHGetPathFromIDList(pidlBrowse, lpBuffer); hb_retc(lpBuffer); hb_xfree( lpBuffer); } #pragma ENDDUMP
|
|
|
|
| постоянный участник
|
Пост N: 246
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.12.06 12:22. Заголовок: Re:
По крайней мере на WIN XP есть SET-переменная windir, содержащая путь к папке Windows.
|
|
|
|
| постоянный участник
|
Пост N: 158
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.12.06 00:36. Заголовок: Re:
Что то не работает этот кусок кода. Может я что-то неправильно делаю ? #define ............ FUNCTION MAIN() ? "GetWindowsDirectory()=",C_getspecialfolder(CSIDL_WINDOWS) ? "My Computer = ",C_getspecialfolder(CSIDL_DRIVES) wait RETURN NIL #pragma BEGINDUMP // из минигуи #include <windows.h> #include <hbapi.h> HB_FUNC( C_GETSPECIALFOLDER ) // Contributed By Ryszard Ry№ko { char *lpBuffer = (char*) hb_xgrab( MAX_PATH+1); LPITEMIDLIST pidlBrowse; // PIDL selected by user SHGetSpecialFolderLocation(GetActiveWindow(), hb_parni(1), &pidlBrowse) ; SHGetPathFromIDList(pidlBrowse, lpBuffer); hb_retc(lpBuffer); hb_xfree( lpBuffer); } #pragma ENDDUMP ----------------------------------------- ОШИБКИ: Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland obj\TESTPATH.c: Error E2451 TESTPATH.PRG 77: Undefined symbol 'LPITEMIDLIST' in function HB_FUN_C_GETSPECIALFOLDER Error E2379 TESTPATH.PRG 77: Statement missing ; in function HB_FUN_C_GETSPECIALFOLDER Error E2451 TESTPATH.PRG 78: Undefined symbol 'pidlBrowse' in function HB_FUN_C_GETSPECIALFOLDER Warning W8065 TESTPATH.PRG 78: Call to function 'SHGetSpecialFolderLocation' with no prototype in function HB_FUN_C_GETSPECIALFOLDER Warning W8065 TESTPATH.PRG 79: Call to function 'SHGetPathFromIDList' with no prototype in function HB_FUN_C_GETSPECIALFOLDER *** 3 errors in Compile *** Done.
|
|
|
|
| Администратор
|
Пост N: 434
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.12.06 09:19. Заголовок: Re:
Надо еще добавить #include <shlobj.h>
|
|
|
|
| |
Пост N: 509
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.06 09:25. Заголовок: Re:
Pasha пишет: Да , теперь работает ! :)
|
|
|
|
| постоянный участник
|
Пост N: 159
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.12.06 19:36. Заголовок: Re:
Спасибо, почти все заработало. Не возвращает значение My Computer .......... #define CSIDL_DRIVES 0x0011 // My Computer #define CSIDL_CONTROLS 0x0003 // My Computer\Control Panel #define CSIDL_PRINTERS 0x0004 // My Computer\Printers Как узнать где живет зверек по кличке "My Computer" ? это нужно для выбора файла: ? SelectFile( "xBase prog files( *.prg )", "*.*", mypath ) А как узнать путь к папке временных файлов ? ?:\WINDOWS\TEMP ?:\WINNT\TEMP Заранее спасибо за ответы.
|
|
|
|
| постоянный участник
|
Пост N: 251
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.06 19:54. Заголовок: Re:
Andrey пишет: цитата: | А как узнать путь к папке временных файлов ? ?:\WINDOWS\TEMP ?:\WINNT\TEMP |
| Простой способ без просмотра реестра - это обращение к SET-переменной TEMP, или TMP. Например, на моей XP есть следующие SET-переменные SystemDrive=C: SystemRoot=C:\WINDOWS TEMP=C:\DOCUME~1\VGRIGO~1\LOCALS~1\Temp TMP=C:\DOCUME~1\VGRIGO~1\LOCALS~1\Temp
|
|
|
|
| постоянный участник
|
Пост N: 162
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.12.06 20:16. Заголовок: Re:
А на 95,98, Ме тоже есть SET переменные ? Хочется иметь одну функцию, чтобы она на всех системах выдавала то что нужно.
|
|
|
|
| |
Пост N: 515
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.06 20:22. Заголовок: Re:
Andrey пишет: цитата: | А на 95,98, Ме тоже есть SET переменные ? |
| Конечно есть ! По ходу см. C:\CVS\xharbour\contrib\what32\include\commdlg.ch У тебя путь может быть немного другим.
|
|
|
|
| |
Пост N: 516
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.06 20:24. Заголовок: Re:
Andrey пишет: цитата: | Хочется иметь одну функцию, чтобы она на всех системах выдавала то что нужно |
| Ну так и сделай такую ;) Тебе осталось только учесть что за система. Возможно ветки реестра в них могут отличаться.
|
|
|
|
| постоянный участник
|
Пост N: 164
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.12.06 00:28. Заголовок: Re:
А готовые функции у кого-нибудь есть ? Поделитесь пожалуйста. Можно хотя бы идеями (типа на 98 нужно так, на все NT - так....) . Все же сталкиваются с такими проблемами.
|
|
|
|
|
| постоянный участник
|
Пост N: 167
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.12.06 11:48. Заголовок: Re:
А как быть с My compyter ? Не возвращает значение My Computer .......... #define CSIDL_DRIVES 0x0011 // My Computer #define CSIDL_CONTROLS 0x0003 // My Computer\Control Panel #define CSIDL_PRINTERS 0x0004 // My Computer\Printers Как узнать где живет зверек по кличке "My Computer" ? это нужно для выбора файла: ? SelectFile( "xBase prog files( *.prg )", "*.*", mypath )
|
|
|
|
| |
Пост N: 528
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.12.06 19:51. Заголовок: Re:
и мне по ходу интерестно почему же не работает ;) ЗЫ у меня тож не пашет.....
|
|
|
|