Option Explicit
Private Const HWND_BROADCAST As Long = &HFFFF&
Private Const WM_SYSCOMMAND As Long = &H112
Private Const SC_MONITORPOWER As Long = &HF170&
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any) As Long
Private Sub Command1_Click()
SendMessage HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal 2&
End Sub
上面的代碼只能執行一次關閉螢屏,然后就沒有回應了,為什么不能重復的多次關屏?要想能夠重復執行,該怎樣寫呢?
uj5u.com熱心網友回復:
不明白你說的“不能重復的多次執行”是什么意思。
如果螢屏“亮著”,執行一次,系統自然就會讓螢屏“熄屏”,干嘛要“執行多次”呢 !!!
在“熄屏”之后,如果你動了滑鼠、按了鍵盤上某個鍵,都會使螢屏恢復。
等螢屏亮起之后,你再次執行那個代碼,沒有問題啊…………
uj5u.com熱心網友回復:
我用的作業系統是win7。我說的是,希望那段代碼執行后不關閉,然后隨時點擊按鈕,就可以隨時關閉螢屏。實際上,那段代碼在執行后,第一次點擊按鈕,可以關閉螢屏,然后那段代碼就進入無回應狀態,即使啟用螢屏之后,在不關閉代碼的情況下,弟二次點擊按鈕,就沒有反應了。代碼是我在網上搜到的,聽人說要想學好API,需要對C語言和作業系統的運行機制有很深的了解,可我不會任何編程語言,零基礎,VB也是剛看教程,連新手都談不上,希望編程大神們能夠不吝賜教!uj5u.com熱心網友回復:
“希望那段代碼執行后不關閉” 你這說法好奇怪!
如果執行了,它怎么可能不關閉!
這并不是說,“有代碼就一定會被執行到”的,就比如你貼出來的這一段,
在“運行程式”后,還需要觸發那個“按鈕單擊事件”,或者代碼中其它地方“主動呼叫”,才會被執行。
如果“全部代碼”就是你貼出來的那些,當然就沒有“其它地方呼叫”的,唯一的執行條件就是“觸發事件”。
這個跟“系統”無關的(網友:我的安卓系統,能運行嗎? 我:滾!!!),
Win2K以上的系統,肯定都沒問題。如果你還能找到Win98的話,估計也能正確運行的。
我剛才也試過,反復關閉/恢復了10來次,都沒發生“不起作用”的事。我的系統是 Win7 旗艦版,64位/SP1 。
你需要注意的是,點擊滑鼠之后,在它“關閉程序”中,就不要移動滑鼠、碰到任何按鍵了……
你自己可以新建一個標準EXE工程、畫個按鈕,把代碼粘貼上去,運行試試。
uj5u.com熱心網友回復:
僅供參考:#pragma comment(lib,"user32")
#include <windows.h>
void main() {
::SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);
Sleep(1000);
::SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);
Sleep(1000);
::SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);
}
uj5u.com熱心網友回復:
是VB代碼,樓上的思路行不通啊!uj5u.com熱心網友回復:
將4樓C代碼編譯生成比如MonitorPowerOff.exe
然后在VB6中
Shell “MonitorPowerOff.exe”,vbHide
uj5u.com熱心網友回復:
不好意思,不會用VC++uj5u.com熱心網友回復:
你的VB6代碼就能正常運行的,還用什么C++ !!!
uj5u.com熱心網友回復:
因為老趙最喜歡干這種脫褲子放屁的事來誤導別人啊
,不然怎么彰顯B格。
uj5u.com熱心網友回復:
不對,彰顯C格。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/51440.html
標籤:API
