类似于MSN?

解决方案 »

  1.   

    {象MSN那样判断用户是否在电脑旁操作。
                                     --- By 麻子。}
    program UseHook;
    //-----按 Icon.txt 生成 icon.Res 编译到exe中---------
    {$R    '..\Icon\icon.Res'  '..\Icon\Icon.txt' }uses
      Windows,ShellAPI;const
      ClassName       = 'LiuMaZi'; //窗体类名
      WindowsName     = 'LoveLiuMazi';//窗体标题
      WM_COMMAND      = $0111;  //单击菜单项消息
      WM_LBUTTONDOWN  = $0201;  //鼠标左键单击消息
      WM_TIMER        = $0113;  //计时器函数
      WM_KEYFIRST     = $0100;  //第一个键盘消息
      WM_KEYLAST      = $0108;  //最后一个键盘消息
      WM_MOUSEFIRST   = $0200;  //第一个鼠标消息
      WM_MOUSELAST    = $020A;  //最后一个鼠标消息
      WM_MyTray       = $0800;  //自定义消息,用于响应托盘操作var
      MyMessage : TMsg;            //消息结构
      WinClass  : TWndClass;       //窗体类结构
      WinHandle : hWnd;            //窗体句柄
      PopupMenu : hMenu;           //菜单句柄
      MousePos  : TPoint;          //鼠标位置
      IconData  : TNotifyIconData; //托盘结构
      Count     : integer;         //累计经过的时间
      state     : Boolean=True;         //当前状态,True为在线,False为离开
      NextHook  : LongWord; //-----------窗体消息处理过程,回调函数-------
    function WndProc(WinH : hWnd; WinMsg,WParam,LParam : Longint): Integer; StdCall;
    Begin
      Result := 0;
      Case WinMsg of
     //预定时间到
        WM_TIMER  :begin
                     if state=True then
                     begin
                       Count:=Count+1;
                       {5秒后"离开"}
                       if Count=5 then
                       begin
                       //换托盘图标为离开
                         IconData.HIcon:=LoadIcon(hInstance,'Icon2');
                         IconData.UFlags:=NIF_ICON ;
                         Shell_NotifyIcon(NIM_MODIFY,@IconData);
                       //置当前状态为离开
                         state:=False;
                       end;
                     end;
                   end;
     //鼠标单击菜单
        WM_COMMAND:begin {菜单项ID}
                      case WParam of
                       {关于}
                       1:  MessageBox(0,'刘浏   QQ  : 71892967'+#13+
                                      'http://Liumazi.efile.com.cn/'+#13+
                                      'MSN: [email protected] ',
                                      '象MSN那样判断用户离开',MB_OK);
                       {退出}
                        2: PostQuitMessage(0);//给线程消息队列送WM_QUIT退出消息
                       end;
                   end;
     //操作托盘图标
        WM_MyTray :begin           {鼠标左键}
                     if (LParam = WM_LBUTTONDOWN) Then
                     begin
                      //在鼠标当前位置处弹出菜单
                       SetForegroundWindow(WinHandle);
                       GetCursorPos(MousePos);
                       TrackPopupMenu(PopupMenu,tpm_LeftAlign Or tpm_LeftButton,
                                        MousePos.X,MousePos.Y,0,WinHandle,nil);
                     end;
                   end;
    //其他消息调用默认消息处理过程
        else Result := DefWindowProc(WinH,WinMsg,WParam,LParam);
      end;
    end;
    //-------钩子回调函数---(有消息时候该函数将被调用)-----------------
    function HookProc( iCode:Integer; wParam:WPARAM; lParam:LPARAM ):LRESULT;stdcall;
    begin
      Result:=CallNextHookEx(NextHook,iCode,wParam,lParam);
              //键盘消息
      if ( (PEventMsg(lparam)^.message>=WM_KEYFIRST)and
         (PEventMsg(lparam)^.message<=WM_KEYLAST) ) or
              //鼠标消息
         ( (PEventMsg(lparam)^.message>=WM_MOUSEFIRST)and
         (PEventMsg(lparam)^.message<=WM_MOUSELAST) )then
         begin
           Count:=0;
           if state=false then
           begin
         //换托盘图标为离开
             IconData.HIcon:=LoadIcon(hInstance,'Icon1');
             IconData.UFlags:=NIF_ICON ;
             Shell_NotifyIcon(NIM_MODIFY,@IconData);
         //置当前状态为在线
             state:=True;
           end;
         end;
     end;//----------------主程序------------------
    begin //找到则说明已有一个实例运行
      if findwindow(Pchar(ClassName),Pchar(WindowsName))<>0 then
        MessageBox(0,'程序已运行.....^_^  ','',MB_OK)
      else
      begin
     //填充窗体类结构体
        With WinClass do
        Begin
          Style       := 0;          {类风格}
          lpfnWndProc := @WndProc;   {窗口过程}
          cbClsExtra  := 0;          {额外类信息}
          cbWndExtra  := 0;          {额外窗口信息}
          hIcon   := 0;              {图标}
          hCursor := 0;              {光标}
          hbrBackground := 0;        {颜色}
          lpszMenuName  := nil;      {菜单}
          lpszClassName := ClassName;{类名称}
          hInstance:=GetModuleHandle(nil);{实例句柄}
        end;
      //注册窗体类
        RegisterClass(WinClass);
      //建立一个窗体(不可见)  
        WinHandle :=CreateWindowEx(0,ClassName,WindowsName,
                                  ws_OverlappedWindow,0,0,
                                  0,0,0,0,hInstance,nil);
      //建立菜单
        PopupMenu := CreatePopupMenu;
      //依次添加菜单项
        AppendMenu(PopupMenu,mf_Enabled  Or mf_String,1,'&Abort');
        AppendMenu(PopupMenu,mf_Enabled Or mf_String,2,'E&xit');
      //填充托盘结构体
        With IconData do
        begin
          cbSize := SizeOf(IconData);
          Wnd :=WinHandle;  //指定所属窗体
          uID := 100;
          uFlags := nif_Icon Or nif_Message Or nif_Tip;
          uCallBackMessage := WM_MyTray;           //指定消息ID
          hIcon := LoadIcon(hInstance,'Icon1'); //指定托盘图标
          szTip :='象MSN那样'+#13+'判断用户是否离开     '+#13+'Coder : 刘麻子 ';
        end;
      //添加托盘到系统任务栏
        Shell_NotifyIcon(nim_Add,@IconData);
      //创建定时器
        SetTimer(WinHandle,1,1000,NIL);
      //挂消息钩子
        NextHook:=SetWindowsHookEx(WH_JOURNALRECORD, HookProc,HInstance,0);
    //====消息循环==开始===========
              {此函数从消息队列取消息,遇WM_QUIT返回Fasle,从而导致循环结束}
              {如果队列内没消息,则当前线程挂起,直到有消息进入队列}
        While GetMessage(MyMessage,0,0,0) do
          DispatchMessage(MyMessage);//分发消息到相应窗体消息处理过程
    //====消息循环==结束===========//卸载钩子  
       UnHookWindowsHookEx(NextHook);
    //删除定时器
        KillTimer(WinHandle,1);
    //释放菜单
        DestroyMenu(PopupMenu);
    //释放托盘
        IconData.cbSize:=0;
        Shell_NotifyIcon(NIM_DELETE,@IconData);
    //释放窗体
        DestroyWindow(WinHandle);
      end;
      
    end.
      

  2.   

    就算拦截了键盘,鼠标也不完全啊还有很多设备,比如说打印机,其他的USB接口的外不设备
    也可以对计算机进行操作关键还是监视系统CPU,内存的运行情况等