نمایش نتایج 1 تا 9 از 9

نام تاپیک: نحوه طراحی نرم افزار ساخت پرینتر مجازی

  1. #1

    نحوه طراحی نرم افزار ساخت پرینتر مجازی

    با سلام خدمت دوستان

    من میخوام یه نرم افزار طراحی کنم که مثل نرم افزار هایی که PDF رو می سازند کار کنه و هرجا پرینت گرفته بشه بتونن اون محیط رو به یه پسوند خاص(که ما تعیین میکنیم نه کاربر) تبدیل کنه.
    اگر کسی تا بحال این کارو انجام داده و یا میتونه من رو راهنمایی کنه خیلی ممنون میشم به تاپیک من جواب بده.
    در ضمن محیطی که من کار میکنم سی شارپ هستش و با Visual Studio 2010 کار میکنم.
    منتظرم ، ممنون

  2. #2
    کاربر دائمی آواتار Esmail Solhkhah
    تاریخ عضویت
    مهر 1385
    محل زندگی
    بورکینافاسو
    پست
    1,774

    نقل قول: نحوه طراحی نرم افزار ساخت پرینتر مجازی

    راه اصولیش اینه که باید برا این کار یه درایور بنویسید

    اما درایور نویسی (کمی تا نیمه ابری) سخته و با زبانهای دات نت نمیشه درایور نوشت باید برید سراغ زبانهای Native

    اسمبلی - C - دلفی ( هر چند بهترین حالت C هست و اسمبلی کار زیادتری میبره)

    میتونید WDK مایکروسافت رو یه نیمه نیگا بندازید ببینید چه خبره

    http://www.microsoft.com/download/en....aspx?id=11800

    حدود 650 مگ هستش و شامل تمام ابزارهای لازمه برای نوشتن و تست درایور هست

    این سایت هم یه مرجع هست تو زمینه درایور نویسی و برنامه های سیستمی

    www.osronline.com

    و اما درایور:

    بصورت ساده یه فایل اجرایی که تو فاز لود سیستم عامل لود میشه و میتونه تو دو سطح یوزر یا کرنل کار کنه،درایور های سطح کرنل قدرت نامحدودی تو دسترسی به سخت افزار دارن

    میشه گفت عملا جزئی از سیستم عامل بشمار میرن ، معمولا با پسوند sys هستند ، سرویسهای ویندوز هم تقریبا یه شباهتهایی با درایورها دارن (جفتشون یجور مدیریت میشن)

    برنامه هایی که ما مثلا با C++‎‎ یا دلفی مینویسیم (Native)یا برنامه هایی که با پلتفرم دات نت مینویسیم تو بالاترین لایه ویندوز اجرا میشن

    (User Mode) در نتیجه جهت دسترسی به سخت افزار مجبورن از لایه های پایین تر عبور کنن اونجاس که تازه با آقایون مدیر (Memoey- IO - Security , ...)

    باید سلام علیکی بکنن ببینن اجازه دارن برن پایین یا بهشون گفته میشه (ورود خروس ممنوع) شما اینجا باش هرچی خاستی بگو من ببینم میتونم برات بیارم یا باید بیخیالش بشی

    و اونچه ما میگیم درسته.

    ولی درایور های سطح هسته خودشون همون پایین پایینا کنار این آقایون مدیر هستن و دوستی خوبی با جناب HAL دارن (Hardware abstraction Layer)

    http://en.wikipedia.org/wiki/Hardware_abstraction

    لایه HAL آخرین لایه سیستم عامل هست که سیستم عامل رو از سخت افزار جدا میکنه مثل همون لایه DAL خودمون

    خب تا اینجا گفتیم که دایور هم یه فایل اجرایی هست ولی به یه شکل دیگه پس اگه فایل اجرایی هست

    چطوری اجرا میشه خب همین برنامه هایی که با رفیق C#‎‎ مینویسیم رو نیگا کنید

    میبینید همیشه یه متد Main داره که نقطه آغاز برنامس چون سیستم عامل بیچاره از این همه کد شلوغ پلوغ باید یه جاشو بگیره به عنوان نقطه آغازی برنامه و از اونجا کد رو اجرا کنه

    قبلنا ORG 100 برامون خیلی آشنا بود (یادش بخیر)

    درایور ها هم یه نقطه شروع دان

    NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
    {
    DbgPrint("My First Driver\n");
    return STATUS_SUCCESS;
    }


    این برای شروع درایور که کلمه My First Driver رو موقع لود درایور نشون میده (البته مثل Console Application نباید انتظار اون صفحه سیاه رو داشته باشید)

    با استفاده از Dbgview.exe باید تعاملات درایور رو ببینید ، برا نصب و اینیت و لود درایور هم فعلا میتونید از osrloader.exe استفاده کنید.

    حالا میرسیم به کامپایل و ساخت فایل SYS

    یه فایل درست کنید بنام مثلا MyDriver.c

    با این کد

    #include <ntddk.h>

    NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
    {
    DbgPrint("My First Driver\n");
    return STATUS_SUCCESS;
    }


    کدها رو به زبان C++‎‎ نوشتم دوست داشتید از اسمبلی استفاده کنید و خودتونو بیچاره کنید

    یه فایل دیگه درست میکنید بنام makefile بدون پسوند شامل

    !INCLUDE $(NTMAKEENV)\makefile.def


    یه فایل دیگه درست میکنید بنام Sources بدون پسوند شامل

    TARGETNAME = MyDriver
    TARGETPATH = obj
    TARGETTYPE = DRIVER
    INCLUDES = %BUILD%\inc
    LIBS = %BUILD%\lib
    SOURCES = MyDriver.c


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

    D:\MyDriver


    بعد با فرض نصب WDK از استارت منو Windows Driver Kit رو پیدا کنید و از زیر شاخه WDK مربوطه

    x86 Checked Build Environment رو اجرا کنید و به مسیر D:\MyDriver برید

    بعد بنویسید Build

    منظر بمونید تا کار بیلد تموم بشه اگه کدتون مورد نداشته باشه کامپایل میشه و تو همون مسیر میبینید یکی دو تا فولدر ایجاد شد از فولدر obj میتونید درایور ساخته شده رو پیدا کنید

    بعد با osrloader.exe نصب و اینیت و لودش کنید

    حواستون باشه کوچکترین اشتباهی ممکنه باعث BSOD بشه

    http://en.wikipedia.org/wiki/Blue_Screen_of_Death

    اینجا دیگه سی شارپ نیس با یه اکسپشن ساده و کلوز قضیه رو رفع و رجوع کنیم

    اینا تازه مثل اینه که شما تو سی شارپ همون Hello World مرسوم رو بعنوان اولین برنامه نوشتید

    این همه داستان راستان گفتم تا بدونید اگه خودتون بخاید یه پرینتر مجازی بنویسید که کار پرینت به PDF یا عکس یا هر کوفت و زهر مار دیگه ای رو انجام بده واقعا باید وقت بذارید

    همین کار رو وقتی که میخای روش بذاری مثل یادگرفتن کل سی شارپ با مخلفاتش در نظر بگیر شایدم بیشتر

    چون اینجا مجبوری C++‎‎ یاد بگیری ، با ساختار سیستم عامل های خانواده NT آشنا باشی و تازه شروع کنی با WDK کار کردن

    قصدم مایوس کردن شما نیس خاستم عمق فاجعه رو نشون بدم

    کلک مرغابی هم میشه سوار کرد اما به شرطها و شروطها

    موفق باشید.

  3. #3

    نقل قول: نحوه طراحی نرم افزار ساخت پرینتر مجازی

    واقعا ممنون،
    من واسه یه کار تجاری بزرگ میخاستم این کارو انجام بدم و اگه ببینم ارزششو داره حتما تا تهش میرم جلو، اما این شما بودین که سرخط به من دادید و واقعا از شما ممنونم
    ایشاله موفق باشین!!

  4. #4
    کاربر دائمی آواتار Esmail Solhkhah
    تاریخ عضویت
    مهر 1385
    محل زندگی
    بورکینافاسو
    پست
    1,774

    نقل قول: نحوه طراحی نرم افزار ساخت پرینتر مجازی

    واقعا ممنون،
    من واسه یه کار تجاری بزرگ میخاستم این کارو انجام بدم و اگه ببینم ارزششو داره حتما تا تهش میرم جلو، اما این شما بودین که سرخط به من دادید و واقعا از شما ممنونم
    ایشاله موفق باشین!!
    شما لطف داید دوست عزیز

    برا این کارتون یه سری توضیحات میدم امیدوارم مفید واقع بشه

    اول اینکه تو سیستم عامل های خانواده NT به دلیل امنیت دسترسی فیزیکی به سخت افزاز وجود نداره و چاپگر هم خارج از این قاعده نیست

    اینجاس که بحث چاپگرهای مجازی به میون میاد ،وقتی شما یه پرینت به پرینتر میفرستید (Job) در حقیقت دارید این پرینت رو به چاپگر مجازی میفرستید

    (دقت کنید که آیکونهای پرینتر هایی رو که تو سیستم عامل میبینید در حقیقت همون چاپگرهای مجازی هستن)

    کار چاپ به چاپگر مجازی فرستاده میشه و این چاپگر مجازیه که کار چاپ رو به چاپگر فیزیکی میفرسته و این کار رو با استفاده از درایور انجام میده

    این بابا درایور دسترسی به سخت افزار رو از سیستم عامل اجازه داره

    حالا شما میاید و مثلا تو تنظیمات چاپگر میگید برگه ها پیش فرض A5 چاپ شن

    آیا این تنظیم رو دارید مستقیم رو چاپگر انجام میدید ؟ مطابق بحثی که داشتیم نه

    بلکه این چاپگر مجازیه که داره این تنظیمات رو بصورت کامندهای داخلی چاپگر براش میفرسته

    چاپگرها دارای کامندهای داخلی هستن (حتی شما میتونید با استفاده از یه اینترفیس سخت افزاری طراحی شده توسط خودتون با چاپگر کار کنید و نیاز به PC هم نداشته باشید)

    بیشتر تجهیزات جانبی کامپیوتر از هارد گرفته تا فلاپی دیسک و همین فلش دیسک ها و پرینتر ها و اسکنر ها داخلشون معمولا یه دونه یا چند تا

    میکروکنترلر هست که وظیفه ارتباط سخت افزار مربوطه رو با بیرون داره و برای این ارتباط یه سری استانداردهایی دارن که شما با داشتن این

    استانداردها میتونید اون قطعه رو خودتون مدیریت کنید ، یه مثال میزنم همین هارد اکسترنال چطوری به گیرنده های دیجیتال (یا دستگاههای تجهیزات شیطان ) وصل میشه؟

    داخل گیرنده که PC نیست ، خب اونجا هم یه میکرو کنترلر هست که با این قطعه از طریق کامندهای داخلی ارتباط برقرار کرده و داده ها رو ارسال و دریافت میکنه


    بگذریم وقتی شما دارید یه فایل رو پرینت میکنید مثلا یه فایل Word با زدن دکمه پرینت یه همچین چیزایی پس پرده و تو دل و روده ویندوز داره اتفاق می افته :


    برنامه میاد و GDI ویندوز رو فراخونی میکنه و جناب GDI هم درایور مربوطه چاپگر رو فراخونی میکنه این دو با هم میان و از اطلاعات فایل فرستاده شده (همون فایل Word)

    یه فایل EMF میسازن ساختار فایل EMF رو میتونید با کد نویسی مدیریت کنید تو این تاپیک(حذف شده) توضیح دادم (این قسمت رو تو پاورقی توضیح میدم ، فعلا باشه پاورفی 1)

    این فایل EMF شامل فراخوانیهای GDI و اصلاعات درایور مربوطه هست

    بعد این داستان، برنامه میاد و اسپولر رو فراخونی میکنه

    این بابا اسپولر Job رو میگیره و تو هارد ذخیره میکنه (یه جورایی پرینتها دارن کش میشن)

    شما میتونید مسیر این فایلها رو تغییر بدید ( این قضیه رو هم تو این تاپیک توضیح داده بودم که حذف شده ، مراجعه شود به پاورقی)

    به ازای هر Job ما معمولا دو تا فایل داریم

    1:فایلهای اسپولر با پسوند spl که همون فایل اصلی اسپول حساب میشه و حاوی اصلاعات پرینت درخواستی ما هست

    2:فایلهای سایه با پسوند shd که شامل اولویت Job - نام کاربر فرستنده - نام سیستم فرستنده و یه سری کوفت و زهر مار دیگس

    سرویس اسپولر رو میتونید تو سرویسهای ویندوز (Spooler) پیدا کنید



    کلک مرغابی که میگفتم همینه (Spooler) امیدوارم گرفته باشید دیگه جزئیات پیاده سازی یه پرینتر مجازی با این اسپولر با خودتون

    (ای بابا من که کل ماجرا رو لو دادم ، ولی مهم نیس شما پیادش کنید بذارید اینجا ما هم دعاتون میکنم حتی به خودمون زحمت نمیدیم یه دکمه تشکر براتون بزنیم)


    پاورقی 1 : اون پست رو حذفش کردن اگه علاقه مند بودید میتونم اونا رو هم توضیح بدم


    موفق باشید.
    آخرین ویرایش به وسیله Esmail Solhkhah : سه شنبه 25 بهمن 1390 در 00:48 صبح

  5. #5
    کاربر دائمی آواتار Esmail Solhkhah
    تاریخ عضویت
    مهر 1385
    محل زندگی
    بورکینافاسو
    پست
    1,774

    نقل قول: نحوه طراحی نرم افزار ساخت پرینتر مجازی

    یه پروژه اپن سورس خوب هم تو این زمینه هست حتما بررسیش کنید

    http://www.pdfforge.org/download

    این لینک رو گذاشتم تا دوستانی که تو این مورد میخان کار کنن دیگه زیاد به عمو گوگل زحمت ندن

  6. #6
    کاربر دائمی آواتار vof.ir
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    تهران
    پست
    249

    نقل قول: نحوه طراحی نرم افزار ساخت پرینتر مجازی

    جناب صلح خواه امکانش هست اون مواردی که فرمودید حذف شدند را توضیح بفرمایید؟
    ممنونم

  7. #7
    کاربر دائمی آواتار Esmail Solhkhah
    تاریخ عضویت
    مهر 1385
    محل زندگی
    بورکینافاسو
    پست
    1,774

    نقل قول: نحوه طراحی نرم افزار ساخت پرینتر مجازی

    جناب صلح خواه امکانش هست اون مواردی که فرمودید حذف شدند را توضیح بفرمایید؟
    ممنونم
    میثم جان شرمنده دیر جواب دادم، یه مدتیه گرفتارم شدید.

    چون میدونم با رفرنسهای خارجی موردی ندارید لینک میزارم .

    http://www.undocprint.org/winspool/spool_files

    http://www.codeproject.com/Articles/...ol-File-Viewer

    موفق باشید.

  8. #8

    نقل قول: نحوه طراحی نرم افزار ساخت پرینتر مجازی

    سلام
    از دوستان عزیز که مطلع هستند خواهش میکنم جواب بدن
    من میخوام اطلاعاتی که از 7 کامپیوتر بر روی یک پرینتر چاپ میشه رو قبل از چاپ به صورت فایل اکسل ذخیره کنم
    میشه لطفا منو راهنمایی کنین که چطوری میتونم شروع کنم؟
    باید برنامه بنویسم یا نرم افزاری هست که بتونم ازش کمک بگیرم؟
    ممنون میشم

  9. #9
    کاربر دائمی آواتار Esmail Solhkhah
    تاریخ عضویت
    مهر 1385
    محل زندگی
    بورکینافاسو
    پست
    1,774

    نقل قول: نحوه طراحی نرم افزار ساخت پرینتر مجازی

    سلام

    پست 2 و مخصوصا پست 4 رو کامل بخونید ، یه روش رو توضیح دادم.

    موفق باشید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •