Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизПуск-Программы . Найти похожие ветки
← →
tytus © (2004-01-10 19:01) [0]добрый вечер. У меня есть такой код:
procedure TForm1.Button3Click(Sender: TObject);
var
FindData:_WIN32_FIND_DATA;
Fetched:LongWord;
begin
SHGetSpecialFolderLocation(Application.Handle,CSIDL_PROGRAMS,IDList);
SHGetDataFromIDList(SHellFolder,IDList,SHGDFIL_FINDDATA,
@FindData,SizeOf(FindData));
SHellFolder.EnumObjects(Application.Handle,96,EnumList);????
while EnumList.Next(1,IDList,Fetched)=S_OK do
begin
s:=GetOutText(SHellFolder,IDList,false);\Взято из Demos\VirtualViewer\
Memo1.Lines.Add(s);
end;
end;
Вот на этих ??? выдает AccessViolation, хотя таким же макаром, только без SHGetDataFromIDList, я получаю список всех ярлыков и папок на рабочем столе. SHGetDeskTopFolder.
← →
YuRock © (2004-01-10 19:10) [1]Где описана SHellFolder?
Где описана EnumList?
Где описана IDList?
...
← →
tytus © (2004-01-10 19:19) [2]>YuRock;
в Private. Но в GetDeskTopFolder работает.
← →
YuRock © (2004-01-10 19:21) [3]А где они инициализируются? Может, неверно или вообще нигде?
← →
tytus © (2004-01-10 19:28) [4]>YuRock
procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
Fetched:LongWord;
begin
SHGetDeskTopFolder(ShellFolder);
SHellFolder.EnumObjects(Application.Handle,96,EnumList);
while EnumList.Next(1,IDList,Fetched)=S_OK do
begin
s:=GetOutText(SHellFolder,IDList,false);
Memo1.Lines.Add(s);
end;
Memo1.Lines.Add("__________________");
end;
← →
YuRock © (2004-01-10 19:43) [5]По-моему, я знаю, в чем проблема. Нужно в Button2Click удалить EnumList (EnumList.Release), тогда все должно заработать.
← →
tytus © (2004-01-10 20:07) [6]>YuRock.
Не помогает. EnumList.Reset (Release нету).
Но дело и не в этом. Если нажать первой Button3 то все равно глючит, и виснет так, что приходится перезагружать комп. На ХР тоже глючит, но нормально снимает задачу, или даже через Ctrl+F2.
Может что-то с SHGetDataFromIDList? Или прописать все переменные в TForm1.Button3Click?
← →
YuRock © (2004-01-10 20:13) [7]Вызывайте не EnumList.Release, а EnumList._Release
!!!!!!!!!!!
← →
tytus © (2004-01-10 20:23) [8]Все равно не помогает....
← →
YuRock © (2004-01-10 20:29) [9]А где и как инициализирован IDList ?
← →
YuRock © (2004-01-10 20:43) [10]Под него надо память обязательно выделить. Луче объявит как
IDList: TITEMIDLIST;
← →
tytus © (2004-01-10 21:21) [11]TITEMIDLIST не воспринимается EnumList.Next и SHGetDataFromIDLisist.
← →
YuRock © (2004-01-11 17:13) [12]Надо с собакой передавать
← →
YuRock © (2004-01-11 17:32) [13]> YuRock © (11.01.04 17:13) [12]
Извиняюсь - я наврал.
А легче всего получить нужный путь так:
function GetProgramsDir: String;
var
pBuffer: Array[0..MAX_PATH] of Char;
IDList: PItemIDList;
begin
SHGetSpecialFolderLocation(Application.Handle, CSIDL_PROGRAMS, IDList);
ShGetPathFromIDList(IDList, @pBuffer);
Result := String(pBuffer);
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.051 c