On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 138
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.12.06 02:01. Заголовок: Как узнать пути к системе


Привет, всем !
Как можно узнать путь к директории WINDOWS или WINNT ?
Это же зависит от установки Виндов.
Как можно узнать путь к директории Рабочий стол ?
Только на чистом xHarbour'e.

Спасибо: 0 
Профиль
Ответов - 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


Спасибо: 0 
Профиль
постоянный участник


Пост N: 246
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.12.06 12:22. Заголовок: Re:


По крайней мере на WIN XP есть SET-переменная windir, содержащая путь к папке Windows.

Спасибо: 0 
Профиль
постоянный участник




Пост 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.



Спасибо: 0 
Профиль
Администратор




Пост N: 434
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.12.06 09:19. Заголовок: Re:


Надо еще добавить

#include <shlobj.h>

Спасибо: 0 
Профиль
администратор




Пост N: 509
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.06 09:25. Заголовок: Re:


Pasha пишет:

 цитата:
Надо еще добавить


Да , теперь работает ! :)

Спасибо: 0 
Профиль
постоянный участник




Пост 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

Заранее спасибо за ответы.


Спасибо: 0 
Профиль
постоянный участник


Пост 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

Спасибо: 0 
Профиль
постоянный участник




Пост N: 162
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.12.06 20:16. Заголовок: Re:


А на 95,98, Ме тоже есть SET переменные ?
Хочется иметь одну функцию, чтобы она на всех системах выдавала то что нужно.

Спасибо: 0 
Профиль
администратор




Пост N: 515
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.06 20:22. Заголовок: Re:


Andrey пишет:

 цитата:
А на 95,98, Ме тоже есть SET переменные ?


Конечно есть !
По ходу см. C:\CVS\xharbour\contrib\what32\include\commdlg.ch
У тебя путь может быть немного другим.

Спасибо: 0 
Профиль
администратор




Пост N: 516
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.06 20:24. Заголовок: Re:


Andrey пишет:

 цитата:
Хочется иметь одну функцию, чтобы она на всех системах выдавала то что нужно


Ну так и сделай такую ;) Тебе осталось только учесть что за система.
Возможно ветки реестра в них могут отличаться.

Спасибо: 0 
Профиль
постоянный участник




Пост N: 164
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.12.06 00:28. Заголовок: Re:


А готовые функции у кого-нибудь есть ?
Поделитесь пожалуйста.
Можно хотя бы идеями (типа на 98 нужно так, на все NT - так....) .
Все же сталкиваются с такими проблемами.

Спасибо: 0 
Профиль
постоянный участник




Пост 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 )

Спасибо: 0 
Профиль
администратор




Пост N: 528
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.12.06 19:51. Заголовок: Re:


и мне по ходу интерестно почему же не работает ;)

ЗЫ
у меня тож не пашет.....


Спасибо: 0 
Профиль
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 150
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет