Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Пуск-Программы .   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
1-1078865639
SeriousSam
2004-03-09 23:53
2004.03.28
Как сделать что бы в StringGrid e по команде выделялся...


6-1073999614
Bart
2004-01-13 16:13
2004.03.28
idHTTP using proxy connect


1-1078840598
bn2
2004-03-09 16:56
2004.03.28
непонятное поведение компилятора


1-1078410219
a.t.k.
2004-03-04 17:23
2004.03.28
Встороить ComboBox в ячейку StringGrid


7-1073572262
Davey
2004-01-08 17:31
2004.03.28
Коммандная строка процесса