PDA

View Full Version : سوال: بدست آوردن لیست فایلهای روی دسکتاپ



Mask
پنج شنبه 02 دی 1389, 16:39 عصر
با سلام
سوالم اینه که چطوری باید وقتی که کاربر بر روی دسکتاپ فوکوس کرد و دسکتاپ به عنوان فرم فعال یا اکتیو قرار گرفت لیست فایلهای روش رو بدست آورد.
ممنون.

Felony
پنج شنبه 02 دی 1389, 17:40 عصر
برای گرفتن لیست فایل ها اول باید آدرس پوشه Desktop کاربر رو به دست بیارید که میتونید از تابع زیر استفاده کنید :

function GetDeskTopPath : string;
var
shellMalloc: IMalloc;
ppidl: PItemIdList;
PerDir: string;
begin
ppidl := nil;
try
if SHGetMalloc(shellMalloc) = NOERROR then
begin
SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, ppidl);
SetLength(Result, MAX_PATH);
if not SHGetPathFromIDList(ppidl, PChar(Result)) then
raise exception.create('SHGetPathFromIDList failed : invalid pidl');
SetLength(Result, lStrLen(PChar(Result)));
end;
finally
if ppidl <> nil then
shellMalloc.free(ppidl);
end;
end;
کتابخانه ActiveX و ShlObj رو به Uses اضافه کنید و بعد به صورت زیر لیست فایل ها و پوشه های موجود تو اون رو به دست بیارید :

var
S: TSearchRec;
begin
if FindFirst(GetDeskTopPath+'\*.*', faAnyFile, S)=0 then
repeat
Memo1.Lines.Add(S.Name);
until (FindNext(S)<> 0);
FindClose(S);
end;

اگر از دلفی 2009 یا 2010 استفاده میکنید میتونید از توابع کتابخانه IOUtils برای به دست آوردن لیست فایل ها استفاده کنید .

Mask
پنج شنبه 02 دی 1389, 18:35 عصر
ممنون
مشکلم این نیست.
مشکلم اینه که از کجا بفهمم فرم اکتیو الان دسکتاپه؟

Felony
جمعه 03 دی 1389, 07:59 صبح
به وسیله تابع GetForegroundWindow میتونی هندل فرم فعال تو ویندوز رو بگیری ، بعد برای گرفتن هندل Desktop و مقایسه اون باید از تابع GetShellWindow استفاده کنی که البته توسط دلفی Import نشده و خودت باید Importش کنی :


function GetShellWindow: HWND; stdcall; external user32;

در آخر به صورت زیر میتونی چک کنی که الان فکوس روی Desktop هست یا نه :

if GetForegroundWindow = GetShellWindow then