PDA

View Full Version : چگونگی تشخیص وضعیت ویندوز ؟؟؟



mk53853
یک شنبه 06 خرداد 1386, 16:12 عصر
با سلام

با چه دستور یا برنامه ای میشه فهمید که ویندوز در چه وضعیتی مثل logoff یا restart قرار داره


با تشکر

soroush_vs
یک شنبه 06 خرداد 1386, 21:08 عصر
وقتی که سیستم عامل ویندوز میخاد به یکی از این حالات بره به برنامه های کاربردی یه Message ارسال میکنه مثلا موقع Restart یا Shutdown کردن WM_QueryEndSession پیام به برنامه های کاربردی در حال اجرا میفرسته برای بقیش هم سرچ کن سر نخ از ما سرچ از شما:چشمک:

m-khorsandi
دوشنبه 07 خرداد 1386, 07:28 صبح
چه کاری می‌خوای انجام بدی؟

mk53853
دوشنبه 07 خرداد 1386, 07:30 صبح
اگه برنامه بصورت سرویس باشه بازم از همین روش استفاده میشه ؟

mk53853
دوشنبه 07 خرداد 1386, 07:48 صبح
یک برنامه کلاینت سرور هست
میخوام وقتی کاربر از طریق کلاینت با یوزر ویندوز سرور وارد شبکه شد اسم کاربر و نام کامپیوتر اون برای برنامه سرور من ارسال بشه البته برنامه کلاینت من بصورت سرویس هست تا وقتی کاربر
logoff می کنه من بفهمم که کاربر logoff کارده و کاربر بعدی می خواد وارد بشه و برنامه کلاینت من بسته نشه برای تشخیص خارج شدن کاربر از محیط ویندوز

soroush_vs
دوشنبه 07 خرداد 1386, 09:17 صبح
اگه برنامه بصورت سرویس باشه بازم از همین روش استفاده میشه ؟
خب سرویس هم یه نوع برنامه کاربردی App هست دیگه
چرا تست نمیکنی؟

mk53853
دوشنبه 07 خرداد 1386, 09:38 صبح
لطفا اگه میشه یک برنامه کوچیک بذار

m-khorsandi
دوشنبه 07 خرداد 1386, 09:50 صبح
همونطوری که سروش گفت زمان Shutdown یا... پیغام WM_QUERYENDSESSION توسط کاربر درخواست کننده یا برنامه‌ای که یکی از توابع سیستمی Shutdown را فراخوانی کرده، به یکی یکی برنامه‌ها ارسال میشه. اگر هر برنامه‌ای در پاسخ به این پیغام مقدار صفر رو برگردونه، Shutdown انجام نخواهد شد، به این صورت که این پیغام به یک برنامه(پنجره) ارسال میشه و اگر نتیجه صفر بود، Shutdown انجام نخواهد شد و ارسال پیغام به سایر برنامه‌ها نیز متوقف خواهد شد. بعد از پردازش این پیغام، سیستم پیغام WM_ENDSESSION رو ارسال خواهد کرد. اصولاً از پیغام اول برای متوقف کردن Shutdown و از پیغام دوم برای تشخص shutdown استفاده میشه. تو msdn از ارسال این دو پیغام به شیء window صحبت شده و منم فکر میکنم که این پیغام‌ها برای برنامه‌هایی که رابط کاربری دارند استفاده میشه.

soroush_vs
دوشنبه 07 خرداد 1386, 09:54 صبح
کاملا درسته ولی بعید میدونم برای برنامه های با رابط کاربری باشه در حالت کلی برای Application ها گفته شده که این رویه اتفاق میفته

mk53853
دوشنبه 07 خرداد 1386, 10:40 صبح
به این علت میخوام استفاده کنم که وقتی ویندوز بالا می یاد برنامه من باید اسم کاربر رو به سمت سرور بفرسته قبل از اینکه برنامه رو سرویس کنم کاربر بعد از دادن یوزر و پسورد اسم کاربر به سمت سرور می رفت ولی حالا که کاربر وارد ویندوز می شه به جای اسم کاربر کلمه SYSTEM به سمت سرور میره لطفا مرا راهنمای کنید تا اسم کاربر رو دقیقا به سمت سرور بفرستم .

درضمن شبکه من ویندوز 2003 سرور هست می خواستم بدونم بدون اینکه برنامه کلاینت سروری نوشته بشه میشه اسم کاربرانی که در حال کار با شبکه هستند رو در آورد؟

soroush_vs
دوشنبه 07 خرداد 1386, 12:10 عصر
حق با شما هست پس چاره ای نیست جز رجیستری HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer
بعدش هم Logon User Name
user name کاربری رو که الان Log in کرده اینجا ثبت میشه
البته میتونی از یه برنامه که Service نباشه هم استفاده کنی که به نظرمن همون راه اول بهتره

soroush_vs
دوشنبه 07 خرداد 1386, 13:08 عصر
من این پیغام رو برای service تست کردم اما جواب نداد فکر میکنم حق با آقای خرسندی باشه ولی باید راهی باشه.
من خیلی علاقه مندم که بدونم راهش چیه ولی وقتی هم برای تحقیق ندارم
موفق باشی

soroush_vs
دوشنبه 07 خرداد 1386, 13:09 عصر
راستی برنامه نمونه هم توی about.com یه سرچ کن همین WMQueryEndSession رو پیداش میکنی

m-khorsandi
دوشنبه 07 خرداد 1386, 13:56 عصر
از توابع SCM استفاده کن، لینک زیر هم راهنمائیت میکنه :
Service Control Handler Function (http://msdn2.microsoft.com/en-us/library/ms685149.aspx)