با سلام
سوالم اینه که چطوری باید وقتی که کاربر بر روی دسکتاپ فوکوس کرد و دسکتاپ به عنوان فرم فعال یا اکتیو قرار گرفت لیست فایلهای روش رو بدست آورد.
ممنون.
Printable View
با سلام
سوالم اینه که چطوری باید وقتی که کاربر بر روی دسکتاپ فوکوس کرد و دسکتاپ به عنوان فرم فعال یا اکتیو قرار گرفت لیست فایلهای روش رو بدست آورد.
ممنون.
برای گرفتن لیست فایل ها اول باید آدرس پوشه 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 برای به دست آوردن لیست فایل ها استفاده کنید .
ممنون
مشکلم این نیست.
مشکلم اینه که از کجا بفهمم فرم اکتیو الان دسکتاپه؟
به وسیله تابع GetForegroundWindow میتونی هندل فرم فعال تو ویندوز رو بگیری ، بعد برای گرفتن هندل Desktop و مقایسه اون باید از تابع GetShellWindow استفاده کنی که البته توسط دلفی Import نشده و خودت باید Importش کنی :
function GetShellWindow: HWND; stdcall; external user32;
در آخر به صورت زیر میتونی چک کنی که الان فکوس روی Desktop هست یا نه :
if GetForegroundWindow = GetShellWindow then