PDA

View Full Version : استفاده از Windows API در یک برنامه



dipes480
یک شنبه 15 مرداد 1391, 05:04 صبح
سلام به همه مهندسین !
یک سوال داشتم... امیدوارم بتونم جوابشو اینجا پیدا کنم !
من میخوام با زبان C از یک Windows API به نام RTLCompressBuffer استفاده کنم....
این API برای ZIP کردن فایل ها استفاده میشه !(بدون WINZip)
http://msdn.microsoft.com/en-us/library/windows/hardware/ff552127%28v=vs.85%29.aspx

میخوام بیام با استفاده از همین API چند تا فایل رو Zip کنم ... لطفا راهنمایی کنید چه جوری میتونم ازش استفاده کنم ؟؟
من چون تا حالا از API ها استفاده نکردم .. کار باهاشونو نمیدونم !:افسرده:

ممنون ...

#target
یک شنبه 15 مرداد 1391, 09:55 صبح
این تابع یوزر مد نیست و اصلا برای زیپ کردن نیست. و شما نمیتونین در برنامه های معمولی ازش استفاده کنین . برای استفاده در درایور کاربرد داره

برای فشرده سازی کتابخانه های اماده وجود داره . Zlib مثلا یکی

dipes480
یک شنبه 15 مرداد 1391, 17:49 عصر
ممنون از پاسخ شما . . .
اگر user mode نیست پس این چیه ؟ http://www.literatecode.com/wzip
-------------------
میشه نحوه استفاده از zlib رو بگین چگونه هست ؟

tdkhakpur
یک شنبه 15 مرداد 1391, 20:47 عصر
این تابع یوزر مد نیست و اصلا برای زیپ کردن نیست. و شما نمیتونین در برنامه های معمولی ازش استفاده کنین . برای استفاده در درایور کاربرد داره

این توابع جزو توابع خود سیستم عامل(API) هست که پروسه هایش رو باید از ntdll.dll باید بگیرید.

میخوام بیام با استفاده از همین API چند تا فایل رو Zip کنم ... لطفا راهنمایی کنید چه جوری میتونم ازش استفاده کنم ؟؟
خب مشکلش کجاست همون نمونه کد که ارشاره کردید رو استفاده کنید بافر بهش میدید زیب میکنه بعد میتونید برش گردوند.

dipes480
یک شنبه 15 مرداد 1391, 23:07 عصر
خب مشکلش کجاست همون نمونه کد که ارشاره کردید رو استفاده کنید بافر بهش میدید زیب میکنه بعد میتونید برش گردوند.
متاسفانه مشکل اینجاست که من تا حالا با API ها کار نکردم .... و نمیتونم کد و تحلیل کنم !
لطفا منبع خوبی یا اینکه چه سر فصل هایی باید مطالعه کنم معرفی کنید (بافرها و API ها ...)
بساار ممنون . .

#target
یک شنبه 15 مرداد 1391, 23:56 عصر
این توابع جزو توابع خود سیستم عامل(API) هست که پروسه هایش رو باید از ntdll.dll باید بگیرید.
آره الان دیدم .

البته این میاد ی بافر رو فشرده میکنه . فایل zip درست نمیکنه که !! بنظر وظیفه برنامه نویسه که باید خودش فایل zip رو با توجه به ساختارش ایجاد کنه ( یا مثلا خودش ی ساختار فایل جدیدی ایجاد کنه


میشه نحوه استفاده از zlib رو بگین چگونه هست ؟
ی کد نوشتم برا فشرده سازی (بازگردانی هم میشه نوشت ساده ) ( میتونی فایل رو با7zip باز کنی )
باید شما اول Zlib رو از سایتش (http://zlib.net/) دانلود کنی (به پست هم Attach میکنم)بعد فایل lib رو داخل پوشه lib کامپایلر بریزی
فایل .h هم کنار سورست
#include "zlib.h"
#pragma comment ( lib , "zdll.lib")

int main()
{
gzFile *CompFile = (gzFile *)gzopen("CompressedFile.Gz","wb");
gzwrite(CompFile,"hhhhgggghhhhgggghhhhhhhhgggghhhhgggghhhhhhhhgggghh hhgggghhhh",60);
gzclose(CompFile);
}
فایل اجرایی نیاز به zlib1.dll داره که داخل بسته که دانلود میکنی هست کنار فیل اجرایی بذار

tdkhakpur
دوشنبه 16 مرداد 1391, 02:06 صبح
متاسفانه مشکل اینجاست که من تا حالا با API ها کار نکردم .... و نمیتونم کد و تحلیل کنم !
لطفا منبع خوبی یا اینکه چه سر فصل هایی باید مطالعه کنم معرفی کنید (بافرها و API ها ...)
بساار ممنون . .
APi در اصل یه کتابخونه استاتیک هست که برای سیستم عامل طرای شده تا از اون طریق احتیاج نباشه برای ارتقاع سیستم عامل و برنامه های کاربردی اون از اول برنامه رو دستکاری کنند فقط با جایگزین کردن dll آپ دیت شده جدید به جای قدیمی عمل ارتقا به راحتی صورت میگیره.
حالا قضیه اینکه چطوری از API استفاده کنید برمیگرده به نوع DLL و توابعی که در داخلش قرار داره بعضی از توابع خودشون توابع دیگری در dll های دیگه رو صدا میزنن تا یه سری داده ها رو برایشان init کنه و این کار رو برای برنامه نویس رو سخت میکنند و بعضی ها هم مثل همین ntdll احتیاج به init های زیادی ندارند بلکه اگه بتونی ادرس تابعش رو گیر بیاری مثل همین نمونه کد که اشاره کردید و دادن پارامتر به تابع پیدا شده کارتون رو انجام میدید.
در مورد کد به این شکل کار میکنه dll توسط loadliberery بارگزاری میشه و ادرس تابع بوسیله GetProcessAddress از فایل بار گزاری شده بدست میاد و توی یه دونه اشاره گر قرار میگیره و شما از طریق ادرس تابع که اشاره گر بهش اشاره داره میتوانید توابع را صدا بزنید و کار مربوطه انجام بشه.
این هم یه نمونه توضیح در مورد API اما

http://forum.niksalehi.com/images/icons/icon1.png Api چیست؟


مخفف Application Programming Interface می باشدکه به معنای رابط برنامه سازی کاربردی می باشد.که از آن به نامهای Application Programmer Interface، Application Programmers Interface نیز یاد می شود. نام API به توابعی اطلاق می شود که در فایلهای مختلف ویندوز مانند Advapi32.dll ،User32.dll ، Ole32.dll ، Kernel32.dll، Winmm.dllWinspool.dll ، Gdi32.dll ، Mpr.dll ، netapi32.dll، sheu32.dll، Rasapi32.dll ، Version.dll، Wsock32.dll ، Comdlg32.dll وجود دارند.

ویندوز برای صدها کارمختلف خود ازاین تابع ها استفاده می کند و برنامه های کاربردی نیز به طور متعدد از این توابع استفاده می کنند. به عنوان
مثال در زبان برنامه نویسی ویژوال بیسیک هرخط کد را که تایپ می کنید و بعد برنامه را run می کنید ، توسط توابع API کنترل می شوند.هنگامی که دستور form1.print را برای نمایش یک پیغام بر روی فرم صادر می کند ، در واقع ویژوال بیسیک در پشت صحنه از تابع API ، Elliptic استفاده می شود. و همچنین توابع دیگر، حرکت ماوس ، صفحه کلید، رنگها ، دکمه ها ، منوها و صدها عملیات دیگر.

مشخصات توابع API
اگر بخواهیم توابع API را که اکثراً با زبان برنامه نویسی قدرتمند C نوشته شده اند را براساس ساختار سیستم عامل تقسیم بندی کنیم ، می توان آن رابه دو قسمت 16 بیتی و 32 بیتی تقسیم بندی کرد.
توابع 16 بیتی به تعداد بیش از 730 تابع و توابع 32بیتی به بیش از 6500 تابع می رسند. در تابع API مانند هر تابع ساخته شده در زبان های برنامه نویسی، متغیرهای ورودی خروجی وجود دارند. این متغیرهای می توانند از انواع Long ، Integer، Int'32، String ، Pchar ،Byte و ...باشند.در بعضی از توابع API این متغیرها فقط می توانند مقدار ثابت تعریف شده ای را بگیرند. این ثابتها در نوع 16 بیتی به تعداد بیش از 1800ثابت(Const) و در 32 بیتی به بیش از 5500 ثابت می رسند.
در تعدادی از توابع متغیرهای ورودی و یا خروجی به یک ساختار (type) اشاره دارند که فیلدهای این ساختار اطلاعات ورودی و یا برگشتی تابع را در خود نگهداری می کنند. تعداد این ساختار در نوع 16بیتی به بیش از 50ساختار و نوع 32 بیتی به بیش از 950 ساختار می رسند. ،
فایلهای dllحاوی توابع API

توابع API می توانند در فایلهای متعددی تعریف شده باشند ولی مهمترین و پرکاربردترین فایلهای به شرح زیر می باشد:
User32.dll : شامل توابعی می باشد که ابزار و محیط واسط بین سیستم عامل و کاربرد مثل ماوس ، صفحه کلید منوها و پنجره ها را کنترل می کنند.
Kernel32.dll: توابع مربوط به حافظه ، فایل، پارتیشن ، درایو و پوشه در این فایل می باشند.
Gdi32.dll : این فایل که مخفف GraphicsDevice Interface می باشد، توابع گرافیکی و ترسیمی را در خود دارد.
NetAp.dll : توابع مربوط به شبکه در این فایل موجود می باشد.
Advapi32.dll : توابع کار با ریجیستری در این موجود می باشد.
Winmm.dll : توابع مربوط به مالتی مدیا دراین فایل تعریف شده اند.
Winspool.drv : توابع مربوط به چاپگر وکار با آن در این فایل می باشند.
Comdlg32.dll : توابع مربوط به حالتهای مختلف پنجره ی common Dialog در این فایل تعریف شده است.




GOOGLE رو نگا کن مطلب در مورد API خیلی زیاده.