rimmon's profilerimmon`s GoDPhotosBlogListsMore Tools Help

rimmon alcex

Occupation
Location
Interests
一个懒惰的人,一个喜欢琢磨的人
Photo 1 of 9
感谢访问!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.
rimmon alcexwrote:
好,大家好!
Dec. 19

rimmon`s GoD

渺小的生存在这个世界,自由高于一切
Photo 1 of 9
12/24/2008

Talking about YouTube - 洞

 

Quote

Talking about YouTube - 洞
   
7/23/2007

谈论 vb模拟键盘

 

引用

vb模拟键盘
这年头,在这个论坛里面已经没有什么技术贴了...呵呵~发一篇惊天地,泣鬼神的帖子.当然这个只是模拟键盘的终极模拟.呵呵~
     键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制。
    当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。当你按下一个键时,这个键的扫描码就被传给系统。扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。然后操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队。最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就
知道键盘上哪个键被按下,也就可以决定该作出什么响应给用户了。这个过程可以简单的如下表示:
用户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件插入消息队列-----键盘消息被发送到当前活动窗口
明白了这个过程,我们就可以编程实现在其中的某个环节来模拟键盘操作了。在VB中,有多种方法可以实现键盘模拟,我们就介绍几种比较典型的。

1.局部级模拟

    从上面的流程可以看出,键盘事件是最终被送到活动窗口,然后才引起目标程序响应的。那么最直接的模拟方法就是:直接伪造一个键盘消息发给目标程序。哈哈,这实在是很简单,windows提供了几个这样的API函数可以实现直接向目标程序发送消息的功能,常用的有SendMessage和PostMessage,它们的区别是PostMessage函数直接把消息仍给目标程序就不管了,而SendMessage把消息发出去后,还要等待目标程序返回些什么东西才好。这里要注意的是,模拟键盘消息一定要用PostMessage函数才好,用SendMessage是不正确的(因为模拟键盘消息是不需要返回值的,不然目标程序会没反应),切记切记!PostMessage函数的VB声明如下:
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
参数hwnd 是你要发送消息的目标程序上某个控件的句柄,参数wMsg 是消息的类型,表示你要发送什么样的消息,最后wParam 和lParam 这两个参数是随消息附加的数据,具体内容要由消息决定。
再来看看wMsg 这个参数,要模拟按键就靠这个了。键盘消息常用的有如下几个:
WM_KEYDOWN     表示一个普通键被按下
WM_KEYUP       表示一个普通键被释放
WM_SYSKEYDOWN  表示一个系统键被按下,比如Alt键
WM_SYSKEYUP    表示一个系统键被释放,比如Alt键
如果你确定要发送以上几个键盘消息,那么再来看看如何确定键盘消息中的wParam 和lParam 这两个参数。在一个键盘消息中,wParam 参数的含义较简单,它表示你要发送的键盘事件的按键虚拟码,比如你要对目标程序模拟按下A键,那么wParam 参数的值就设为VK_A ,至于lParam 这个参数就比较复杂了,因为它包含了多个信息,一般可以把它设为0,但是如果你想要你的模拟更真实一些,那么建议你还是设置一下这个参数。那么我们就详细了解一下lParam 吧。lParam 是一个long类型的参数,它在内存中占4个字节,写成二进制就是00000000 00000000 00000000 00000000  一共是32位,我们从右向左数,假设最右边那位为第0位(注意是从0而不是从1开始计数),最左边的就是第31位,那么该参数的的0-15位表示键的发送次数等扩展信息,16-23位为按键的扫描码,24-31位表示是按下键还是释放键。大家一般习惯写成16进制的,那么就应该是&H00 00 00 00 ,第0-15位一般为&H0001,如果是按下键,那么24-31位为&H00,释放键则为&HC0,那么16-23位的扫描码怎么会得呢?这需要用到一个API函数MapVirtualKey,这个函数可以将虚拟码转换为扫描码,或将扫描码转换为虚拟码,还可以把虚拟码转换为对应字符的ASCII码。它的VB声明如下:
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
参数wCode 表示待转换的码,参数wMapType 表示从什么转换为什么,如果是虚拟码转扫描码,则wMapType 设置为0,如果是虚拟扫描码转虚拟码,则wMapType 设置为1,如果是虚拟码转ASCII码,则wMapType 设置为2.相信有了这些,我们就可以构造键盘事件的lParam参数了。下面给出一个构造lParam参数的函数:
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long
'参数VirtualKey表示按键虚拟码,flag表示是按下键还是释放键,用WM_KEYDOWN和WM_KEYUP这两个常数表示
    Dim s As String
    Dim Firstbyte As String    'lparam参数的24-31位
    If flag = WM_KEYDOWN  Then '如果是按下键
        Firstbyte = "00"
    Else
        Firstbyte = "C0"       '如果是释放键
    End If
    Dim Scancode As Long
    '获得键的扫描码
    Scancode = MapVirtualKey(VirtualKey, 0)
    Dim Secondbyte As String   'lparam参数的16-23位,即虚拟键扫描码
    Secondbyte = Right("00" & Hex(Scancode), 2)
    s = Firstbyte & Secondbyte & "0001"  '0001为lparam参数的0-15位,即发送次数和其它扩展信息
    MakeKeyLparam = Val("&H" & s)
End Function

这个函数像这样调用,比如按下A键,那么lParam=MakeKeyLparam(VK_A,WM_KEYDOWN) ,很简单吧。值得注意的是,即使你发送消息时设置了lParam参数的值,但是系统在传递消息时仍然可能会根据当时的情况重新设置该参数,那么目标程序收到的消息中lParam的值可能会和你发送时的有所不同。所以,如果你很懒的话,还是直接把它设为0吧,对大多数程序不会有影响的,呵呵。
    好了,做完以上的事情,现在我们可以向目标程序发送键盘消息了。首先取得目标程序接受这个消息的控件的句柄,比如目标句柄是12345,那么我们来对目标模拟按下并释放A键,像这样:(为了简单起见,lParam这个参数就不构造了,直接传0)
PostMessage 12345,WM_KEYDOWN,VK_A,0&   '按下A键
PostMessage 12345,WM_UP,VK_A,0&        '释放A键
好了,一次按键就完成了。现在你可以迫不及待的打开记事本做实验,先用FindWindowEx这类API函数找到记事本程序的句柄,再向它发送键盘消息,期望记事本里能诡异的自动出现字符。可是你马上就是失望了,咦,怎么一点反应也没有?你欺骗感情啊~~~~~~~~~~55555555555555  不是的哦,接着往下看啊。
一般目标程序都会含有多个控件,并不是每个控件都会对键盘消息作出反应,只有把键盘消息发送给接受它的控件才会得到期望的反应。那记事本来说,它的编辑框其实是个edit类,只有这个控件才对键盘事件有反应,如果只是把消息发给记事本的窗体,那是没有用的。现在你找出记事本那个编辑框的句柄,比如是54321,那么写如下代码:
PostMessage 54321,WM_KEYDOWN,VK_F1,0&   '按下F1键
PostMessage 54321,WM_UP,VK_F1,0&        '释放F1键
怎么样,是不是打开了记事本的“帮助”信息?这说明目标程序已经收到了你发的消息,还不错吧~~~~~~~~
可以马上新问题就来了,你想模拟向记事本按下A这个键,好在记事本里自动输入字符,可是,没有任何反应!这是怎么一回事呢?
原来,如果要向目标程序发送字符,光靠WM_KEYDOWN和WM_UP这两个事件还不行,还需要一个事件:WM_CHAR,这个消息表示一个字符,程序需靠它看来接受输入的字符。一般只有A,B,C等这样的按键才有WM_CHAR消息,别的键(比如方向键和功能键)是没有这个消息的,WM_CHAR消息一般发生在WM_KEYDOWN消息之后。WM_CHAR消息的lParam参数的含义与其它键盘消息一样,而它的wParam则表示相应字符的ASCII编码(可以输入中文的哦^_^),现在你可以写出一个完整的向记事本里自动写入字符的程序了,下面是一个例子,并附有这些消息常数的具体值:
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_CHAR = &H102
Public Const VK_A = &H41

Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long
    Dim s As String
    Dim Firstbyte As String    'lparam参数的24-31位
    If flag = WM_KEYDOWN  Then '如果是按下键
        Firstbyte = "00"
    Else
        Firstbyte = "C0"       '如果是释放键
    End If
    Dim Scancode As Long
    '获得键的扫描码
    Scancode = MapVirtualKey(VirtualKey, 0)
    Dim Secondbyte As String   'lparam参数的16-23位,即虚拟键扫描码
    Secondbyte = Right("00" & Hex(Scancode), 2)
    s = Firstbyte & Secondbyte & "0001"  '0001为lparam参数的0-15位,即发送次数和其它扩展信息
    MakeKeyLparam = Val("&H" & s)
End Function

Private Sub Form_L
OAd()
    dim hwnd as long
    hwnd = XXXXXX  'XXXXX表示记事本编辑框的句柄
    PostMessage hwnd,WM_KEYDOWN,VK_A,MakeKeyLparam(VK_A,WM_KEYDOWN)  '按下A键
    PostMessage hwnd,WM_CHAR,ASC("A"),MakeKeyLparam(VK_A,WM_KEYDOWN)  '输入字符A
    PostMessage hwnd,WM_UP,VK_A,MakeKeyLparam(VK_A,WM_UP)       '释放A键
End Sub

这就是通过局部键盘消息来模拟按键。这个方法有一个极大的好处,就是:它可以实现后台按键,也就是说他对你的前台操作不会有什么影响。比如,你可以用这个方法做个程序在游戏中模拟按键来不断地执行某些重复的操作,而你则一边喝茶一边与QQ上的MM们聊得火热,它丝毫不会影响你的前台操作。无论目标程序是否获得焦点都没有影响,这就是后台模拟按键的原理啦~~~~


2.全局级模拟

    你会发现,用上面的方法模拟按键并不是对所有程序都有效的,有的程序啊,你向它发了一大堆消息,可是它却一点反应也没有。这是怎么回事呢?这就要看具体的情况了,有些程序(特别是一些游戏)出于某些原因,会禁止用户对它使用模拟按键程序,这个怎么实现呢?比如可以在程序中检查一下,如果发现自己不是活动窗口,就不接受键盘消息。或者仔细检查一下收到的键盘消息,你会发现真实的按键和模拟的按键消息总是有一些小差别,从这些小差别上,目标程序就能判断出:这是假的!是伪造的!!因此,如果用PostMessage发送局部消息模拟按键不成功的话,你可以试一试全局级的键盘消息,看看能不能骗过目标程序。
模拟全局键盘消息常见的可以有以下一些方法:
(1) 用API函数keybd_event,这个函数可以用来模拟一个键盘事件,它的VB声明为:
Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
参数bVk表示要模拟的按键的虚拟码,bScan表示该按键的扫描码(一般可以传0),dwFlags表示是按下键还是释放键(按下键为0,释放键为2),dwExtraInfo是扩展标志,一般没有用。比如要模拟按下A键,可以这样:
Const KEYEVENTF_KEYUP = &H2
keybd_event VK_A, 0, 0, 0   '按下A键
keybd_event VK_A, 0, KEYEVENTF_KEYUP, 0   '释放A键
注意有时候按键的速度不要太快,否则会出问题,可以用API函数Sleep来进行延时,声明如下:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
参数dwMilliseconds表示延时的时间,以毫秒为单位。
那么如果要模拟按下功能键怎么做呢?比如要按下Ctrl+C实现拷贝这个功能,可以这样:
keybd_event VK_Ctrl, 0, 0, 0   '按下Ctrl键
keybd_event VK_C, 0, 0, 0      '按下C键
Sleep 500            '延时500毫秒
keybd_event VK_C, 0, KEYEVENTF_KEYUP, 0   '释放C键
keybd_event VK_Ctrl, 0, KEYEVENTF_KEYUP, 0   '释放Ctrl键
好了,现在你可以试试是不是可以骗过目标程序了,这个函数对大部分的窗口程序都有效,可是仍然有一部分游戏对它产生的键盘事件熟视无睹,这时候,你就要用上bScan这个参数了。一般的,bScan都传0,但是如果目标程序是一些DirectX游戏,那么你就需要正确使用这个参数传入扫描码,用了它可以产生正确的硬件事件消息,以被游戏识别。这样的话,就可以写成这样:
keybd_event VK_A, MapVirtualKey(VK_A, 0), 0, 0   '按下A键
keybd_event VK_A, MapVirtualKey(VK_A, 0), KEYEVENTF_KEYUP, 0   '释放A键
以上就是用keybd_event函数来模拟键盘事件。除了这个函数,SendInput函数也可以模拟全局键盘事件。SendInput可以直接把一条消息插入到消息队列中,算是比较底层的了。它的VB声明如下:
Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
参数:
nlnprts:定义plnputs指向的结构的数目。
plnputs:指向INPUT结构数组的指针。每个结构代表插人到键盘或鼠标输入流中的一个事件。
cbSize:定义INPUT结构的大小。若cbSize不是INPUT结构的大小,则函数调用失败。
返回值:函数返回被成功地插人键盘或鼠标输入流中的事件的数目。若要获得更多的错误信息,可以调用GetlastError函数。
备注:Sendlnput函数将INPUT结构中的事件顺序地插入键盘或鼠标的输入流中。这些事件与用户插入的(用鼠标或键盘)或调用keybd_event,mouse_event,或另外的Sendlnput插人的键盘或鼠标的输入流不兼容。
嗯,这个函数用起来蛮复杂的,因为它的参数都是指针一类的东西。要用它来模拟键盘输入,先要构造一组数据结构,把你要模拟的键盘消息装进去,然后传给它。为了方便起见,把它做在一个过程里面,要用的时候直接调用好了,代码如下:
Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Type GENERALINPUT
   dwType As Long
   xi(0 To 23) As Byte
End Type

Type KEYBDINPUT
  wVk As Integer
  wScan As Integer
  dwFlags As Long
  time As Long
  dwExtraInfo As Long
End Type

Const INPUT_KEYBOARD = 1

Sub MySendKey(bkey As Long)
'参数bkey传入要模拟按键的虚拟码即可模拟按下指定键
Dim GInput(0 To 1) As GENERALINPUT
Dim KInput As KEYBDINPUT
KInput.wVk = bkey  '你要模拟的按键
KInput.dwFlags = 0 '按下键标志
GInput(0).dwType = INPUT_KEYBOARD
CopyMemory GInput(0).xi(0), KInput, Len(KInput) '这个函数用来把内存中KInput的数据复制到GInput
KInput.wVk = bkey  
KInput.dwFlags = KEYEVENTF_KEYUP  ' 释放按键
GInput(1).dwType = INPUT_KEYBOARD ' 表示该消息为键盘消息
CopyMemory GInput(1).xi(0), KInput, Len(KInput)
'以上工作把按下键和释放键共2条键盘消息加入到GInput数据结构中
SendInput 2, GInput(0), Len(GInput(0))    '把GInput中存放的消息插入到消息列队
End Sub

    除了以上这些,用全局钩子也可以模拟键盘消息。如果你对windows中消息钩子的用法已经有所了解,那么你可以通过设置一个全局HOOK来模拟键盘消息,比如,你可以用WH_JOURNALPLAYBACK这个钩子来模拟按键。WH_JOURNALPLAYBACK是一个系统级的全局钩子,它和WH_JOURNALRECORD的功能是相对的,常用它们来记录并回放键盘鼠标操作。WH_JOURNALRECORD钩子用来将键盘鼠标的操作忠实地记录下来,记录下来的信息可以保存到文件中,而WH_JOURNALPLAYBACK则可以重现这些操作。当然亦可以单独使用WH_JOURNALPLAYBACK来模拟键盘操作。你需要首先声明SetWindowsHookEx函数,它可以用来安装消息钩子:
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long,ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
先安装WH_JOURNALPLAYBACK这个钩子,然后你需要自己写一个钩子函数,在系统调用它时,把你要模拟的事件传递给钩子参数lParam所指向的EVENTMSG区域,就可以达到模拟按键的效果。不过用这个钩子模拟键盘事件有一个副作用,就是它会锁定真实的鼠标键盘,不过如果你就是想在模拟的时候不会受真实键盘操作的干扰,那么用用它倒是个不错的主意。
3.驱动级模拟

 

如果上面的方法你都试过了,可是你发现目标程序却仍然顽固的不接受你模拟的消息,寒~~~~~~~~~还好,我还剩下最后一招,这就是驱动级模拟:直接读写键盘的硬件端口!
    有一些使用DirectX接口的游戏程序,它们在读取键盘操作时绕过了windows的消息机制,而使用DirectInput.这是因为有些游戏对实时性控制的要求比较高,比如赛车游戏,要求以最快速度响应键盘输入。而windows消息由于是队列形式的,消息在传递时会有不少延迟,有时1秒钟也就传递十几条消息,这个速度达不到游戏的要求。而DirectInput则绕过了windows消息,直接与键盘驱动程序打交道,效率当然提高了不少。因此也就造成,对这样的程序无论用PostMessage或者是keybd_event都不会有反应,因为这些函数都在较高层。对于这样的程序,只好用直接读写键盘端口的方法来模拟硬件事件了。要用这个方法来模拟键盘,需要先了解一下键盘编程的相关知识。
    在DOS时代,当用户按下或者放开一个键时,就会产生一个键盘中断(如果键盘中断是允许的),这样程序会跳转到BIOS中的键盘中断处理程序去执行。打开windows的设备管理器,可以查看到键盘控制器由两个端口控制。其中&H60是数据端口,可以读出键盘数据,而&H64是控制端口,用来发出控制信号。也就是,从&H60号端口可以读此键盘的按键信息,当从这个端口读取一个字节,该字节的低7位就是按键的扫描码,而高1位则表示是按下键还是释放键。当按下键时,最高位为0,称为通码,当释放键时,最高位为1,称为断码。既然从这个端口读数据可以获得按键信息,那么向这个端口写入数据就可以模拟按键了!用过QbASIC4.5的朋友可能知道,QB中有个OUT命令可以向指定端口写入数据,而INP函数可以读取指定端口的数据。那我们先看看如果用QB该怎么写代码:
假如你想模拟按下一个键,这个键的扫描码为&H50,那就这样
OUT &H64,&HD2   '把数据&HD2发送到&H64端口。这是一个KBC指令,表示将要向键盘写入数据
OUT &H60,&H50   '把扫描码&H50发送到&H60端口,表示模拟按下扫描码为&H50的这个键
那么要释放这个键呢?像这样,发送该键的断码:
OUT &H64,&HD2   '把数据&HD2发送到&H64端口。这是一个KBC指令,表示将要向键盘写入数据
OUT &H60,(&H50 OR &H80)   '把扫描码&H50与数据&H80进行或运算,可以把它的高位置1,得到断码,表示释放这个键
    好了,现在的问题就是在VB中如何向端口写入数据了。因为在windows中,普通应用程序是无权操作端口的,于是我们就需要一个驱动程序来帮助我们实现。在这里我们可以使用一个组件WINIO来完成读写端口操作。什么是WINIO?WINIO是一个全免费的、无需注册的、含源程序的WINDOWS2000端口操作驱动程序组件(可以到
http://www.internals.com/上去下载)。它不仅可以操作端口,还可以操作内存;不仅能在VB下用,还可以在DELPHI、VC等其它环境下使用,性能特别优异。下载该组件,解压缩后可以看到几个文件夹,其中Release文件夹下的3个文件就是我们需要的,这3个文件是WinIo.sys(用于win xp下的驱动程序),WINIO.VXD(用于win 98下的驱动程序),WinIo.dll(封装函数的动态链接库),我们只需要调用WinIo.dll中的函数,然后WinIo.dll就会安装并调用驱动程序来完成相应的功能。值得一提的是这个组件完全是绿色的,无需安装,你只需要把这3个文件复制到与你的程序相同的文件夹下就可以使用了。用法很简单,先用里面的InitializeWinIo函数安装驱动程序,然后就可以用GetPortVal来读取端口或者用SetPortVal来写入端口了。好,让我们来做一个驱动级的键盘模拟吧。先把winio的3个文件拷贝到你的程序的文件夹下,然后在VB中新建一个工程,添加一个模块,在模块中加入下面的winio函数声明:

Declare Function MapPhysToLin Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysSize As Long, ByRef PhysMemHandle) As Long
Declare Function UnmapPhysicalMemory Lib "WinIo.dll" (ByVal PhysMemHandle, ByVal LinAddr) As Boolean
Declare Function GetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long) As Boolean
Declare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long) As Boolean
Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As Byte) As Boolean
Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte) As Boolean
Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean
Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean
Declare Function InstallWinIoDriver Lib "WinIo.dll" (ByVal DriverPath As String, ByVal Mode As Integer) As Boolean
Declare Function RemoveWinIoDriver Lib "WinIo.dll" () As Boolean

' ------------------------------------以上是WINIO函数声明-------------------------------------------

Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

'-----------------------------------以上是WIN32 API函数声明-----------------------------------------

再添加下面这个过程:
Sub KBCWait4IBE()   '等待键盘缓冲区为空
Dim dwVal As Long
  Do
  GetPortVal &H64, dwVal, 1
'这句表示从&H64端口读取一个字节并把读出的数据放到变量dwVal中
'GetPortVal函数的用法是GetPortVal 端口号,存放读出数据的变量,读入的长度
  Loop While (dwVal And &H2)
End Sub
上面的是一个根据KBC规范写的过程,它的作用是在向键盘端口写入数据前等待一段时间,后面将会用到。
然后再添加如下过程,这2个过程用来模拟按键:

Public Const KBC_KEY_CMD = &H64    '键盘命令端口
Public Const KBC_KEY_DATA = &H60   '键盘数据端口

Sub MyKeyDown(ByVal vKeyCoad As Long)   
'这个用来模拟按下键,参数vKeyCoad传入按键的虚拟码
Dim btScancode As Long
btScancode = MapVirtualKey(vKeyCoad, 0)
  
    KBCWait4IBE   '发送数据前应该先等待键盘缓冲区为空
    SetPortVal KBC_KEY_CMD, &HD2, 1     '发送键盘写入命令
'SetPortVal函数用于向端口写入数据,它的用法是SetPortVal 端口号,欲写入的数据,写入数据的长度
    KBCWait4IBE
    SetPortVal KBC_KEY_DATA, btScancode, 1  '写入按键信息,按下键
   
End Sub

Sub MyKeyUp(ByVal vKeyCoad As Long)   
'这个用来模拟释放键,参数vKeyCoad传入按键的虚拟码
Dim btScancode As Long
btScancode = MapVirtualKey(vKeyCoad, 0)
  
    KBCWait4IBE   '等待键盘缓冲区为空
    SetPortVal KBC_KEY_CMD, &HD2, 1  '发送键盘写入命令
    KBCWait4IBE
    SetPortVal KBC_KEY_DATA, (btScancode Or &H80), 1  '写入按键信息,释放键

End Sub


定义了上面的过程后,就可以用它来模拟键盘输入了。在窗体模块中添加一个定时器控件,然后加入以下代码:


Private Sub Form_Load()

If InitializeWinIo = False Then   
  '用InitializeWinIo函数加载驱动程序,如果成功会返回true,否则返回false
    MsgBox "驱动程序加载失败!"
    Unload Me
End If
Timer1.Interval=3000
Timer1.Enabled=True
End Sub

Private Sub Form_Unload(Cancel As Integer)
ShutdownWinIo '程序结束时记得用ShutdownWinIo函数卸载驱动程序
End Sub

Private Sub Timer1_Timer()
Dim VK_A as Long = &H41
MyKeyDown VK_A   
MyKeyUp VK_A    '模拟按下并释放A键
End Sub
[/quote]
运行上面的程序,就会每隔3秒钟模拟按下一次A键,试试看,怎么样,是不是对所有程序都有效果了?
需要注意的问题:
要在VB的调试模式下使用WINIO,需要把那3个文件拷贝到VB的安装目录中。
键盘上有些键属于扩展键(比如键盘上的方向键就是扩展键),对于扩展键不应该用上面的MyKeyDown和MyKeyUp过程来模拟,可以使用下面的2个过程来准确模拟扩展键:

QUOTE:
Sub MyKeyDownEx(ByVal vKeyCoad As Long)   '模拟扩展键按下,参数vKeyCoad是扩展键的虚拟码
Dim btScancode As Long
btScancode = MapVirtualKey(vKeyCoad, 0)

    KBCWait4IBE   '等待键盘缓冲区为空
    SetPortVal KBC_KEY_CMD, &HD2, 1     '发送键盘写入命令
    KBCWait4IBE
    SetPortVal KBC_KEY_DATA, &HE0, 1  '写入扩展键标志信息
   
   
    KBCWait4IBE   '等待键盘缓冲区为空
    SetPortVal KBC_KEY_CMD, &HD2, 1     '发送键盘写入命令
    KBCWait4IBE
    SetPortVal KBC_KEY_DATA, btScancode, 1  '写入按键信息,按下键
    End Sub
Sub MyKeyUpEx(ByVal vKeyCoad As Long)   '模拟扩展键弹起
Dim btScancode As Long
btScancode = MapVirtualKey(vKeyCoad, 0)

    KBCWait4IBE   '等待键盘缓冲区为空
    SetPortVal KBC_KEY_CMD, &HD2, 1     '发送键盘写入命令
    KBCWait4IBE
    SetPortVal KBC_KEY_DATA, &HE0, 1  '写入扩展键标志信息
   
   
    KBCWait4IBE   '等待键盘缓冲区为空
    SetPortVal KBC_KEY_CMD, &HD2, 1     '发送键盘写入命令
    KBCWait4IBE
    SetPortVal KBC_KEY_DATA, (btScancode Or &H80), 1  '写入按键信息,释放键
   
End Sub


还应该注意的是,如果要从扩展键转换到普通键,那么普通键的KeyDown事件应该发送两次。也就是说,如果我想模拟先按下一个扩展键,再按下一个普通键,那么就应该向端口发送两次该普通键被按下的信息。比如,我想模拟先按下左方向键,再按下空格键这个事件,由于左方向键是扩展键,空格键是普通键,那么流程就应该是这样的:
[quote]MyKeyDownEx VK_LEFT   '按下左方向键
Sleep 200             '延时200毫秒
MyKeyUpEx VK_LEFT     '释放左方向键

Sleep 500
MyKeyDown VK_SPACE   '按下空格键,注意要发送两次
MyKeyDown VK_SPACE
Sleep 200
MyKeyUp VK_SPACE     '释放空格键


4.骨灰级模拟
    方法3算是很底层的模拟了,我现在还没有发现有它模拟无效的程序。但是如果你用尽上面所有的方法,仍然无效的话,那么还有最后一个方法,绝对对任何程序都会有效,那就是:把键盘拿出来,老老实实地按下去吧。~~~~

4/28/2007

5,1期间的大动作~哈哈

去浙江见老丈人~哈哈哈
还没去过那片呢,虽然祖籍是浙江吧哈哈o(∩_∩)o...哈哈
就当作旅游了。10月1期间举办婚礼,忙疯了
2/17/2007

我理解的国奥打架事件!

国奥被英国佬打的很惨,只能表示下同情,同情之余觉得很可笑,分析有以下几方面
1,为啥国奥那10多场比赛有4场有冲突,而且是不同的队.解释为思乡情绪严重有点不妥吧,思乡就打架说不过去吧!
2,上半场那帮野人就跟你们玩阴的,中场不跟领队和教练提意见,跟裁判交涉,再这样可以选择罢踢么?何必动手.虽然领队是GCD派的,有官僚作风,提出打不还手骂不还口的口号,但是你们怎么就这么没脑子呢,跟一帮老泡干架,找揍呢啊?
3,在冲突开始之后,为啥人家在第一时间围攻郑涛,其他人呢,都SONG逼了么?飞腿,有P用,你们也群欧啊,打脸,踢JJ,别的地方基本无效!既然已经打起来了,就干啊,停了算个P啊!
4,足协,你真个黑社会,中国最大的黑社会,不帮自己帮别人.虽然国奥那帮小孩是傻了点,但是你们Y都不出来撑腰,中国人腰杆子怎么能硬起来!要是我就派秘密部队暗杀Y几个,你看以后还有NB的么!
综上所述:国奥小孩没经验,缺脑子,捅娄子;猪协大爷爱面子,没手段,瞎指挥!
2/15/2007

情人节的一天~~

  昨天是情人节,什么都没做,收拾了下屋子,玩了会游戏,无聊之后等老婆回家.唯一做的就是回忆了我们在一起的日子,已经2年多了!
将我的爱进行到底!!!!!
1/7/2007

夜已经很深了

夜已经很深了,老婆睡得很香,每当寂静的夜晚,我就会深思,路要怎么走呢?自己决定的就要咬牙坚持走,不能放弃,遇到困难的时候想到位了生存,那其他的都无所谓了,不说为了国家富强作贡献这样的虚词,为了自己和自己身边关心的人能更快乐才是我的目的!
总结以下经验:
四肢健全证明我还是可以经受部分磨难
思维活跃证明我还是可以对自己的事业有所创新
坚持不懈证明我还真的要努力了
我要证明我生存的价值
虽然有困难但是还得顶风而上阿
1/4/2007

哇哈哈哈,网站策划终于有眉目了

终于啊,框架选好了!!!我要开工啦哈哈哈
12/31/2006

新的一年就要到啦

祝我新年快乐哈哈
祝我老婆也快乐哈哈哈
12/13/2006

我的回忆----大学同学篇

最近晚上闹失眠,脑子里老想到一些以前的人啊事啊的,我要记录下来...
刘洋:一直跟我睡上下铺,挺搞笑的一个人,跟他女朋友一块来上的学(第一次见还以为是李爱霞家长呢。。。汗)。脸皮超厚,为啥呢,认识他第2天就发现了此人极为恶心阿哈哈哈,为啥呢,当时宿舍的都应该知道,我那箱军训时的矿泉水1/3被这斯喝了。已经是孩他爹了,联系越来越少,按我话说:有老婆有孩有车有房的都是牛B人物,跟我们不是一个层次的了……结婚时让我当伴郎我没干哈哈。脾气超级好,就发过一次火,还是被我气的!此人在朝阳管蔬菜农药残留物的那个单位
秦博宇:一个有争议的前期舍友,我高中同学的堂兄(他俩没有一点象的)。爱咋呼,能侃,到最后就牵扯到牛啦哈哈。大一时撞报废了一辆蓝鸟,理由喝酒了,看着一辆斯太尔下沟了,拐弯没注意自己撞树了,倒霉孩子,此后人送外号背逼(baby)自从分宿舍以后关系就稍微疏远了,也可能因为我搬家不一块走的原因吧。此人最强的是身高1米72,体重96斤。。。魔鬼身材,如果女人的话哈哈。此人据说在联通工作
蒋联荣:这个也是一个强人,跟我联系颇为紧密,行动也神秘,前一阵子竟然跑到广州应聘成功……这也是我一个宿舍的,军训第3天我俩就偷偷跑下山,他请我吃的老家肉饼,那是我吃过最好的肉饼拉哈。此人比较颓废,一度宣称:我是没女人就活不了的那种。不过想了后才明白,经历多的就是不一样!说话都这么个性!这方面我没学他。后来因为成考没考上,愤然离开留下言论,这jb学校哪tm来学习的!!!此人在广东卖钢材,我的死党
李刚:老蒋的中专同学,没事我们老一块打牌,人不错,就是形象稍差,没女朋友,而且眼光很高,给他介绍的都不满意,看看Y能找啥样的,属于我的死党那类的,因为我老能见到他,就不说他啥了!哈哈,他在卖医疗器械
陈克佳:听着象姑娘名。。。但是人家还一个名叫陈建涛,我从来叫他都是前面那名,没啥坏印象,人不错哈哈,刘洋的伴郎结果让给他了。
李爱霞:刘洋的夫人,此人脾气较大,性格稍差,耿直,但是好人,虽然比我小吧,因为经常替我打饭,所以在他俩没结婚的时候我就喊嫂子了。天天因打牌骂刘洋!曾经俩人睡上铺,经常吓得我失眠(还好他们没干那啥)仅仅有一次意外,早上6点,床在嘎吱嘎吱响,把我从梦中惊醒,迷迷糊糊就喊,别搞了床塌了!此女竟喊:你是不是也想来!!!处男的我差点吓死哈哈!!!后来询问得知他们在捏肌(不是小jj的那个)一种按摩!!!汗
赵普:一个悲剧式人物,前期舍友,老遭虐待,被秦博宇搞得很惨,曾经用黑加仑瓶套过jj,被筷子戳过pp,衣服被狗穿走!很讲义气,偶尔联系
孙小光:这个是酒友,我佩服的一个酒鬼!每天都要喝,喝的肝已经出毛病了,一天3顿不少酒啊!酒量很大!后来和宿舍我们住进了一块,天天一块网吧去哈哈哈,大学毕业后的那年我也经常找他,不过此人现在已经回了河南。哥们保重!!!
陈思明:很搞笑的一个,曾经羡慕我和小光喝酒,下决心练酒量,在一个口杯,一瓶啤酒下肚后,非要替拉登萨达姆打抱不平,要抱着核弹炸地球,持续讨论3个多小时!后来把所有人说睡了自己仍在继续炸!第2天被陈克佳强行捏鼻子灌醋,差点灌死。。。哈哈,现在做兼职,拿他的话就是说没事溜达溜达花鸟鱼虫市场,有空看看2手车2手房,整个一个人虫。此人虽然有点小聪明,但是不扣,对朋友不错。
李琦:孙小光同乡,后来合宿舍以后,睡我上面,经常被我虐!没事老一块去网吧,没什么可公开的。
赵银强:好学生,老蒋李刚中专同学,河北农村孩子,热爱学习,泡mm把我们食堂的小姑娘给搞走了!军训完后就搬出宿舍,理由,太闹天天打牌到天亮!现在好像在中关村租了个柜台卖东西,跟那小姑娘好像结婚了!
崔景星:我靠,这他妈就是我一个噩梦,超级能贫,而且属于精神不正常那么贫,没事就来骚扰我,我都拿他没辙了!此人搞笑不是一般的,白风衣白西服白裤子脑袋弄得都反光,身高1米6!喝一口酒就拍胸口,有点像monk!
王楠:猪楠阿~~哈哈,乒乓球打得挺棒的,原来老没事发个短信联系着,现在也不联系了,据说人家目标是保安队长!!!现在还是保安哈哈
刘涧淮:号称第一臭脚!!!别的我就不说了,想到都恐怖了!!!
江墨:肌肉男,练过健身,都tm肌肉,打球就是靠撞出来的哈哈
赵何乐:秦的同村,块大个高,酷似何润东的加大版!据说也结婚了,跟他老婆开饭店去了
韩猛:同上,我拉着玩魔力的,现在人家还在坚持,前一阵还问我,我给他的号的密码。。。狂喷
孙雷:很有篮球天赋,就是身材太。。。手感一流阿老爱笑呵呵的 跟上面那俩是发小
赵顺心:小新,现在经常没事打个电话聊聊,挺幽默的,原来老一块喝酒。跟大家关系都搞得挺融洽的
孙小超:头次看着像3章的老炮!!!此人极有意思,军训时曾因饮食过度被送过医院
毛奎:新疆人,豪放阿哈哈,原来没事老跟他探讨崔景星的问题
李敏:跟赵普好过那么几天,老到我们宿舍,曾经的一个问题把所有人问的差点笑得被过气去!问题是:避孕套是戴的么?怎么戴?在场的都被问傻了,有个反应快的立马申出中指,此女反应也很快,问:为啥不带拇指上阿!!!狂晕!!!
张伯君:差点把刘洋搞得成单身,具体不说了,小孩一个,欠打
黄立刚:浙江人,看着跟个搞学问的似的,学生会的(他那老乡被我打过一次,大学唯一一次打架)
俞萧:曾经喝了他一瓶18年陈酿的那什么酒!崔就是喝过那么一口
王潇洒:跟崔一块住的,跟吸粉的似的!偶尔一块喝酒一次!
约克:情况同上!
赖建军:个子不高,篮球水平强!!!经常连扔5,6个三分,而且是打板进!拿他的话就是,三分是靠感觉地!
李嘉恒:虽然名为我们老师,其实是老师和学生之间的纽带,有了他我们少出事!还老跟我们一块去网吧。。。哈哈
以后想起来会继续添加的!下部分该写高中的啦。。。有点怕老婆瞧见
 
 
12/4/2006

连续剧:几部必须看的美剧~~~

先大体介绍几个,以后补充内容
首先必须要看星际之门!!!不看真的是损失!!!
还有神探MONK,越狱,HEROS(不是国产的英雄啊),巴比仑5,反恐24小时,over there,还有斯皮尔伯格老大03年的那个科幻连续剧,忘了叫啥了!以后我会补充上资料来的!!!
首先是我的最爱,科幻剧:包括星际之门(必看)天劫(斯皮尔伯格的科幻名作)巴比伦5号(宏伟的星际战舰)heros(比x-man看着有故事性)4400(跟外星人劫持,拥有超能力有关)
星际之门
电影版,94年上映,sg系列的祖宗。。。具体情况以后补充
 
星际之门sg1:

上 映:

1997年7月27日开播,07年将停止续拍(可惜啊)

地 区:

美国

语 言:

英语

时 长:

45分钟左右

颜 色:

彩色

类 型:

连续剧 科幻片
 
Stargate SG-1是美国SCI FI频道播放的一款科幻题材电视连续剧。Stargate SG-1是以Dean Devlin和Roland Emmerich创作的电影Stargate为基础,连续剧剧情由Jonathan Glassner和Brad Wright (The Outer Limits)及影星Richard Dean Anderson (MacGyver)创作。

1 什么是星际之门(StarGate)?
Stargate星际之门是一种环状装置,通过人工制造出的虫洞,它可以将物质瞬间由一点传送到宇宙的另一点。当一个门装置向另一个门拨号(如同打电话拨号),两门之间将会产生一个虫洞。 每个星门地址由6个象征宇宙星座的符号(symbols), 和一个代表星门所在星系的第7符号构成;由此,每个星门的地址都是独一无二的。

总之, 星门系统总共有39个符号, 每个符号都代表宇宙中唯一的某个点;通过7个符号可以准确锁定星门的所在位置,(如果那个位置的星门工作正常的话,)可以拨号连接那个星门。

门的激活与构成物质:
星门装置本身由一种地球没有的硅岩金属(Naquadah)制造。Naquadah金属最早发现于电影Stargate中的星球Abydos。这种金属可以吸引并激活微中子。 不知何故, 当微中子被激活以后,星门的窗体内会产生一个稳定的人造虫洞。并且它不会对其它的物质起反应-- 包括辐射、粒子轰击,火烧,压力…等等。

星门的拨号装置看起来就像一个倾斜的"表"面。上面有39个不同的符号。当拨入7个正确的符号(像密码锁),将激活星门与某地之间的联系。这些密码(地址),最初由星门的制造者设置,它们用来准确描绘三维宇宙中的点位置。7个符号中的最后一个符号往往是该地址星门的所在地。

虹门:
空军根据Daniel Jackson于Abydos星的记录,以及古埃及历史的研究,得知如果星门被厚重结实的物质覆盖,将可以阻止任何人或装置通过星门。因此, 空军为星门专门制作一扇结实却又可以快速收放的虹门。虹门十分接近于星门(与门面距离小于10毫米),可以有效抵挡任何装置通过虫洞到达门这边。所以它可以防止任何人未经同意的虫洞连接进入。如果有人不顾虹门关闭,强行通过虫洞过来地球,他的身体分子将没有机会再组合(这将意味着死亡)。
SG小组携带有一个可以发射特殊无线电信号的小型装置(无线电波可以通过虹门),用来过门前的通报。这种装置叫GDO。当正确的信号发射过虫洞(用GDO),他将可以安全通过星门。当他通过星门以后,虹门将迅速关闭。

星门旅行:
星门旅行是单向的。当一个人通过虫洞到达另一边,他不能再进入该虫洞回来。如果要回来,他必须等虫洞关闭,再重新启动星门。只有一样东西可以在同一虫洞两边双向传送:无线电波(比如MALP探测器发射的信号)。


2 谁制造的星际之门StarGate?
我们最初以为是Goa'uld建造了星门网络,但是很快发现不是。Goa'uld发现了星门系统,并使用它输送人类从地球到其他行星。真正的星门制造者是古人(Ancients),他们在几百万年前与地球及人类有着惊人的联系。古人曾经是Asgard、Nox和Furlings的盟友,但就Asgard所说——他们早已搬离了我们的宇宙。


3 星门(环)上有几个标记?
星门环状装置上有9个标记(chevron)。尽管门上有9个标记,但一般拨号往往只用7个。在“Fifth Race”这集中, 第8个标记被使用 (这要感谢古人的知识被输入了O'Neill上校的大脑),Carter的说法是, "附加的一个标记一定是为了标示距离现在这个点更远的一个位置,如同电话的区号。" 到目前为止, 第8个标记仅仅使用了一次(在地球的星际之门),而第9个标记的作用我们还不甚清楚。


4 为什么队名叫SG-1?
"SG"两个字母是Stargate program的缩写,后面的数字用来区别不同的小队。而且部分小队执行带有特殊性质的任务。 下面是几个不同任务的小队:
特殊任务小队:
SG-3 - 作战单位,Makepeace上校。
SG-5 - 作战单位。
SG-7 - 科考小组。
SG-8 - 医疗小组。
SG-9 - 外交使团,Stan Kovachek少校。
SG-11 -工兵小组。


5 剧中很多缩写都代表了什么?
MALP全名是Mobile Analytic Laboratory Probe:轮式小型机器人,用来探察未知星球的地理及安全状况,确认是否适合人类进入。
DHD全称是Dial Home Device:拨号装置,用来激活星门。
GDO是Garage Door Opener: 通过发射无线电信号过虫洞,通知SGC打开虹门的装置。
FRED是Field Remote Expeditionary Device:六轮的小型运载车辆。可以携带物资进入虫洞。它可以适应大多数地形状况。
TER是Transphase Eradication Rod:一个探测装置。可以发现人类视力以外,180度光谱外的目标。可以用来探测某种隐身外星人Re'tu。


6 为什么SG1遇到的外星文明都讲英语?
这是电视制作的要求造成的。 我们不可能用几集的时间来描述语言学习的过程,倒不如把这一阶段压缩或者省略,让更主要的剧情直接出来!
 
星际之门sga
 
在神秘的南极冰层里,发掘出星际之门建造者遗弃的基地。星际之门亚特兰蒂斯小队应召执行一次冒险性最大的星际之门任务——前往遥远的天马星系。

亚特兰蒂斯小队遭遇古代人类文明的袭击...包括不断威胁人类生命无处不在的新敌人——The Wraith. Elizabeth Weir博士是亚特兰蒂斯小队的队长,她是一个外交关系专家。她拥有出色的政治才能,但在军事上喜欢虚张声势,在军队里面担任少校之职。John Sheppard是一个天资聪颖的驾驶员。陆军少尉Aiden Ford担任副驾驶员,他是一个年轻热情的军官。Rodney McKay博士是一个聪明机智的天体物理学家,曾在星际之门司令部任职。飞船上还有一位朋友——Teyla,她是天马星系人,Arhosian人年轻漂亮的领袖,与亚特兰蒂斯小队一起跟The Wraith战斗。

在新的一季中加入了许多新面孔,他们之中最引人注意的是Ronan Dex,一个为了捍卫自己的星球而与The Wraith抗争7年的天马星系人。还有地球最新型的银河战斗巡洋舰Daedalus--代达罗斯号的司令官,Steven Caldwell上校。
新的一季新的冒险,Atlantis的冒险再度归来,带领你探索深奥的宇宙。
我看了以后觉得weai很白吃!!!
 HEROS
 
这是一个关于在全世界有些人发现他们拥有某些不同寻常的超能力之后去这些能力是如何影响他们的生活的故事.
本剧不仅描述了拥有这些超能力后将会对这些人意味着什么,同时也详细了叙述他们是如何得到这些超能力的。渐渐的,这些人将走到一起,共同对付那些想利用他们的超能力DNA并占为己有的人。

Peter Petrelli: 一个30岁的男护士认为自己可以飞。
Diego Mendez: 一个28岁的瘾君子在他吸毒后有快感时可以描绘出未来的样子。
Niki Sanders: 一个在拉斯维加斯的33岁的女歌舞者发现自己可以利用镜子做一些不可思议的事情。
Hiro Makamura: 一个24岁的日本动漫迷可以让时间停止。
D.L. Hawkins: 一个31岁的监狱犯人有崂山道士的穿墙术。
Claire Bennet: 一个17岁的拉拉队长在关键时候就能启死回生。
 
巴比伦5
 
故事的背景设定在公元2257年,人类已经突破光速,开始大规模星际旅行及在太阳系附近殖民,与多个外星文明接触并有贸易联系。一天,一艘地球联邦的星际驱逐舰在探索未知星际空间的时候遇到一艘不明星船,因为误判对方意图而先敌开火。对方叫明巴利外星族(Minbari),比人类早进化发展几千年,其技术人类无法望其项背。不巧的是地球星船孤注一掷先敌开火的时候把灰色議會議長杜哈的给干掉了(那位老兄其实知道按大设计蓝图,明巴利必须与地球人联合并融合,这次到这里也不是闲逛,而是准备与地球人第一次亲密接触)。于是明巴利对地球开战,摧枯拉朽所向披糜,在对地球本土最后一击的过程中,明巴利却突然停止进攻并宣布投降。总之,停战后地球出资在中立空间建设“巴比伦空间站",致力星际交流、谈判及和平合作。前面四座都被摧毁或莫名其妙消失,于是有了巴比伦5号。巴5军头Sheridan和明巴利大使笛嵐(Delenn)带领众喽罗,联合火星殖民地抵抗力量反对地球联邦通过谋杀政变而上台的独裁总统,联合各外星文明反击神秘黑暗种类——影族(Shadows),向佛隆人(Vorlon)说不,最终走上独立自主自力更生的发展文明道路。

1994-1998在美国热播的《巴比伦五号》科幻电视连续剧,是一部想象力丰富却又富有现实教益的电视连续剧,近年罕见的优秀作品。某种程度上,它与其说是一部科幻剧,不如隐含着编者对今天纷乱的世界和文化冲突平息、人类和平共处的期望。笔者在看完这部剧集后,把它与《星球大战starwar》、《星际迷航startek》并列的最优秀的星球科幻剧集。

巴比伦五号故事假设发生在2260年前后,当时人类社会已经脱离了他们的幼年期,开始进入到银河系的太空,开拓人类的新天地;却发现在这个原来以为是空荡荡的星河中,却已经是一个强国林立,纵横郫合的世界。人类的技术在这个世界里,充其量是新生的落后的一个。按其中的一个银河强国圣陶利(centaori)的定义,地球世界只是一个B7-B9升级的世界(即智慧人种),社会不稳定,技术仅是初级宇宙阶段,银河殖民强国圣陶利可以征服或殖民的对象。

一个偶然的错误导致了地球人类与另一个古老而强大的银河国家明巴里发生毁灭性的战争。明巴里是一个比圣陶利更强大更古老的文明世界,地球原始的技术不理明巴里舰队的对手,地球人的太空追踪技术不能锁定明巴里的目标,而明巴里舰队却可以轻易摧毁地球人的一切抵抗力量。愤怒的明巴里人把地球人的殖民地一个个摧毁,把地球人赶尽杀绝。整整三十亿地球人死在那场战争中,正当明巴里打算进行毁灭地球时,却突然发现了一个惊人的秘密——明巴里人和地球人在基因上是相通的,用明巴里人的话说,地球人有着明巴里人同样的灵魂;因此,按照明巴里的传统,他们不能杀死地球人。因此,明巴里人在胜利在望时,突然结束了战争——向地球人投降,并交出所有被占领的殖民地;赔偿战争损失,结束了战争。

地球人糊里糊涂地死里逃生成了胜利者,也一跃成为银河系各国敬畏的对象——居然打败了强大的从来没有失败的明巴里;糊里糊涂地成了银河世界的强国。作为这个强国对战争反思的一部分,地球人决定仿照地球上自由港的方式,在战争后设定的中立地带建立中立的自由港太空站,这就是巴比伦项目。

为了防止各个强大世界互相冲突,各个世界之间约定一定的中间区域是互不驻军的中立区。在缺乏沟通的相互世界中,这是避免冲突的唯一办法。巴比伦太空站非常大,可以容纳25万以至更多的人居住;长50公里,宽达9公里的巨大圆桶,构成一个巨大的城市;并拥有强大的自卫武装——自从明巴里战争后,地球舰队通过技术交流和明巴里赔款,的确变得真正地令人畏惧。

不过巴比伦计划的实施并不顺利,一二三号太空站先后在接近完工时被不知什么地方的攻击摧毁。而巴比伦四号更是干脆失踪了,于是,最后在加倍加强防卫后,建成了巴比伦五号。

巴比伦五号是银河系第一个自由港。地球人打仗和科技不怎么样,但做生意的本事却是银河少有,各世界的异形外星人都跑到巴比伦上做生意,巴比伦五号一跃成为银河系最繁荣的自由港;与此同时,它又汇集了银河系各个世界的大使——这些习惯于战争解决问题的外星人没有几个经历过地球-明巴里这样因为误解带来的毁灭性战争,居然一直没有想到建一个类似的外交自由港。现在,对于这种目的在于相互沟通的新鲜事,都很有兴致地把自已世界的有威望的人派到巴比伦五号上,看看外交是不是可以真的减少一点相互的冲突,带来一点实际的利益。

巴比伦五号的故事,由此展开。

[背景知识介绍]

引子:

笛嵐(Delenn):在每一个时代,总会发生一件事情足以扭转整个我们所认知的世界。这是历史的延续性。
吉凯:未来总是在伤害痛苦中诞生。无情的战史是歷史的伤痛。如果我们拥有足够的睿智,就能将这些伤痛转变成為对於更美好的未来的承诺。因為我们知道我们无法承担重蹈过去的覆辙。
笛嵐:在战争的痛苦中,未来诞生了。有一天这个未来将会在上百个世界歌颂与纪念。一个所有梦想的终极庇护所,是我们对於和平最后也是最佳的希望,巴比伦5号。

摘自巴比伦5号:In the Beginning
           
特点:

【Babylon 5/巴比伦5号】里的宇宙观和关于人类起源及归宿的设想是所知道的所有宗教神话传说里最合理、最能自圆其说的体系。

在很久很久以前,有一种智能生命,上亿年以前就已经漫游星际,后来更是超脱了身体的限制,以非局域化的类能量形式存在,视为原始天尊。后来他们的智能太高,懒得管原始种族的这些破事了,把这些俗务交给两个后起之秀——影族和佛隆人。
影族和佛隆人可说是阴阳两极,影族是“魔"(黑暗邪恶),主张通过竞争和战争推动原始种类的进化,老是在各族类中及族类间挑动战争和冲突;佛隆人是“佛"(追求和平协作),主张通过合作、共处和宗教净化推动发展,所有种族文明的神明宗教信仰其实都是他们捣的鬼。他们还没有到非局域化的程度,但与我们熟悉的身体、意识概念不一样。一千年以前(地球上公元十五世纪前后),影族曾攻击明巴利外星族,但佛隆人帮着明巴利把影族击退了。佛隆人以神谕的形式告诉明巴利,下次黑暗邪恶的敌人再捣乱的时候,地球人是他们必不可少的同盟。

亿万年来,“佛"和“魔"互相制衡,于是天下分久必合合久必分,安分不了太久也折腾不到哪儿去,总体相安无事。但双方的路线斗争却在不断加剧。

现在影族又开始挑动新一轮星际大战。佛隆人驻巴比伦5号星船大使Koch给约翰薛瑞登少校帮了个忙,让他敲掉了影族的一艘船。影族得知以后派杀手把Koch干掉了。从此魔佛大战,魔也是魔,佛也是魔,战火所及,盒子炮一抡就把整个行星化为无形。时至今日,已无佛无魔无相生无相克,天下苍生哭天不应叫地无门,约翰薛瑞登少校、笛嵐及众喽罗垂死挣扎,要消灭旧制度建立新秩序。关键时刻,原始天尊显灵,把佛和魔臭骂一顿,收入“葫芦",带出三界逍遥去也。百万年之后,地球人与明巴利外星族已融为一族,并到了类似于佛隆人/影族的高智能层次,又成为后起之秀。


地球与明巴利的战争

西元2156年,星际势力中的强权圣塔利共和(Centauri Public,名曰共和但实行帝制)首次与地球(Earth Alliance)接触并进行贸易,圣塔利人十分喜欢地球的精巧饰品,愿意以经贸的方式与地球保持关係,而地球透过贸易的方式取得超空间(Hyper space)航行技术与跳跃闸门(Jump Gate)的建造方式,从此,人类的活动范围不在止於太阳系。
自从23世纪初期人类打赢了对迪加星(Dilgar)的战争以后,便积极扩充在星际间的殖民地与势力范围;2243年,年轻的蓝道莫拉里(Londo Mollari)出任圣塔利共和派驻地球的大使,当时的地球联盟军方(EarthForce)高层对於另外一支神秘种族明巴利(Minbari)感到十分兴趣,想要派遣探测舰队前往明巴利领域边界查看状况。

莫拉里获邀前往总部设在日内瓦的地球联盟军方总部与高层研商探测明巴利的对策,当时军方的构想是派遣一支武装探测舰队前往明巴利的边境一探究竟,并希望圣塔利政府能够提供关於明巴利人的武力与边境哨站配置,莫拉里则表示要探测明巴利人可以,只能派遣一艘船前去,再多便会被视為挑衅,并且苦口婆心的劝告军方高层明巴利人对於经贸没有兴趣,明巴利是最早从事星际旅行的种族,即使我方(此指圣塔利)全力发展外交的同时也不敢轻忽;很遗憾的,自大而傲慢的人类并不听劝,莫拉里离去前严重警告人类不要吵醒正在沉睡的巨龙(此指明巴利)。 在明巴利方面,骑警组织(An\'la\'Shok,即Ranger)雷纳(Lennon)警觉到瓦伦神諭(Valen Prophecy)裡面叙述影族(Shadows)与黑暗势力集结威胁的即将到来,前往灰色议会(Grey Council)向议长杜哈(Dukhot)力陈影族的威胁与恢復和佛隆人(Vorlon)联盟的重要性,但却遭到军事局代表的讥讽与轻忽;最后,议长杜哈决定以灰色议会成员自组探险队前往影族的母星札哈洞(Z\'Ha\'Dum)一探究竟。

2244年年底,地球联盟军方派遣以詹考斯基舰长(Captain Jankowski)指挥的普罗米休斯号(Prometheus)巡洋舰為首的武装探测舰队前往明巴利边境进行军事情报侦蒐,在完成最后一次的跳跃航行后,地球联盟舰队进入明巴利边境;此时,前往札哈洞的明巴利舰队也离开了最后一个边区哨站,当时的明巴利战舰上正在举行灰色议会新成员笛嵐(Delenn)的入会仪式,由议长杜哈亲自主持。

詹考斯基舰长发现明巴利舰队的踪影,而明巴利战舰的人员也发现了地球联盟的武装探测舰队,双方相互侦测,但地球联盟方面因為科技远落后於明巴利,以至於无法锁定明巴利人的船舰,詹考斯基舰长决定发出讯息:我们只是来进行探测的,我们并没有恶意。同时,明巴利人也收到了这则通讯,但因為语言不通无法取得有效联繫,因此明巴利军方决定依照传统,打开战舰上所有的砲门,以示我方的军容盛大与诚挚的待客礼仪,但是,詹考斯基却误会这项传统仪式,认為这是明巴利人恶意而不友善的举动,便决定先发制人。

这场因误会而起的冲突造成了灰色议会议长杜哈的身亡,灰色议会顿时分裂成主战与主和两派,新成员笛嵐感於与杜哈的友谊与提携,在悲伤与盛怒之下投下关键性的一票:追踪敌方舰队展开復仇圣战。

这场战争自开打起,人类就一直处於绝对的劣势,一场小小的胜利都没有嚐过,此时,地球联盟军方深刻了解到两件事情:第一,我们需要一场重大的胜利来激励士气以扭转战局;第二,要是无法有效反败為胜,那人类只有走向灭绝一途。

唯一的一场胜仗是由约翰薛瑞登少校(Lt. Commander John Sheridan)所指挥的莱辛顿号(Lexinton)在小行星带设下战术热核炸弹陷阱,以假的求救讯号引诱明巴利旗舰黑星号(Black Star)进入热核炸弹引爆范围而成功摧毁之。

也因為这场胜利的激励,人类在这场战争苦撑了两年之久,在 2247年底,明巴利人终於迫近人类的故乡:地球。在最后的地球保卫绝战的前夕,地球联盟的总统号召全体人类共同為了人类的延续做最终的圣战与奉献,只要能够多拖延敌方一分鐘,就会有更多的人们逃往中立区以延续人类的文明命脉。 人类组成史上前所未有的战斗队伍进行这场殊死地球保卫战,双方在月球轨道附近形成惨烈的战线(The Battle of the Line),人类整体还是居於挨打的地位;但是,就在明巴利舰队即将胜利的前一刻,明巴利人突然宣佈投降,而这个突如其来的投降却困扰整个宇宙长达十年之久。

“巴比伦计划(Babylon Project)与巴比伦五号(Babylon 5)星站的由来" 在地球与明巴利的战争结束之后,地球联盟参议院做出了重大的决定:為了不再重蹈类似的错误,為了能够学习和平的与星际间其他民族相处往来,地球联盟参议院提出巴比伦计划。巴比伦计划提议在中立区域由地球出资建造一个太空站,以提供各势力一个商业与外交的场所。

但是,似乎每一个规划美好愿景的计划彷彿都收到诅咒一般,巴比伦计划也不例外,自巴比伦一号(Babylon 1)建造起,都因為建造半途中遭到破坏而宣告失败,但是人类并不气馁,仍然努力建造Babylon 2以及Babylon 3,但仍逃不过厄运的诅咒,最后,人类倾全力建造了有史以来最大的太空站:巴比伦四号(Babylon 4)。但是很离奇的是,在巴比伦四号星站完工啟用后24小时便神秘消失在14星区(Sector 14)。

遭受到如此挫败,此时的地球联盟政府已经无力再负担建造第五座太空站,所幸在明巴利星族政府大力支持与其他星际势力的资助之下,人类在有限的预算下在爱普希隆星系的第三号行星(Epsilon 3)轨道上建造巴比伦五号星站(Babylon 5),并於2257年完工运转,2258年正式对外开放。 该站的首任指挥官是很多将校级军官积极争取的,而地球联盟也规划许多人选,这其中包括战争期间的战争英雄薛瑞登上校(Captain John Sheridan),但是,因為巴比伦五号星站的主要出资者為明巴利人,在明巴利人强烈也是唯一坚持不二的人选下,杰夫辛克莱中校(Commander Jeffrey Sinclair)成为第一任的星站指挥官,虽然这个决定在地球联盟军方高层引起不小的反弹与质疑。

[五号战星的几大种族简介]

地球联盟(Earth Alliance)

成立于2087年,当时并非是一个世界性的组织,地球仍以联合国为主体维系人类的发展;2107年,联合国解散;2115年,地球联盟政府正式成立; 2122年地球联盟正式成为代表全人类的政府,并于2232年在瑞士日内瓦成立地球议会,为总统制;2156年人类与圣塔利共和接触,并由圣塔利人那里取得超空间航行技术,并迅速在星际间殖民与扩充势力范围。地球联盟为一以行星为主体的政府,联合月球、火星、木星爱欧太空站以及数十个邻近地球的殖民地所组成的政权,对外代表全人类负责外交与军事。在五号战星影集里,地球联盟并没有影射现今任一国家的现况,只是单纯的代表人类而已,而且,在该剧世界的设定里,地球只能算是一个开发中星球而已。顺便一提的,即使当时人类以可以自由出入地球与从事星际旅行,但是,人类的许多劣根性依然存在,例如好战、排外、自大傲慢、贪婪等。

在2258年年底,总统山提雅哥遇刺身亡,副总统克拉克继任。克拉克总统在为期间设立夜巡组织(Nightwatch)与和平部用以监视人民的言行以达成其军事独裁统治,2261年强行解散地球议会并且颁布戒严令,火星等殖民地不服而需告独立,克拉克派兵强行镇压火星独立运动、轰炸火星非军事目标、入侵星际新闻网(Interstellar News,简称ISN)控制媒体;此外,克拉克总统整合了心感团与影族提供的科技掀起内战,并且在2258年年底秘密策划暗杀山提雅哥总统。2261年年底内战结束后,克拉克总统遭到薛瑞登逮捕,继任者为前俄罗斯联团主席苏姗娜卢沁科。

明巴利联邦(Minbari Federation)

明巴利人在五号战星的世界里是名符其实的超级强权(在此暂且不论佛隆人与影族),他们是最早从事星际探险与航行的新兴种族。在大约西元1100年前后,他们发现了存在于星际间但发明者未知的超空间跳跃航行闸门,但是在150年后,却遇上了每隔千年发动一次战争的影族;当时的明巴利人被影族打的几乎就快要灭亡了,此时,出现了一位神秘的民族英雄瓦伦(Valen),他为当时的明巴利人带来的先进的武器与基地,并与当时的佛隆人结为联盟打败了影族。

明巴利人的社会分成工人、战士与宗教人士三个阶级,这三个阶级再推出三个主要的意见领袖组成灰色议会,而灰色议会可以视为明巴利人的政体,议会中选出一人当主席以裁决议会讨论的事情;此外,明巴利人还有一个特殊的阶层,An'la'shok,他们的主要任务是监视影族的活动,以及早准备即将到来的战事。而这些组织都是瓦伦出现之后才产生的,也可以说明巴利的政治运作是由瓦伦所建立的。

明巴利人的外观很类似人类,唯一不同的是在他们的头上有一圈外骨架构,且耳朵的位置也较人类低些;一般而言,明巴利人较人类强壮、拥有较强的心灵感应能力、较人类遵守本分。

圣塔利共和(Centauri Prime)

圣塔利人外表类似人类,但却拥有两个心脏,成年男性的特征是头发梳的跟一个扇子似的、女性则是光头但留有一撮编好的长发。此外,圣塔利人是最早与人类接触的外星种族,他们喜欢地球人的饰品并与人类贸易,而人类也从圣塔利人手中获得超空间航行技术与如何制造跳跃闸门(Jump gate)。

圣塔利共和名曰共和,但实则施行帝制,其母星为圣塔利主星,人口约三亿人。圣塔利的建筑风格与近代欧洲相类似,表面上看似宁静优美的中古庄园,有钟楼、广场、树荫,但却拥有仅次于明巴利人的科技。

在圣塔利的历史中,他们曾经拥有广大的殖民区域与征服的星球,这点与过去的英国类似,他们以武力控制落后但资源丰富的星球,压榨奴役该星球人民与资源并实行恐怖统治,受害最深的是南尔星人,直到地球纪元2100为止,是南尔星人永难忘怀的梦魇。

目前的圣塔利已是日暮西山的强权,2258年,圣塔利与影族结盟,希望藉由结盟再次恢复昔日光荣盛世,很自然的,百年前让圣塔利屈辱撤退的南尔星自然是头号目标,他们视重新征服南尔星乃是恢复过去荣耀的第一步。然而,与影族结盟非但使圣塔利恢复盛世的美梦破灭,反而更将圣塔利主星的人民推向痛苦的深渊,迫使圣塔利共和进入闭关自守的绝境。

南尔星(Narn Regime)

南尔星的历史上曾经二度遭到外族统治与占领,第一次是地球纪元1250年前后,当时的南尔星南半球整个被影族占领,后来当时的南尔圣哲吉关带领南尔星人反抗影族,而影族也因此杀光了具有心灵感应能力的南尔人;在吉关所著的圣书里,详细记载影族的真相,并以此书让后代传阅与警惕。

第二次是在地球纪元2113年,当时的圣塔利共和征服的南尔星,把他们当成奴隶使唤,这样的悲剧一直到2228年由一群勇敢的南尔星所组成的反抗军卡里总部率领人民利用圣塔利人的武器将圣塔利人赶出自己的家园,在南尔星人重获自由之后,卡里总部也就名正言顺地成为治理南尔星的政权。

南尔星是一个很干燥荒凉的星球,资源亦不丰富,所幸拜圣塔利人当年仓促撤退,遗留下许多科技供南尔人研究,并很快的建立自己的舰队,积极建立自己的殖民星球与前哨站,一跃成为星际间的新兴势力。

在五号战星的世界里,南尔星人的的科技稍微落后于地球联盟,所以人类与南尔星人可以说是一对难兄难弟,在强权(佛隆人、影族、明巴利人与圣塔利共和)环伺的银河里求生存发展。

最初生物(First Ones)

一群最古老的生物的总称,他们早在数百万年以前就离开了银河系,没有人知道他们为何离开,也没有任何已知文献记载属于它们的历史。在五号战星的宇宙观里,整个宇宙的自身就是一个巨大的生命体,这个生命体孕育了许多生命,而这些古老的生物在天地创生之时便以出现,他们与天地齐寿,并且指导后进的智慧生命。

A. 佛隆帝国(Vorlon Empire)

佛隆人的领域到底有多大?母星在哪里?至今仍是谜团,因为只要进入佛隆人领空的船只就在也没回来过(相类似的情况也发生在影族)。佛隆人总是罩着一件外护甲,并且包得死死的,神秘到无法让人一窥其真面目。佛隆人拥有比影族强大的心灵感应能力,并且可以将自我意识分割植入其他族类的意识里。
佛隆人的哲学思考是:‘Who are you?’他们相信纪律、服从与秩序是生命进化的准则,基于此一信仰,他们的足迹踏遍全银河系,并为原始的智慧生命带来智慧之光与秩序,也因此佛隆人经常以各种不同的姿态出现在各族类的历史与宗教文献里。佛隆人并不主动结盟,他们喜欢默默从事提供协助与自我盘算该如何打赢他们的死对头:影族。

B. 影族(Shadows)

影族的家乡位于银河边缘的一颗孤立行星:札哈洞。影族与佛隆人同为最初生物离开银河系前授其委托指导后进的守护者,与佛隆人的哲学思考相反,影族崇尚混乱与斗争,并认为只有战争、破坏毁灭、无止境的斗争才能促进生命的成长与进化,基于这样的思考,影族约每隔1000年就会发动一场战争,唯有在这场战争中获胜的一方方能继续生存下去。

影族喜欢利用仲介者(任何种族皆可,在五号战星里,影族选择了人类,莫登先生)与其他种族交往结盟,在结盟之前,影族总是会问:“What do you want?”只要回应了,影族透过仲介者的安排便会完成允诺的事情。在正常情况下,影族处于隐形状态,除非在特定的光谱频率之下,否则肉眼是无法察觉他们的存在的。

影族的外貌很像大蜘蛛的变形,三角形状的头部、四眼、四足、具有强大的心灵感应能力,犹如人类的梦魇一般;他们的星舰具有生物的特性,其外观如同蜘蛛鬼魅,并具有隐形的能力,影族并非靠着超空间往来星际间,而是藉由Phase-in与Phase-out的技术达成。

C. Lorien

他是First Ones的代表,同时也是First One,Shadows与Vorlon 都算是他的学生与后代,Lorien可以算是他的名字,也可以说他是 First One集合体的代表,或者说Lorien就是First One也不为过。 Lorien长年待在札哈洞的地底深处,他不忍离去,因为他的子孙正陷入了相互讨伐争战的漩涡里,他们已遗忘了当年所身负的重任; Lorien也在等待,等待一个愿意了解这一切征战来龙去脉的人。

地球联盟军(EarthForce)

由地球联盟直辖的军事组织,负责地球联盟所属殖民地巡逻与抵抗侵略的任务,目前地球联盟军的主干为亚米加级驱逐舰,它是地球/明巴利战争结束后才成军的,并搭配少量的海波龙级驱逐舰(大部分毁于地球/明巴利战争)。2260年中在伊凡诺娃中校揭发克拉克总统涉嫌暗杀山提雅哥总统的证据之后,地球联盟军分裂成两派,一派由克拉克直接下辖,另一派由参谋联席会主席海格将军(Joint Chief of Stuff General Hague)组成反克拉克阵营,而地球联盟就此陷入内战之中。

星际新闻网(Interstellar News)

与现今美国的CNN(有线电视新闻网)类似、功能相同、播报风格相似,只是在2260年年中到2261年年底被克拉克掌控作为政治宣传的工具。

星际探勘公司(Interplanetary Expeditions)
 

成立于2148年,实验室设在圣地牙哥。星际探勘公司属于跨星际的企业集团(与现今跨国公司类似),他们与多个星际政府签有合约以保障能自由进出各星球势力,并分享所发现的结果。星际探勘公司的座右铭为:探索过去、开创更美好的未来。他们研究存在星际间古老的遗迹并希望科技的发展,即使他们在某些秘密任务上面对的是无尽的未知,不过,能够从这些古老遗迹中所遗留的资产里得到多少利润与商业价值或许才是他们最关心的
 
天劫
大导演斯皮尔伯格03年的科幻巨作,此乃精品也,故事起源于2战一个美国轰炸机机组在将要坠毁时发生了意想不到的事情。。。从此机组人员过着逃亡的生活,追捕者是谁?
下一个看看吧,喜欢科幻的这个也必须看!!追捕者是政府+外星人~~汗,老美老是开政府玩笑
 
4400
故事讲述近百年来有不少人被外星人劫持,在2004年7月的一天,美国国家安全局发现一颗慧星高速的飞向地球,危及地球人安全。全球各国(包括中国)都向该慧星发射导弹欲摧毁之。结果没有任何作用,最后慧星在上图中那个湖边降落,一阵迷雾散开之后,湖边出现4400个不同年代被TAKEN的人,而且他们都完好的保持着各自年代里被劫持时的原样。最终当这4400人走向社会时,却发现他们有着超乎常人的特异功能。这些人曾去了哪儿?又怎么回来的?为什么会有特异功能?为什么是4400个人?他们最终会给地球带来怎么的变化?或者这是一个外星人的实验?或者是来自未来的拯救行动?一切的疑问,都在剧集中……

在海滩事件——4400人被未来世界的人带走又送回来,披露后一年,世界发生了巨大的变化。经过一段紧张的医疗观测后,Tom回到了NTAC(国家技术援助中心)。他最终保护了儿子,使其免受一个类似的政府研究,而且也为有希望重新过上正常的生活而激动。在事业方面,他也渴望再次同Diana合作,重新回到这个领域。Diana,在同一连串无能的搭档合作之后,最终找到毁掉公文让Tom重回岗位的办法,在此期间,她还正式收养了Maia。

其间,Richard,Lily,和他们的孩子——一个六个月大,不同寻常的孩子,仍然住在远离Jordan Collier的山间小屋里,过着粗茶淡饭的日子。Collier已经关掉了Arcadia Estates ,还有他的住宅,为这4400人建起了避难所,同时准备设立“4400中心”,在这里其他4400人可以交流沟通,发现和完善自己的超能力。Collier在接触Lily的腹部之后,出现了有害的反应,Shawn治愈了他,之后他们就发展出亲密的父子关系。Collier成了Shawn的监护人,并利用他医治4400中心的重要赞助人。

世人对4400人甚感好奇,于是关于他们的神秘能力的流言四处传播,公众态度分为两种,一种是包容他们,一种是畏惧他们。当4400人努力重新开始他们“被打断的生活”时,每个人都会在即将发生的事件中扮演关键角色…那些决定人类命运的事件。
==========================================================================================
其次是现实题材的悬念,战争,破案片,包括over there(美国大兵在伊拉克的真实写照,大陆译做远方)越狱(不看不知道,场面真火爆,高智商+抑郁症=天才,又一个反映美国社会黑暗的金字塔顶)monk(又一个高智商,是个侦探,生活不能自理,只会破案)反恐24小时(恶搞美国社会,争分夺秒,反映911以后的情况)秘密部队(好多熟人,枪战场面处处可见,爽)
 
神探阿蒙(monk)
艾德里安-蒙克曾是旧金山警察局前途无量的侦探,他用非常规的方式破获了许多棘手案件,这些经历被传颂为警界传奇。但当妻子不幸遇害后,深受打击的蒙克患上了严重的强迫症,这种精神疾病令他对日常事物产生了反常的恐惧,他害怕微生物、人群、高度,甚至牛奶……最终,强迫症令他失去了工作,而每天的日常生活对他来说也变成了艰巨的挑战。

  这些日常挑战迫使蒙克雇佣了私人护士莎罗娜-弗莱明,她几乎要为他打理每件事, 比如整理抽屉里的袜子。在莎罗娜的协助下,失去工作的阿蒙开办了私人侦探所,于是出现了女性版华生医生与神经质版福尔摩斯的奇妙组合。

  身为私人侦探,蒙克仍用最不寻常的方法来破案。虽然不再是旧金山警察局的一员,蒙克昔日的上司利兰-斯特梅耶还是经常找他讨论案子,蒙克细致入微的观察力和过目不忘的天赋使很多疑难案件迎刃而解。利兰也是一位出色的侦探,但是他知道自己永远比不上杰出的蒙克,这令他既沮丧又抓狂。利兰的副手兰迪-迪舍一心想为成警局将来的传奇人物,他自然对蒙克感到非常不满。

  蒙克就是这样一个怕黑、恐高、有洁癖、神经质的天才侦探,他能解决复杂的疑案,却无法解决自己的问题,而妻子遇害的悬案也是他心头永远的创伤。蒙克很想赢回警察的工作,但他是否管好自己的神经质,并一直保持高超的破案能力呢?


主要人物
艾德里安-蒙克--蒙克原本是旧金山警察局最出色的侦探,但是妻子的遇害令他几乎精神崩溃。极端的洁癖和对一系列日常事务的恐惧症使他生活无法自理,前后两任私人护士的帮助下,阿蒙开始慢慢找回自我,并开办了私人侦探所,昔日的警察同僚也常来找他帮忙。虽然精神兮兮,蒙克仍旧是旧金山最具天分、最出色的侦探。

  莎罗娜-弗莱明--莎罗娜是蒙克的前任私人助理及护士,她能让神经质的蒙克顺利度过每一天。在阿蒙开办私人侦探所之后,莎罗娜的角色成为了护卫这个神经版福尔摩斯的女性版华生。最后她决定回新泽西与前夫复婚,因此离开了蒙克。

  利兰-斯特梅耶--利兰是蒙克在旧金山警察局的昔日上司,虽然蒙克不再是警局的一员,利兰仍经常找他来协助破案,他细致入微的观察力和过目不忘的天赋的确也从未令利兰失望。同样身为出色的侦探,利兰知道自己永远比不上杰出的蒙克,这时常令他感到抓狂。

  兰迪-迪舍--兰迪是利兰的助手和忠实的跟班,不够聪明却野心勃勃。他利用一切机会支持和鼓励上司的自负,并且常常打击蒙克以取悦利兰。
  
  查尔斯-克洛戈--查尔斯是阿蒙的心理医生,蒙克的忧虑和烦恼在他这里得以倾诉。虽然蒙克具有破案的天赋,查尔斯医生的分析也常常帮他解决问题。而且在查尔斯的帮助下,虽然进展缓慢,蒙克在努力重建正常的生活。
 
 秘密部队
THE UNIT 是一套动作片集,由 David Mamet 及 Shawn Ryan 监製,剧情跟随一个特种部队所控制的秘密小组,他们冒着生命危险,在世界各地执行秘密任务,而他们的妻子则在后方支持他们,并为她们的丈夫保守秘密。Jonas Blane 带领其单位「the Unit」在野外执行任务,他亦招收了一个新队员 Bob Brown 作为他的下属。The Unit 成员包括 Jonas、Colonel Tom Ryan、Mack Gerhardt、Charles Grey、Hector Williams 和 Bob Brown,全都是熟练、可信、勇敢和可靠的军人, 他们互相依赖,并产生手足之情。Jonas 的妻子 Molly,在一眾队员的妻子中起领导作用,她安抚其他队员的妻子,因丈夫离家所感到的忧虑和犹疑。Molly 和一个隐藏其秘密的队员妻子 Tiffy Gerhardt,帮助 Bob 正在怀孕的太太 Kim,适应她新的秘密生活所带来的压力。