如题。

解决方案 »

  1.   

    http://topic.csdn.net/u/20110426/20/d891e174-fec7-4399-9605-a5cc4e32bbaa.html
      

  2.   

    这个好像不太好实现吧?
    首先你的代码要能运行,可CPU睡觉中,谁来运行?
    就算可以运行,CPU也应该维持在一种低功耗状态,这段代码也应该是内核级别的,windows会开放这样的接口吗?真的开放这样的接口的话,我不知道现在会有多少人的电脑会莫名其妙的打开,有多少人的信息会丢失(晚上悄悄打开你的机器,恰巧你和老婆正在,又恰巧你的摄像头正对,呵呵),所以我认为Windows不会这样冒天下之大不违而开放吧。
      

  3.   

    首先,我觉得楼上说的有道理,不过其实CPU没有完全睡觉,你动一动鼠标系统就恢复了,就证明CUP还是收到了鼠标的移动时间并作出了相应。但是我又觉得,既然程序使人编的,那就应该有方法,既然系统可以,问什么我们的程序就不行呢?
      

  4.   

    鼠标和键盘唤醒是要硬件支持的,包括win7的定时唤醒也是要硬件支持的,估计在睡眠状态下操作系统已经失去了控制权,只是在睡眠前标记了一下状态。如果要实现这样的功能,恐怕还是少不了硬件的支持
      

  5.   

    如果LZ的VB代码能控制BIOS的I/O,那就能完成LZ的心愿了.
      

  6.   

    你的移动鼠标是要我自己移呢?还是要设计Mouse_Event鼠标动作模拟呢?
    如果果是前者,我还用得着那么麻烦吗?如果是后者,既然我能执行鼠标模拟的代码,也就能执行所有的代码,我还是不需要那么麻烦。你说呢~~~?我也想过了,但是有谁真的实现了呢?有这样的代码就通知我一下,谢谢。
      

  7.   


    当电脑处于睡眠或待机状态,VB的程序是无法完成控制BIOS的I/O的,它根本就运行不了.
      

  8.   

    先看看啥是休眠和待机吧
    http://www.microsoft.com/china/windowsxp/pro/using/howto/security/hibernate.mspxWindows XP 中的电源功能功能包括“休眠”和“待机”。“休眠”将保存一份桌面及所有打开文件和文档的映像,然后关闭计算机电源。打开电源时,文件和文档就会按原来离开时的样子在桌面上打开。“待机”功能则切断所用硬件组件的电源,从而减少计算机的电源消耗。“待机”可切断外围设备、显示器甚至硬盘驱动器的电源,但会保留计算机内存的电源,以不至于丢失工作数据。 不知道lz要求是休眠还是待机,不过不论哪种,都需要硬件支持,也就是说,lz不用幻想本机唤醒了。
      

  9.   

    好啊,锁了系统,删了安全模式,格了硬盘,损了内存,烧了CPU,爆了主板,好吗?
    好啊,把这样的病毒发到你的电脑去,还好吗?
    做点实际点的,帮忙想一下吧。或者上面的BIOS方案还可以,在还没睡面之前设置好BIOS什么时候唤醒,到时候了就唤醒,你看行不?
      

  10.   

    看着LZ不折不休的精神,特地在Win7上看了一下睡眠模式(XP上没有),Win7的帮助文件上说:
    ....
    "唤醒睡眠中的计算机:
           大多数的计算机可以通过电源按钮唤醒,部份计算机可以通过鼠标或键盘唤醒,如果不能唤醒,请咨询你的计算机的生产商..."
          注意最后一句话,MS不敢保证能够唤醒所有机器,也就是说唤醒是需要硬件支持的,而且现在还有部份计算机并没有这样的硬件支持,就算有的也只不过支持定时器、电源按钮、鼠标或键盘唤醒,没有支持代码唤醒的。
           好了,知道我们现在的机器要实现代码唤醒的话,还差一个代码唤醒器(假如就叫这个名字);
    如果LZ想实现想要的功能,就得先把这个代码唤醒器弄出来(尽对硬件不熟,但这样的东西要弄出来其实并不难,最简单的就是A计算机运行你的VB代码,需要唤醒B计算机的时候发个唤醒指令给B机器的网卡,通过网络唤醒,呵呵,这个主意不错哦!而且现在大多数的机器都支持网络唤醒的。)
      

  11.   

    那么又是什么硬件支持着唤醒呢?Windows要使计算机睡觉,就一定会通过它,及既然软件Windows(尽管它是一个操作系统)能通过它,就有接口。相反,它要唤醒计算机,也会回馈给Windows什么,或许有没有驱动级的代码,甚至是底层代码,内核代码,想法设法,我就不信除了人去动它,就没办法让他醒过来。各位上帝啊,看在你上帝之名的份上再想想吧。或者有没有搞硬件方面的来顶一下啊,拜托~~
      

  12.   

    万能的主啊!能不能搭救这位迷茫的孩子呢?
    1、那么又是什么硬件支持着唤醒呢?
    键盘、鼠标,说白了就和电源开关一样,只是安装的位置不同;定时器,说白了也就是个闹钟,想象一下,你在大街上随便买个闹钟,电子的哪种,然后把喇叭拆了,整流后接上初中课本上说的继电器,被控端接上你主机的电源开关;闹钟的时间设置端接到主机Com口,然后VB编程,通过Com口设置闹铃时间,把内存中的数据保存在硬盘上,关机!
    Windows也这么干的?只不过WindowS是设置主板的闹钟!在BIOS中设置标志--"我睡觉了!",然后关机。(怎么设置?百度中输windows电源管理API)。2、“相反,它要唤醒计算机,也会回馈给Windows什么,或许有没有驱动级的代码,甚至是底层代码,内核代码”
    可惜,当机器醒来时,机器不会回馈什么东西给Windows,机器还是跟往常一样,执行BIOS中的程序初始化,然后启动操作系统(windows),操作系统接管控制权后,检查先前在BIOS中设置的标志--哦!原来我是睡觉了,不是关机!于是把保存在硬盘上的数据恢复过来(真正的睡眠状态是机器会给内存维持很小的电流以保持内存中的数据,不过不要紧,Windows只不过是少了恢复这一步);
    在这一系列的过程中,你发现有代码控制的地方吗?这些过程对普通人来说就是不可编程的,人家已经规定好过程了。3、“想法设法,我就不信除了人去动它,就没办法让他醒过来。”
    不错,的确可以有办法让他醒过来,注意上面的开机过程没有,你想让机器自己醒来,你唯一的机会就是BIOS中的代码,修改它,并保持它的控制权(这好像和睡眠状态有点不一致),你就可以实现程序唤醒了。怎样修改?这得问问Intel他们.
    4、总的来说,如果在不增加其它硬件的情况下,要想实现程序唤醒,你只能修改BIOS中的代码,并维持它的控制权(也就是得占用CPU,并使它处于低功耗状态)
      

  13.   

    谢谢楼上的人了,还是继续啊,不过在这补充问题:什么代码能够取得BIOS控制权,或者修改BIOS的设置???
      

  14.   

    “怎样修改?这得问问Intel他们.”上面已经说了。不同的硬件生产商有不同的方法,存在BIOS中的代码是与硬件相关的,也就是不同的硬件就有不同的代码,当然这些代码生产商都是保密的,人家就靠这个吃饭!你还指望人家公开?不然依照我们国家山寨的能力早把CPU当地瓜卖了。应该说能不能够取得BIOS控制权这不是技术上能不能实现的问题,而是关系人家饭碗的问题,说大点这是国家机密(他们的国家),所以说“这得问问Intel他们.”
    说白了就是哪天Intel他们想通了(应该说发疯了),把他们的这些东西公开,那你的想法就可以实现了。
      

  15.   

    Oh,My God。诶,再请教一下,BIOS的代码是通过怎样的方式执行的?它的代码需要加入内存吗?
      

  16.   

    BIOS(基本输入输出系统)指令是存储在Rom(只读存储器)中的,通常开机后cpu会从一个固定的地址(&HFFFF0,为什么是这个?只是一种设计,这个地址是在BIOS的地址范围内)开始执行指令,做一些初始化工作,如检测内存等,然后加载硬盘上的启动代码(主引导记录),由启动代码加载操作系统,把控制权交给操作系统,完毕.
    注意BIOS代码的执行不需要加入内存,想想开机时系统会检测内存条是否安装及好坏,你就知道执行BIOS代码是不需要内存的了。
      

  17.   

    以前曾经听说CVC和看雪有人可以写硬件BIOS的病毒,按照这种说法,就可以实现访问,修改也不是问题。
      

  18.   

    用VB就不可能实现,那种状态下就没有VB运行时环境。
      

  19.   

    睡眠状态,CPU根本就不运行应用程序,你再强大的代码都没用, 人家只接收硬件中断.就好比那个"盗梦空间"里的人, 只能从现实中让他摔倒才会醒, 在梦里死也不会醒, 更何况睡眠状态的电脑连梦都不做的.
      

  20.   

    一个固定的地址?硬盘地址?还是一个特殊的存储器的地址?
    A:地址是固定的,是一个存储器的地址,这个存储器叫只读存储器(ROM),一次烧好后就不能再修改,要改得换新芯片,近来的主板有用flash芯片的,可以通过软件进行更新(所谓BIOS升级,但也不是修改全部代码,而且更新软件和升级代码来自于厂商,你想用自己的代码去换也行,只要不怕主板坏),要想写芯片内代码,你得具备以下条件:
    1、芯片烧写器,不同的芯片有不同的烧写器,你至少得有一个;
    2、写代码的环境,汇编,调试器这些容易弄,仿真器你得有,没有的话只要不怕芯片坏和麻烦也行。你还得熟悉CPU和其它硬件的指令集
      

  21.   

    好了,到四十楼啦,孜孜不倦,期待大神出现,有谁能那么伟大呢??去做一个这样的库实现一下这个功能~~~。本来以为伟大的中华民族,这点事很简单,让电脑睡觉不难,这想来也不一定是难事,不料啊,中华民族还是以Make In China为傲,却也始终做不到Create In China(中国创造),真悲剧。让电脑从睡梦中醒来也难到一大批英雄好汉啊~~~
      

  22.   

    一位大神能做!明天Intel下课,天啊!这不是像我们用VB写两句代码这么简单,大神可能做到让他的机器醒来,能让所有的机器醒来?要知道BIOS是与硬件相关的,换句话就是大神得为每种机型写代码;
    别扯Make In China和Create In China,和这东西无关,只要有需要,哪天工信部发个文件,要求Intel在中国上市的机器都要有这个功能,呵呵!技术上也不是什么难事,但人人做事都得小心;
    Make In China和Create In China,哪是食肉者的事,和普通老百姓哪来的关系;
    让电脑从睡梦中醒来也不是英雄好汉应该做的事,谁会希望自己的电脑莫名其妙、无声无息地打开?大概只有你吧!呵呵!
      

  23.   

    “Make In China和Create In China,哪是食肉者的事,和普通老百姓哪来的关系”,没关系,你知不知道,俗话说:“家事国事天下事事关心啊”,还有不是食肉者,是肉食者,不过我只能这样回答你:“肉食者鄙,未能远谋”。其实要是我们自主研发的硬件,想要啥功能不行啊,我要他拔了电源也能在凌晨两点钟开机闹铃,顶多加一个而电池呗~~,但是关键这些技术在别人手里,所以就只能望洋兴叹喽~~
      

  24.   

    上面的回复中已经告诉了你,Win7中有定时唤醒的功能,但不是所有的计算机都可用,Win7的Help中有说明,具体方法如上面所说,在“计划任务”中,如果你找不到,很遗憾,你的计算机没有或关闭了这项功能,你的机器有没有或怎样设置定时唤醒?请咨询你的硬件生产商(这是MS的原话,意思是说,你别在CSDN中问了,你应该去问你的机器的生产商或看你的机器的说明书),做不到的话就自己先看看你机器的BIOS中是否有定时唤醒相应的选项(自己try,你机器和我的不一样,我的没有),没有的话你也别在Windows中找了。
      

  25.   

    悲哀啊,咋这样一个好用的功能,TMD硬件制造商不能配合点?Microsoft不能给力点?让我好办点~~
      

  26.   

    之前看见有人说这个BIOS可能能够帮得上那个忙,但是又说BIOS操作不了,但是我看见360的一份关于最近BMW病毒的资料,这个病毒就是通过修改BIOS来控制硬盘引导区,来实现病毒功能的。有没有哪位牛B的,也会这种控制BIOs技术的,出来说说啊~~
      

  27.   

    大哥你可真牛啊,不到黄河不死心?君不见360:"针对特定主板感染BIOS"?注意"特定"二字
      

  28.   

    看过通过远程开机方面的资料吗?就是发一个包含对方网卡MAC地址的数据包给对方,对方电脑可以开机,不过这种模式需要BIOS设置支持,目前大多数的主板都支持这种功能,这种方式我没有用在过睡眠状态,只测试过插着电源关机的状态通过服务器唤醒。不过关机状态可以,相信睡眠状态也不是问题。不过本机的情况就没想过,你可以做个参考
      

  29.   

    远程开机,需要指定MAC的网卡主机上电,需要bios设置,有的网卡还需要插根线;局域网内的远程开机稍微简单点,跨网段的远程开机,需要所有nat做映射转发。我看楼主够呛了……围观外星人什么时候从牛角尖里抽身……
      

  30.   

    只要搞清楚了唤醒或开机的原理,楼主就不用纠结了。
    无论按鼠标键盘,电源开关,还是网卡唤醒,来电开机,MODEM唤醒之类的,无非都是给主板一个信号(某些信号主板把它定义为开机信号)。即使定时开机,也是把bios里面的时钟设定一个闹钟,到点后发出信号,也把它定义为开机信号。休眠或待机或关机情况下,CPU和内存硬盘都是不工作的,楼主可以换个角度看问题了
      

  31.   

    现在的主板BIOS本身也有定时开关机功能
      

  32.   

    VB可以采用UDP广播方式发送含指定MAC地址的字节流,数据内容为MAC地址重复7此便可
      

  33.   

    这么感兴趣?'唤醒包也有两种格式的,以下是其中一种,多数网卡都支持的
    Dim wUp(0 To 101) As Byte   '唤醒包
    For i = 0 To 5
        wUp(i) = &HFF     '唤醒包头部6个&HFF
    Next
    For i = 6 To 101      '后面跟96节重复的mac
        wUp(i) = CLng("&H" & txtMac(i Mod 6))   'txtMac是含有6个Textbox的控件数组,用于输入Mac的
    Next
    Winsock1.RemoteHost = txtHost      '广播可用255.255.255.255 或XXX.XXX.XXX.255
    Winsock1.RemotePort = CLng(txtPort)  '如果是外网唤醒路由要做端口映射,RemoteHost为具体地址
    Winsock1.SendData wUp       'Winsock1的协议设为Udp
      

  34.   

    这是魔法封包Magic Packet,一些网吧中有此功能,客人要上哪台机,直接给账号搞定,再远程开机.不适用于你的情况.