PDA

View Full Version : سوال: اجرای اسکرین سیور در دی ال ال



nsco_nsco
چهارشنبه 31 فروردین 1390, 05:46 صبح
سلام دوستان زمانی که کد زیر را در فایل اگزه قرار می دهم به خوبی اسکرین سیور اجرا می شود:


SendMessage(Application.Handle,WM_SYSCOMMAND, SC_SCREENSAVE,0);

اما زمانی که در فایل دی ال ال قرار می دهم و در فایل اگزه فراخوانی می کنم نمایش داده نمی شود فکر می کنم مال هندل باشد ممنون می شوم دستوری که اسکرین سیور رو بتونم در دی ال ال بنویسم و در فایل اگزه فراخوانی کنم را بنویسید ممنون می شوم سریع یاری برسانید با تشکر از همه شما دوستان:تشویق::قلب:

SAASTN
چهارشنبه 31 فروردین 1390, 08:51 صبح
خوب شما که خودت علت رو تشخیص دادی دیگه، کافیه برای اون تابعی که تو DLL قراره اجرا بشه Application.Handle مربوط به Exe رو ارسال کنی.
function ShowScreenSaver(AppHandle: HWND): Integer;
begin
Result := SendMessage(AppHandle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
end;

nsco_nsco
چهارشنبه 31 فروردین 1390, 12:10 عصر
سلام ممنون از پاسختون
اما من بعد از قرار دادن این کد در دی ال ال ارور می دهد و در خط فانکشن ارور می گیرید لطفا کمک کنید با تشکر:قلب:

nilidelphi
چهارشنبه 31 فروردین 1390, 13:47 عصر
چه اروری میده لطفا ارور رو بذارین.

البته اگه به جای Application.Handle فقط از خود Handle استفاده کنید فکر کنم مشکلی نباشه.

ولی متدی که دوستمون نوشته مشکلی نداره.

nsco_nsco
پنج شنبه 01 اردیبهشت 1390, 17:11 عصر
سلام این عکس همون موقع کامپایل نمی زاره که کامپایل بشه و سر فانکشن ارور می گیره :
http://up.yns.ir/upload_image/b846c86a81d027edc2e30c94c87bbd26.jpg
ممنون می شوم سریع پاسخ بدید با تشکر :قلب:

vcldeveloper
پنج شنبه 01 اردیبهشت 1390, 17:53 عصر
سلام این عکس همون موقع کامپایل نمی زاره که کامپایل بشه و سر فانکشن ارور می گیره
خب یه نگاه هم به پیام خطایی که داده میانداختید!!

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

nsco_nsco
پنج شنبه 01 اردیبهشت 1390, 21:18 عصر
سلام ممنون از پاسختون اخرش تونستم با کد زیر ماجرا رو حل کنم :


SendMessage(GetDesktopWindow, WM_SYSCOMMAND, SC_SCREENSAVE, 0);


ولی نمی دونم چطور مانیتور رو به حالت خاموشی ببرم این کد رو پیدا کردم:


SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

ممنون می شوم یاریم کنید با تشکر :قلب:

Felony
پنج شنبه 01 اردیبهشت 1390, 22:13 عصر
ولی نمی دونم چطور مانیتور رو به حالت خاموشی ببرم این کد رو پیدا کردم:
SendMessage(Application.Handle,wm_SysCommand,SC_Mo nitorPower,1);
SendMessage(Application.Handle,wm_SysCommand,SC_Mo nitorPower,-1);

SAASTN
پنج شنبه 01 اردیبهشت 1390, 23:23 عصر
اما من بعد از قرار دادن این کد در دی ال ال ارور می دهد و در خط فانکشن ارور می گیرید لطفا کمک کنید با تشکر

میگه برای تعریف function باید یک نوع داده خروجی هم براش در نظر گرفته بشه. function ایی که شما نوشتید، هیچ نوع خروجی براش تعریف نشده
آقا واقعا شرمنده، این خرابکاری ایه که من کردم، همینطوری بی توجه یه چیزی تو QuickRep نوشتم.

nsco_nsco
جمعه 02 اردیبهشت 1390, 07:29 صبح
سلام دوستان ممنون از پاسخ هاتون اما من کدی می خوام که در دی ال ال بشه استفاده کرد و درست جواب بده ممنون می شوم کمک کنید :قلب:

nsco_nsco
جمعه 02 اردیبهشت 1390, 07:55 صبح
سلام دوستان یافتم! یافتم!
این دو روزه خیلی دنبالش گشتم و با کلی درد سر امروز یافتمش این رو برای دوستانی می نویسم که شاید مثل من با این نوع کد ها مشکلی برایشون پیش امده باشه و هرچی می گردند کسی یا چیزی نیست که به کمکشون بیا و از همه دوستانی که در این تاپینگ کمک کردن هم متشکرم این رو :
HWND_BROADCAST
به جای هندل بنویسید برای هر دو کد هم جواب می دهد با تشکر:قلب:

Felony
جمعه 02 اردیبهشت 1390, 08:56 صبح
استفاده از HWND_BROADCAST باعث میشه پیغام به همه پنجره های top-level برسه ، حالا اگر یک برنامه برای این پیغام ها Message Handler نوشته باشه این پیغام رو هندل میکنه و ممکنه به اشتباه کاری رو انجام بده .

nsco_nsco
جمعه 02 اردیبهشت 1390, 10:02 صبح
سلام ممنون از کمکتون میشه یکی دیگه معرفی کنید که این مشکل براش به وجود نیاد؟ ممنون میشم :قلب:

SAASTN
جمعه 02 اردیبهشت 1390, 10:11 صبح
سلام دوستان ممنون از پاسخ هاتون اما من کدی می خوام که در دی ال ال بشه استفاده کرد و درست جواب بده ممنون می شوم کمک کنید
آقا به جان خودم اون پست دو قبلی رو یه : Integer تهش بذاری کار میکنه ها! (البته الان اصلاح شده)
یه برنامه هم نوشتم که رو سیستم من کار میکنه حالا شما هم یه تستی بنداز. فقط BuildAll یادتون نره.

SendMessage(Application.Handle,wm_SysCommand,SC_Mo nitorPower,1);
SendMessage(Application.Handle,wm_SysCommand,SC_Mo nitorPower,-1
msdn اینجوری گفته:
-1 (the display is powering on)
1 (the display is going to low power)
2 (the display is being shut off)
اون low-powerش که رو سیستم من تاثیر بصری نداره، حالا نمی دونم اصلا مونیتورم پشتیبانی می کنه یا نه، ولی عین آدم روشن و خاموش میشه.