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上面的代码只能执行一次关闭屏幕,然后就没有响应了,为什么不能重复的多次关屏?要想能够重复执行,该怎样写呢?

解决方案 »

  1.   

    我用的操作系统是win7。我说的是,希望那段代码执行后不关闭,然后随时点击按钮,就可以随时关闭屏幕。实际上,那段代码在执行后,第一次点击按钮,可以关闭屏幕,然后那段代码就进入无响应状态,即使启用屏幕之后,在不关闭代码的情况下,弟二次点击按钮,就没有反应了。代码是我在网上搜到的,听人说要想学好API,需要对C语言和操作系统的运行机制有很深的了解,可我不会任何编程语言,零基础,VB也是刚看教程,连新手都谈不上,希望编程大神们能够不吝赐教!
      

  2.   

    希望那段代码执行后不关闭” 你这说法好奇怪! 
    如果执行了,它怎么可能不关闭!这并不是说,“有代码就一定会被执行到”的,就比如你贴出来的这一段,
    在“运行程序”后,还需要触发那个“按钮单击事件”,或者代码中其它地方“主动调用”,才会被执行。
    如果“全部代码”就是你贴出来的那些,当然就没有“其它地方调用”的,唯一的执行条件就是“触发事件”。这个跟“系统”无关的(网友:我的安卓系统,能运行吗?  我:滚!!!),
      Win2K以上的系统,肯定都没问题。如果你还能找到Win98的话,估计也能正确运行的。
    我刚才也试过,反复关闭/恢复了10来次,都没发生“不起作用”的事。我的系统是 Win7 旗舰版,64位/SP1 。
    你需要注意的是,点击鼠标之后,在它“关闭过程”中,就不要移动鼠标、碰到任何按键了……
    你自己可以新建一个标准EXE工程、画个按钮,把代码粘贴上去,运行试试。
      

  3.   

    仅供参考:#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);
    }
      

  4.   

    将4楼C代码编译生成比如MonitorPowerOff.exe
    然后在VB6中
    Shell “MonitorPowerOff.exe”,vbHide
      

  5.   

    你的VB6代码就能正常运行的,还用什么C++ !!!
      

  6.   

    你的VB6代码就能正常运行的,还用什么C++ !!!

    因为老赵最喜欢干这种脱裤子放屁的事来误导别人啊,不然怎么彰显B格。