View Full Version : سوال: بدست آوردن لیست فایلهای روی دسکتاپ
  
Mask
پنج شنبه 02 دی 1389, 17:39 عصر
با سلام
سوالم اینه که چطوری باید وقتی که کاربر بر روی دسکتاپ فوکوس کرد و دسکتاپ به عنوان فرم فعال یا اکتیو قرار گرفت لیست فایلهای روش رو بدست آورد.
ممنون.
Felony
پنج شنبه 02 دی 1389, 18: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, 19:35 عصر
ممنون
مشکلم این نیست.
مشکلم اینه که از کجا بفهمم فرم اکتیو الان دسکتاپه؟
Felony
جمعه 03 دی 1389, 08:59 صبح
به وسیله تابع GetForegroundWindow میتونی هندل فرم فعال تو ویندوز رو بگیری ، بعد برای گرفتن هندل Desktop و مقایسه اون باید از تابع GetShellWindow استفاده کنی که البته توسط دلفی Import نشده و خودت باید Importش کنی :
function GetShellWindow: HWND; stdcall; external user32;
در آخر به صورت زیر میتونی چک کنی که الان فکوس روی Desktop هست یا نه :
  if GetForegroundWindow = GetShellWindow then
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.