· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Работа с корзиной.

Посл.отвђт Сообщенiе


Дата: Май 8, 2004 20:52:08

Здравствуйте!

Подскажите пожалуйста, как открыть Корзину
(в проводнике) и как вызвать пункт контекстного
меню "Свойства" (по правой клавише).

Заранее спасибо!


Дата: Май 8, 2004 22:19:20

SHGetSpecialFolderLocation - получить ID пути
SHGetPathFromIDList - получить путь по ID
Ну и ShellExecute - открыть папку. А вот про свойства сказать не могу.


Дата: Май 8, 2004 22:48:55

1990
Копать надо в сторону диалоговых окон. Окно свойств это ведь диалог. А значит его можно вызвать програмно. Ну а открытие в проводнике - это действительно ShellExecute с ключом "explore".


Дата: Май 9, 2004 01:32:01

в сторону shlwapi.dll а так же интерфейсов которые там оттопыриваются.


Дата: Май 9, 2004 06:56:08

1990
invoke SHObjectProperties, hWndOwner, 2, szObjectPath, szTabName

Эта функция, кажись, недокументированная, ее ординал #178


Дата: Май 9, 2004 07:48:32

Спасибо!


Дата: Май 9, 2004 19:33:23

Никак не могу понять, как получить ID в функции SHGetSpecialFolderLocation и преобразовать это в путь. Примерчиков ни у кого нет? Главная проблема -я не понимаю,
почему - ошибок в SHGetSpecialFolderLocation нет...


Дата: Май 10, 2004 03:59:56

1990
Тебе же dragon все написал. Проверяй свой код.


Дата: Май 11, 2004 13:08:09

С функцией поиска и открытия корзины разобрался,
а за одно откопал одну интересную функциюю в MSDN -
SHQueryRecycleBin. Вопрос по поводу сей функции.
В описании сказано, что нужно заполнить структуру
SHQUERYRBINFO. И существуют:
__int64 i64Size;
__int64 i64NumItems;
Как привести __int64 (какой это тип?) к
строке для вывода на экран? (wsprintf или IntTostr
и с какими параметарами?)


Дата: Май 11, 2004 13:24:19 · Поправил: q_q

1990
__int64 - dq – 8 байт.
Afiak wsprintf не берет такие числа. msvcrt.sprintf берет, спецификация - %I64.


Дата: Май 11, 2004 14:13:14 · Поправил: 1990

q_q
Спасибо! Кое-что нашёл.


Дата: Май 11, 2004 15:24:59

Смешно конечно, но не получается заюзать с %I64 - возвращает ноль в __int64 i64NumItems. Может быть не так вызываю:
;
Fmat1 db "%I64", 0
;
mov shinfo.cbSize, sizeof SHQUERYRBINFO
invoke SHQueryRecycleBin, NULL, ADDR shinfo
mov esi, offset shinfo.i64Size
mov edi, offset shinfo.i64NumItems
invoke sprintf,edi,ADDR Fmat1
invoke IntToStr,eax,edi
invoke MessageBoxA, NULL,edi,edi, MB_OK


Дата: Май 12, 2004 04:56:19 · Поправил: q_q

1990
не получается заюзать с %I64
Ты неправильно понимаешь параметры sprintf.
.386
.model flat,stdcall

.nolist
include windows.inc
include kernel32.inc
include user32.inc
include shell32.inc
.list

includelib kernel32.lib
includelib user32.lib
includelib shell32.lib

.const
  hi      db 'hi',0,0
  msvcrt  db 'msvcrt',0,0
  sprintf db 'sprintf',0
  format  db 'Size = %I64d (%I64Xh)',13
          db 'Items = %I64d (%I64Xh)',0

.data?
  buffer  db 256 dup (?)
  shinfo  SHQUERYRBINFO <?>

.code
start:
  push sizeof SHQUERYRBINFO
  push offset shinfo
  call RtlZeroMemory

  mov shinfo.cbSize, sizeof SHQUERYRBINFO
  push offset shinfo
  push 0
  call SHQueryRecycleBin
  cmp eax,S_OK
  jnz short @@2

  push offset msvcrt
  call LoadLibrary
  test eax,eax
  jz short @@2

; для call FreeLibrary
  push eax

  push offset sprintf
  push eax
  call GetProcAddress
  test eax,eax
  jz short @@1

  mov ecx,offset shinfo.i64NumItems
  push dword ptr [ecx + 4]
  push dword ptr [ecx]
  push dword ptr [ecx + 4]
  push dword ptr [ecx]

  mov ecx,offset shinfo.i64Size
  push dword ptr [ecx + 4]
  push dword ptr [ecx]
  push dword ptr [ecx + 4]
  push dword ptr [ecx]

  push offset format
  push offset buffer
  call eax
  add  esp,28h

  push MB_OK
  push offset hi
  push offset buffer
  push 0
  call MessageBoxA

@@1:
  call FreeLibrary

@@2:
  call ExitProcess
end start
PS под w2k в качестве первого параметра SHQueryRecycleBin NULL не прокатит (будет ошибка E_INVALIDARG 0x80070057L) необходимо указывать диск, например, C:\.


Дата: Май 12, 2004 08:56:24 · Поправил: 1990

q_q
Большое спасибо!!!


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.062