ABAP: Путь к папке Windows 'Мои Документы'

добавлено: 11 июл 12
понравилось:0
просмотров: 2075
комментов: 3

теги:

Автор: Изя Шниперсон

Если ставится задача загрузки/выгрузки файла на локальный компьютер пользователя, при вызове диалога выбора места загрузки/сохранения, можно не напрягать пользователя от C:\ поиском папки "Мои Документы" а сразу открыть диалог в этой папке.

Для этого требуется прочитать регистр Windows с помощью статического метода

класса:

CL_GUI_FRONTEND_SERVICES=>REGISTRY_GET_VALUE

Например так:

CALL METHOD CL_GUI_FRONTEND_SERVICES=>REGISTRY_GET_VALUE
    EXPORTING
        ROOT         = CL_GUI_FRONTEND_SERVICES=>HKEY_CURRENT_USER
        KEY          =  'Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders'
        VALUE        = 'Personal'
    IMPORTING
         REG_VALUE   = my_documents_path
     EXCEPTIONS
         GET_REGVALUE_FAILED  = 1
         CNTL_ERROR           = 2
         ERROR_NO_GUI         = 3
         NOT_SUPPORTED_BY_GUI = 4
         others               = 5.



P.S. параметр KEY должен быть следующим:

'Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' ))D

Комментарии


  • Во-первых не ригистр, а реестр.
    А во-вторых, код неправильный. Однажды Вы столкнётесь с тем, что ключа
    'Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders'

    в реестре не будет, поэтому правильно делать так, как рекомендует Microsoft:


    var
    Path: LPTSTR;
    begin
    Path := LPTSTR(AllocMem(MAX_PATH));
    try
    SHGetSpecialFolderPath(application.ActiveFormHandle, Path , CSIDL_PERSONAL, false);// CSIDL_PERSONAL - мои документы
    ShowMessage(Path);
    finally
    FreeMem(Path);
    end;

  • 12 июля 2012, 17:39 Изя Шниперсон

    И как это из ABAP запустить?
    <SOURCE>
    var
    Path: LPTSTR;
    begin
    Path := LPTSTR(AllocMem(MAX_PATH));
    try
    SHGetSpecialFolderPath(application.ActiveFormHandle, Path , CSIDL_PERSONAL, false);// CSIDL_PERSONAL - мои документы
    ShowMessage(Path);
    finally
    FreeMem(Path);
    end;
    </SOURCE>

  • вот тут всё понятно и хорошо http://sauna.ru



Необходимо войти на сайт, чтобы оставлять комментарии