با سلام
اگر سوالم تكراري است از كم كاري نيست از نداشتن وقت است ولي باور كنيد هرچه گشتم نتوانستم پيدا كنم .
من مي خواستم يك سرويس را در دلفي اجرا كنم كه اگر برنامه اي خاص در حال اجرا باشد كاربر نتواند از كليد PrntScreen استفاده كند . تمام مراحل را مي روم و وقتي بدون ServiceApplication اجرا مي كنم انجام مي دهد ولي در ServiceApplication هيچ عكس العملي انجام نمي دهد . اگر امكان دارد مرا راهنمايي فرماييد .:
elagoli نوشته است:تمام مراحل را مي روم و وقتي بدون ServiceApplication اجرا مي كنم انجام مي دهد ولي در ServiceApplication هيچ عكس العملي انجام نمي دهد . اگر امكان دارد مرا راهنمايي فرماييد .:
مگه چیکار میکنی؟
میتونی دکمه printscreen رو با GetAsyncKeyStateچک کنی و بعدش کلیپبورد رو خالی کنی
کدتو تو کدوم رویدادش مینویسی؟از timer استفاده میکنی؟
lord_viper نوشته است:میتونی دکمه printscreen رو با GetAsyncKeyStateچک کنی و بعدش کلیپبورد رو خالی کنی
با سلام
اين كار را انجام داده ام
lord_viper نوشته است:کدتو تو کدوم رویدادش مینویسی؟
در رويداد OnExecute
lord_viper نوشته است:از timer استفاده میکنی؟
چطور استفاده كنم
با تشكر
خیلی راحت timer رو بنداز تو سرویست بعد روش کلیک کن و کدتوش بنویس
در رویدادonexecute چون ازthread خود برنامه استفاده میکنه باید قبل نوشتن کد بنویسی
while not( terminate) do
اگه این کارو نکنی وقتی کدت 1 بار اجرا شد اوتومات چون کارش تمام میشه رویداد terminate اجرا میشه
موفق باشی
lord_viper نوشته است:خیلی راحت timer رو بنداز تو سرویست بعد روش کلیک کن و کدتوش بنویس
در رویدادonexecute چون ازthread خود برنامه استفاده میکنه باید قبل نوشتن کد بنویسی
while not( terminate) do
اگه این کارو نکنی وقتی کدت 1 بار اجرا شد اوتومات چون کارش تمام میشه رویداد terminate اجرا میشه
موفق باشی
با سلام و تشكر از توجه شما
من كدي رو كه نوشتم مي گذارم ميشه لطفا توضيح بديد چرا كار نميكند
سرویسها 2 تا رویداد دارن onexcute و onstart که دومی قبل اولی اجرا میشه و کار باهاش بهتره ولی مشکلی که داره اینه که باید براش یه thread تعریف کنی و کدهاتو توش بنویسی اما onexcute ازthread خود سرویس استفاده میکنه و مشکلاتشم که میبینی فعلا کدتو دانلودیدم هنوز وقت نکردم نگاهی بهش بندازم
با سلام و تشكر از شما
با سپاس از وقتي كه مي گذاريد . منتظر نظر لطف شما هستم .
سلام من برنامتو چک کردم دیدم ارروری که میده در رابطه با رجیستر نشدنشه وقتی یه سرویس مینویسی باید تو کامپیوتر مقصد رجیستر بشه(اسمش تو لیست سرویسها اضافه بشه)
اینم مقاله ای که در مورد سرویسها داشتم امیدوارم به دردت بخوره
خوب ابتدا توضيحي كوتاه در مورد service ها :
حتما تا كنون در windows xp پيش آمده كه كليدهاي cntrl+Alt+Delete را فشار دهيد.با اين كار صفحه Windows task manager باز ميشود و يكي از tab هاي آن Processes مي باشد.در اين tab تعدادي برنامه با پسوند EXE كه در حال حاضر در حال اجرا بر روي كامپيوتر شما هستند همراه با درصدي از cpu و memory كه توسط هر كدام از آنها مورد استفاده قرار مي گيرد نشان داده شده اند. اگر با دقت بيشتري به اين ليست نگاه كنيد متوجه خواهيد شد كه تعدادي از برنامه هاي نصب شده بر روي سيستم شما به همراه سرويسهايي كه وظيفه انجام امور اصلي و داخلي windows را بر عهده دارند در اين ليست قرار گرفته اند. حال به عنوان يك برنامه نويس دلفي آيا ما ميتوانيم يك Service براي برنامه خود ايجاد كنيم و مزيت و كاربردهاي برنامه نويسي به صورت سرويس چيست؟جواب سوال اول مثبت است. ما مي توانيم در دلفي service مورد نظر خود را ايجاد كنيم. كافي است در File/New گزينه Service Application را انتخاب كرده و آنگاه منتظر شاهكار دلفي بمانيم.لازم به ذكر است كه من اين موضوع را در دلفي هفت توضيح مي دهم. وقتي يك Service در ويندوز نصب مي شود در پشت پرده و بدون اينكه نيازي به متوجه بودن كابر باشد اعمال مورد نظر برنامه نويس انجام مي شود.در حقيقت يك Service را مي توان به منزله يك ربات دانست كه امور محوله را به نحو احسن در سيستم انجام ميدهد. براي روشن شدن موضوع يك مثال ميزنم : يكي از سرويسهايي كه مي توان مثال زد سيستم هشدار در ساعت معين است.اگر اين برنامه به صورت يك سرويس نوشته شود و در مجموعه سرويسهاي ويندوز نصب شود هر بار پس از روشن شدن سيستم به صورت اتوماتيك بارگزاري شده و منتظر روي دادن تاريخ و ساعت معين ميشود.در صورت رسيدن به آن زمان پيام يا آلارمي كه قبلا تعريف شده است را اجرا ميكند.يكي از بهترين مزيت هاي برنامه نويسي به صورت سرويس اين است كه اگر يك سرويس بر روي سيستمي در حال اجرا باشد حتا اگر آن سيستم در حالت Log off هم قرار داشته باشد سرويس مورد نظر وظيفه خود را به خوبي انجام ميدهد.مثلا در مثال قبلي فرض كنيد موقع هشدار وقتي باشد كه كامپيوتر Log off است.در اين صورت باز هم سرويس آلارم مورد نظر را پخش خواهد كرد.
پس بدون مقدمه اضافي كار را شروع مي كنيم. دلفي عزيز را باز كنيد و از تب File/New گزينه Service Application را انتخاب فرماييد. با اين كار پروژه جديدي باز مي شود كه شامل يك module به نام Service1 مي باشد كه كامپوننتهاي مورد نياز خود را مي توانيد روي آن قرار دهيد.شما در پروژه خود يك شي از نوع Tservice1 داريد كه قسمت اصلي كار ما مي باشد.در object inspector خاصيت displayname سرويس خود را به Mytstsrv تغيير دهيد.اين نامي است كه سرويس با آن نمايش داده مي شود و در ادامه متوجه نقش آن خواهيد شد.حال اول ببينيم دوست داريم اين سرويس چه عملي براي ما انجام دهد.بياييد يك كار ساده از سرويس خود بخواهيم.به اين صورت كه هر 10 ثانيه يك مرتبه پيامي نمايش داده شود.پس براي اين منظور از تب system يك timer به پروژه خود اضافه كنيد و خاصيت Interval آنرا روي 10000 تنظيم كنيد.در ادامه در on timer مربوط به شي timer كد زير را وارد كنيد:
کد:
کد:
Showmessage(‘My Service is work currently!!');مهمترين نكته در نوشتن سرويس را فراموش كردم بگويم. لطفا ابتدا به services درcontrol panel رفته و سرويس خود را بيابيد و آنرا stop كنيد.سپس دلفي را اجرا نموده و برنامه اي كه نوشته ايد را باز كنيد و آنرا با uninstall/ اجرا كنيد.حال در on execute مربوط به service (يكي از event هاي سرويس است) كد زير را وارد كنيد :
کد:
کد:
while not Terminated do
ServiceThread.ProcessRequests(True);// wait for terminationخوب همين!!. حال بياييد سرويس خود را اجرا كنيم. براي اينكه سرويسي كه نوشته ايد بر روي سيستم نصب شود بايد آنرا با پارامتر Install/ اجرا كنيد. پس به قسمت Run/Parameters رفته و در محل Parameters اين عنوان را اضافه كنيد : install/ حال اگر برنامه را Run كنيد سرويس شما بر روي كامپيوتر نصب مي شود.براي اينكه سرويس خود را ببينيد به Control Panel/Administrative Tools رفته و وارد Services شويد.در اين پنجره كليه سرويسهايي كه روي كامپيوتر شما Install شده اند نشان داده مي شود.حال به دنبال سرويس خود با نام Mytstserv بگرديد.پس از يافتن آنرا انتخاب كنيد و در سمت چپ گزينه Start را انتخاب كنيد.با اين كار Service شما اجرا مي شود و شروع به اجراي فرامين شما مي كند. لازم است اين را هم اضافه كنم كه شما در خود پروژه هم مي توانيد با دستوري پس از Install شدن سرويس آنرا اجرا كنيد كه در فرصت مناسب به آن اشاره خواهم كرد.خوب پس از طي مراحل فوق سرويس آماده خدمت گزاري به شماست.از اين پس هر بار پس ازروشن شدن كامپيوتر به صورت خودكار سرويس شما Start شده و ماموريت خود را در پشت پرده انجام مي دهد. يك نكته ديگر باقي مانده و آن هم طريقه UnInstall كردن سرويسمان است.براي اين كار ابتدا به Services برويد و پس از انتخاب سرويس خود از سمت چپ گزينه Stop را انتخاب كنيد.حال سرويس خود را اينبار با پارامترUnInstall/اجرا كنيد. پيامي مبني بر اينكه سرويس از سيستم حذف شد دريافت خواهيد كرد.البته هنوز موارد ناگفته زيادي باقي مانده كه اگر عمري باقي بود به مرور بيان ميكنم. خوب فكر كنم حسابي كيف كرديد. من كه وقتي اولين سرويس خود را نوشتم خيلي ذوق زده شدم. اميدوارم شما حتما حتما سراغ دلفي رفته و سرويس نويسي را امتحان كنيد و نتايجي كه بدست مي آوريد را در اينجا براي بقيه بازگو كنيد.من منتظرم.حال كمي قوه تخيل خود را پرواز بدهيد و ببينيد با يك سرويس چه كارهايي مي توان انجام داد:يكي را من مي گويم. شما مي توانيد يك روباط هوشمند طراحي كنيد.آنرا در كامپيوتر خود قرار دهيد و سپس از طريق اينترنت به كامپيوترتان وصل شده و از راه دور سيستم خود را كاملا هدايت كنيد.البته اين كار مستلزم دانستن روش كار با كامپوننتهاي ديگر دلفي هم هست.
برای نوشتن یک Service Application که بتواند هر 10 ثانیه یک پیغام نشان دهد:ابتدا از منوی file گزینه New را انتخاب کرده و سپس روی گزینه Other کلیک کنید بعد در پنجره باز شده از سربرگ New گزینه ServiceApplication را انتخاب کنید. با انجام این کار یک کلاس با نام TService1 ایجاد می شود که می توانید با قرار دادن هر شیء مورد دلخواه بر روی فرم آن برنامه خود را بنویسید. برای برنامه ما از سربرگ System یک Timer بر روی سرویس گذاشته و خاصیت Interval آن را 10000 بگذارید. حال در رویداد OnTimer کد زیر را بنویسید:
کد:
کد:
Showmessage('My Service is worked currently!!');خاصیت DisplayName مربوط به Service1 را به MyTstSrv تغییر دهید. این نام بعد از اجرای سرویس در لیست سرویسها ظاهر می شود.خاصیت Interactive مربوط به Service1 را به True تغییر دهید.در رویداد OnExecute مربوط به Service1 کد زیر را بنویسید:
کد:
کد:
while not Terminated do
ServiceThread.ProcessRequests(True);// wait for terminationحال موقع نصب سرویس بر روی ویندوز رسیده است. برای اینکار باید برنامه را با پارامترinstall/ اجرا کنید. پس در دلفی به منوی Run رفته و روی گزینه Parameters کلیک کنید. در این پنجره در کادر مربوط به Parameters عبارتinstall/ را تایپ کنید و روی Ok کلیک کنید. حال برنامه را اجرا کنید. اگر همه مراحل را بدرستی انجام داده باشید پیغام Service installed successfully ظاهر می شود.حال باید به لیست سرویسهای ویندوز بروید و سرویس خود را Start کنید. (این سرویس می تواند با restart شدن ویندوز نیز Start شود) برای این کار به Control Panel رفته و پنجره Administrative Tools را باز کنید. در این پنجره روی گزینه Services دابل کلیک کنید. با انجام این کار یک پنجره باز می شود که نام تمامی سریسهای نصب شده برروی ویندوز وجود دارند. نام MyTstSrv را پیدا کرده و روی آن کلیک راست کنید و سپس گزینه Start را انتخاب کنید. با انجام این کار سرویس شما Start شده و باید هر 10 ثانیه یکبار پیام شمار را نمایش دهد.برای حذف کردن سرویس از روی ویندوز باید برنامه را با پارامتر Uninstall/ اجرا کنید. با انجام این کار پیام Service Uninstalled Successfully ظاهر می شود.