1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

استفاده از توابع API در دلفی

شروع موضوع توسط hector2141 ‏11/9/12 در انجمن Delphi

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    بدست آوردن مسیرپوشه سیستم :
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    [/TD]
    [TD="class: code"]Function Getsyetemdirectory( Ipbuffer : pchar ; usize : unit) : unit ; stcall ;

    [/TD]
    [/TR]
    [/TABLE]



    usize : از نوع عدد می باشد و شامل حد اکثر تعداد کاراکتر های ipbuffer می باشد .
    Ipbuffer: این پارامتر از نوع رشته بوده و مسیرپوشه سیستم را بر می گرداند .
    مثال:
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    [/TD]
    [TD="class: code"]Function getsystem : string;
    Var
    Windir : array [0..255] of char;
    Begin
    Getsystemdirectory(windir,255);
    Result := strpass(windir);
    End;

    [/TD]
    [/TR]
    [/TABLE]
     
  2. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : استفاده از توابع API در دلفی

    [h=2]بدست آوردن مسیر پوشه ویندوز[/h] بدست آوردن مسیر پوشه ویندوز :
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    [/TD]
    [TD="class: code"]Function Getwindowsdirectory( Ipbuffer : pchar ; usize : unit) : unit ; stcall;

    [/TD]
    [/TR]
    [/TABLE]



    usize : از نوع عدد می باشد و شامل حد اکثر تعداد کاراکتر های ipbuffer می باشد .
    Ipbuffer: این پارامتر از نوع رشته بوده و مسیر پوشه ویندوز را بر می گرداند .
    مثال:
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    [/TD]
    [TD="class: code"]Function getwindows : string;
    Var
    sysdir : array [0..255] of char;
    Begin
    Getwindowsdirectory(sysdir,255);
    Result := strpass(sysdir);
    End;

    [/TD]
    [/TR]
    [/TABLE]
     
  3. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : استفاده از توابع API در دلفی

    بدست آوردن مسیر پوشه temp :
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    [/TD]
    [TD="class: code"]Function Gettemppath( nbufferlength : dword , Ipbuffer : pchar ) : dword ; stcall;

    [/TD]
    [/TR]
    [/TABLE]



    Ipbuffer: این پارامتر از نوع رشته بوده و مسیر پوشه ویندوز را بر می گرداند .
    Nbufferlength : از نوع عدد می باشد و شامل حد اکثر تعداد کاراکتر های ipbuffer می باشد .

    خروجی این تابع از نوع عددی بوده اگر تابع کارش را به درستی انجام داده باشد مقدار برگشتی برابر با nbufferlength خواهد بود وگرنه برابر با صفر خواهد شد .
    مثال:
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    [/TD]
    [TD="class: code"]Function gettemp : string;
    Var
    tempdir : array [0..255] of char;
    Begin
    Gettemppath(255 , tempdir);
    Result := strpass(tempdir);
    End;

    [/TD]
    [/TR]
    [/TABLE]
     
  4. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : استفاده از توابع API در دلفی

    بدست آوردن نام کاربر:
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    [/TD]
    [TD="class: code"]Function getusername(ipbuffer : pchar ; var nsize : dword ) : boole ; stdcall;

    [/TD]
    [/TR]
    [/TABLE]



    Ipbuffer: این پارامتر از نوع رشته بوده و نام کاربر را بر می گرداند .
    Nsize : از نوع عدد می باشد و شامل حد اکثر تعداد کاراکتر های ipbuffer می باشد .
    مثال :
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [/TD]
    [TD="class: code"]Function computername:strin;
    Var
    Len:dword;
    Name:string;
    Begin
    Len := max_path+1;
    Setlength(name , max_path+1);
    Getusername(pchar(name) , len);
    Setlength(name , strlen(pchar(name)));
    Result := uppercase(name);
    End;

    [/TD]
    [/TR]
    [/TABLE]
     
  5. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : استفاده از توابع API در دلفی

    بدست آوردن نام کامپیوتر:
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    [/TD]
    [TD="class: code"]Function Getcomputername( Ipbuffer : pchar ; var nsize : Dword ) : bool ; stdcall;

    [/TD]
    [/TR]
    [/TABLE]



    Ipbuffer: این پارامتر از نوع رشته بوده و شامل متغیری بوده که نام کامپیوتر در آن قرار می گیرد .
    Nsize : از نوع عدد می باشد و شامل تعداد کاراکتر هایی است که باید نمایش داده شود و باید از 31 بیشتر باشد .
    اگر تابع کار خود را به خوبی انجام ندهد در متغیر در nsize صفر یا null قرار می گیرد
    مثال :
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [/TD]
    [TD="class: code"]Function computername:strin;
    Var
    Len:dword;
    Name:string;
    Begin
    Len:=max_path+1;
    Setlength(name,max_path+1);
    Getcomputername(pchar(name),len);
    Setlength(name,strlen(pchar(name)));
    Result:=uppercase(name);
    End;

    [/TD]
    [/TR]
    [/TABLE]
     
  6. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : استفاده از توابع API در دلفی

    با این کد می تونید یه برنامه رو اجرا کنید ( مثلا NotePad )
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    [/TD]
    [TD="class: code"]ShellExecute(Handle, 'open', 'c:\Windows\notepad.exe', nil, nil, SW_SHOWNORMAL) ;

    [/TD]
    [/TR]
    [/TABLE]



    حالا اگه بخواید یک فایل متنی رو با NotePad باز کنید کدش باید به جای اولین Nil آدرس فایل رو بنویسید :
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    [/TD]
    [TD="class: code"]ShellExecute(Handle,'open', 'c:\windows\notepad.exe','c:\Example.txt', nil, SW_SHOWNORMAL) ;

    [/TD]
    [/TR]
    [/TABLE]



    با کد بالایی ( اولی ) می تونید یک پوشه رو هم باز کنید و هم چنین یک صفحه وب رو، فقط به جای آدرس NotePad باید آدرس پوشه یا آدرس صفحه وب رو بنویسید.

    ارسال ایمیل :
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    8
    9
    [/TD]
    [TD="class: code"]var em_subject, em_body, em_mail : string;
    begin
    em_subject := 'This is the subject line';
    em_body := 'Message body text goes here';
    em_mail := 'mailto:delphi.guide@about.com?subject=' +
    em_subject + '&body=' + em_body ;
    ShellExecute(Handle,'open',
    PChar(em_mail), nil, nil, SW_SHOWNORMAL) ;
    end;

    [/TD]
    [/TR]
    [/TABLE]
     
  7. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : استفاده از توابع API در دلفی


    Function createdc(ipszdriver,ipszdevice,ipszoutput:pchar;ip dwminit :pdevicemod):hdc;از این تابع برای ساختن پرده زمینه استفاده می شود.
    Ipszdriver : این پارامتر از نوع رشته می باشد و شامل نام درایوری است که قرار است پرده زمینه روی آن ساخته شود .
    Ipszdevice: این پارامتر از نوع رشته بوده و شامل device خروجی می باشد
    ipszoutput: از نوع رشته بوده و port خروجی را مشخص می کند
    Ipinitdata: یک اشاره گر به ساختار devmod می باشد ک


    Function drawtext(hdc:hdc;ipstring:pchar;ncount:integer;var iprect:trect;uformat:unit):integer;از این تابع برای ترسیم متن روی پرده DC استفاده می شود .

    مثال:
    ابتدا یک تایمر قرار داده و hnterval آن را برابر با 10 قرار دهید و در قسمت implemention آن متغیر I از نوع Boolean تعریف کنید .

    procedure TForm1.Timer1Timer(Sender: TObject);

    var

    h:hdc;

    r:trect;

    begin

    h:=createdc('display',nil,nil,nil);

    r:=rect(620,-60,1020,80);

    drawtext(h,'SWAN SOFT GROUP',-1,r,dt_singleline or dt_center or dt_vcenter);

    deletedc(h);

    if i = false then

    begin

    timer1.Interval:=1000;

    i:=true;

    end;

    form1.Hide;

    end; ​
     
  8. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : استفاده از توابع API در دلفی

    کپی ، کات و حذف یک پوشه ...



    function CopyDir(const fromDir, toDir: string): Boolean;

    var

    fos: TSHFileOpStruct;

    begin

    ZeroMemory(@fos, SizeOf(fos));

    with fos do

    begin

    wFunc := FO_COPY;

    fFlags := FOF_FILESONLY;

    pFrom := PChar(fromDir + #0);

    pTo := PChar(toDir)

    end;

    Result := (0 = ShFileOperation(fos));

    end;





    function MoveDir(const fromDir, toDir: string): Boolean;

    var

    fos: TSHFileOpStruct;

    begin

    ZeroMemory(@fos, SizeOf(fos));

    with fos do

    begin

    wFunc := FO_MOVE;

    fFlags := FOF_FILESONLY;

    pFrom := PChar(fromDir + #0);

    pTo := PChar(toDir)

    end;

    Result := (0 = ShFileOperation(fos));

    end;



    function DelDir(dir: string): Boolean;

    var

    fos: TSHFileOpStruct;

    begin

    ZeroMemory(@fos, SizeOf(fos));

    with fos do

    begin

    wFunc := FO_DELETE;

    fFlags := FOF_SILENT or FOF_NOCONFIRMATION;

    pFrom := PChar(dir + #0);

    end;

    Result := (0 = ShFileOperation(fos));

    end;


    برای استفاده از این کدها باید ShelAPI رو در بخش Uses اضافه کنید ...
     
  9. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : استفاده از توابع API در دلفی

    با این تابع کارهای زیادی میشه کرد
    من خودم برای تغییر بک گروند ازش استفاده می کنم .
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    [/TD]
    [TD="class: code"]function SystemParametersInfo( uiaction:unit ;uiparam:unit;Pvparam:pvoid;fwinini:unit):bool;

    [/TD]
    [/TR]
    [/TABLE]



    مثال:
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    [/TD]
    [TD="class: code"]SystemParametersInfo(SPI_SETDESKWALLPAPER ,0,pchar(bmpfile),SPIF_SENDCHANGE );

    [/TD]
    [/TR]
    [/TABLE]



    البته برای تغییر باید یا فایل bmp باشه یا اونو به jpg تبدیل کنین که تو سایت یه پست برای تبدیل jpg به bmp هست .
     
  10. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : استفاده از توابع API در دلفی

    [h=2]activatekeyboardlayout[/h] با این تابع میشه زبان را تغییر داد البته سیستم بای زبان مورد نظر داشته باشد .
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    [/TD]
    [TD="class: code"]Function activatekeyboardlayout(hkl:hkl;flags:unit)bool;

    [/TD]
    [/TR]
    [/TABLE]



    مثال:
    در این مثال زبان صفحه کلید را به زبان بعدی که سیستم پشتیبانی می کند تغییر می دهد.
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    [/TD]
    [TD="class: code"]Function setlang : Boolean;
    Begin
    If activatekeyboardlayout ( hkl_next , kl_reorder ) then
    Result : = true
    Else
    Result : = false;
    End;

    [/TD]
    [/TR]
    [/TABLE]