|
|
| Посл.отвђт | Сообщен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 startPS под w2k в качестве первого параметра SHQueryRecycleBin NULL не прокатит (будет ошибка E_INVALIDARG 0x80070057L) необходимо указывать диск, например, C:\. |
|
|
Дата: Май 12, 2004 08:56:24 · Поправил: 1990 q_q Большое спасибо!!! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.062 |