با سلام به همه
دوستان من یه برنامه نوشتم که به یه سخت افزار وصله و هر بار که سخت افزار دستور میده یه عکس رو نشون میده
مشکل اینجاست که بعد از چند وقت میره رو اسکرین سیور و صفحه سیاه میشه و تا کیبورد رو نزنی خارج نمیشه و روی برنامه نمیاد
اگر کسی میتونه کمکم کنه ممنونش میشم
چطوری برنامه وی بی اسکرین سیور رو از کار بندازه که مانیتور خاموش نشه
ممنون از همه
با تشکر اما چیز بدردبخوری نبود میتونید یه منبع دیگه معرفی بفرمائید
چرا بابا چیزای قشنگی نوشتن که :
نقل قول: If you need the display to stay on for example, you would call SetThreadExecutionState(ES_DISPLAY_REQUIRED|ES_CONTINUOUS);
On 2000/XP you could use the ES_USER_PRESENT flag (Does not work on Vista+)
برای اینکه صفحه نمایش در اختیار شما باشه میتونین از این تابع استفاده کنین
یعنی حتی نذاره سیستم بخوابه کلا سیستم رو به برنامه شما مقید کنه .
اینم مثالش برای وی بی :
ولی نمیدونم جواب بده یا نه
کد:
Private Declare Function SetThreadExecutionState Lib "kernel32" (ByVal esFlags As Long) As Long
Private Const ES_SYSTEM_REQUIRED = &H1
Private Const ES_DISPLAY_REQUIRED = &H2
Private Const ES_CONTINUOUS = &H80000000
Private Sub Form_Load()
Dim lReturn As Long
lReturn = SetThreadExecutionState(ES_SYSTEM_REQUIRED)
End Sub
Private Sub Form_Terminate()
Dim lReturn As Long
lReturn = SetThreadExecutionState(ES_CONTINUOUS)
End Sub
منبع
ولی فقط برای کنترل اسکرین سیور میشه کارای دیگه ای هم کرد :
یک :
موقع اجرا شدن برنامه جلوی اجرای اسکرین سیور رو گرفت و موقع خروج دوباره ریست کرد :
کد:
Private Const SPI_SETSCREENSAVEACTIVE = 17
Private Const SPI_GETSCREENSAVEACTIVE = 16
Private Const SPIF_SENDWININICHANGE = &H2
Private Const SPIF_UPDATEINIFILE = &H1
Private Declare Function SystemParametersInfo Lib "user32" Alias _
"SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, _
ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
Function SetScreenSaverState(ByVal enabled As Boolean) As Boolean
Dim fuWinIni As Long
SetScreenSaverState = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, enabled, _
ByVal 0&, fuWinIni) <> 0
End Function
Private Sub Form_Load()
SetScreenSaverState (False)
End Sub
Private Sub Form_Terminate()
SetScreenSaverState (True)
End Sub
منبع
و یه راه هم این که موقع اجرا شدن اسکرین سیور یه کلید بفرستیم :
کد:
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uiAction As Long, ByVal uiParam As Long, pvParam As Any, ByVal fWInIni As Long) As Boolean
Private Const SPI_GETSCREENSAVEACTIVE As Long = &H10
Private Const SPI_GETSCREENSAVERRUNNING As Long = &H72
Private Sub Form_Load()
Dim bActive As Boolean
SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0, bActive, False
If bActive Then
Timer1.enabled = True
Else
Timer1.enabled = False
End If
End Sub
Private Sub Timer1_Timer()
Dim bRunning As Boolean
SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False
If bRunning Then
SendKeys "-"
End If
End Sub
منبع
سلام با اون کدها هیچکدوم نشد ولی از سند کی کمک گرفتم شد البته باید تست کنم ببینم
اگه مانیتور خاموش نشه درسته ولی اسکرین سیور رو از کار میندازه
ممنون دوست عزیز
(۲۴-اسفند-۱۳۸۹, ۱۳:۲۷:۰۰)kimiafars نوشته است: [ -> ]با سلام به همه
دوستان من یه برنامه نوشتم که به یه سخت افزار وصله و هر بار که سخت افزار دستور میده یه عکس رو نشون میده
مشکل اینجاست که بعد از چند وقت میره رو اسکرین سیور و صفحه سیاه میشه و تا کیبورد رو نزنی خارج نمیشه و روی برنامه نمیاد
اگر کسی میتونه کمکم کنه ممنونش میشم
چطوری برنامه وی بی اسکرین سیور رو از کار بندازه که مانیتور خاموش نشه
ممنون از همه
خب چرا يه رايت كليك نميكني روي دسكتاپ توي تنظيمات و كلا اسكرين سيور را ديزيبل نميكني؟
پيوست :
کد:
procedure SimulateKey(key:byte;Extra:Dword);
begin
keybd_event(key,extra,0,0);
keybd_event(key,extra,KEYEVENTF_KEYUP,0);
end;
دیزیبل کردم اما مشکل از جای دیگست مانیتور هم میره رو اسکرین سیور
(۲۵-اسفند-۱۳۸۹, ۲۲:۲۹:۳۹)kimiafars نوشته است: [ -> ]دیزیبل کردم اما مشکل از جای دیگست مانیتور هم میره رو اسکرین سیور
يعني مانيتور هوشمنده خودش اسكرين سيور داره ؟ بابا اي ول :)
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
اون 1 را بزاري 0 خاموش ميشه مانيتور وبرعكس
خودت مانيتور را خاموش روشن كن..
(۲۵-اسفند-۱۳۸۹, ۲۳:۰۱:۱۲)joker نوشته است: [ -> ] (۲۵-اسفند-۱۳۸۹, ۲۲:۲۹:۳۹)kimiafars نوشته است: [ -> ]دیزیبل کردم اما مشکل از جای دیگست مانیتور هم میره رو اسکرین سیور
يعني مانيتور هوشمنده خودش اسكرين سيور داره ؟ بابا اي ول :)
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
اون 1 را بزاري 0 خاموش ميشه مانيتور وبرعكس
خودت مانيتور را خاموش روشن كن..
سلام.
من که تا حالا مانیتوری ندیدم خودش بره رو اسکرین. فکر میکنم اشتباه میکنه دوستمون.
جوکر جان این کد مانیتور رو خاموش روشن میکنه که بعد از روشن شدن مانیتور باید موس تکون بخوره تا تصویر بیاد.
والا منم فكر ميكنم اشتباه ميكنه يه جائيش را :) ولي خب
اينم كد شبيه ساز فشرده شدن موس ( البته نميدونم اسكرين سيور از وقفه كيبورد استفاده ميكنه يا چيزديگه ،تست كنه )
کد:
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_MOVE,1,0,0,0);