如题,我发现网上的代码都用不了。
那个朋友可以给出代码?最好兼容win7.
先谢谢咯

解决方案 »

  1.   

    http://mysql99.blog.163.com/blog/static/457175992008152522925/
      

  2.   


    procedure TScreenSpy.CtrlAltDelEnt;
    var
      old_desktop: HDESK;
      hwndCtrlAltDel: hwnd;
    begin
      old_desktop := GetThreadDesktop(GetCurrentThreadId());  SelectDesktop('Winlogon');
      hwndCtrlAltDel := FindWindow('SAS window class', 'SAS window');
      if hwndCtrlAltDel = 0 then
        hwndCtrlAltDel := HWND_BROADCAST;
      PostMessage(hwndCtrlAltDel, WM_HOTKEY,  0, MAKELONG(MOD_ALT or MOD_CONTROL, VK_DELETE));
      if old_desktop <> 0 then
        selecthdesk(old_desktop);
    end;
    当然可以模拟啊。。你新建一条线程然后把这个线程切换到Winlogon桌面。
      

  3.   


    function SelectDesktop(name: PChar):Boolean;
    var
      desktop: HDESK;
    begin
      if IsWinNT() then
      begin
        if (name <> nil) then
        begin
          //打开指定的桌面
    desktop := OpenDesktop(name, 0, FALSE,
    DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or
    DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or
    DESKTOP_WRITEOBJECTS or DESKTOP_READOBJECTS or
    DESKTOP_SWITCHDESKTOP or GENERIC_WRITE);
        end else
        begin
      //没有指定桌面,所以打开输入桌面
    desktop := OpenInputDesktop(0, FALSE,
    DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or
    DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or
    DESKTOP_WRITEOBJECTS or DESKTOP_READOBJECTS or
    DESKTOP_SWITCHDESKTOP or GENERIC_WRITE);
        end;
        WriteLog(IntToStr(desktop));
        //打开桌面失败
        if (desktop = 0) then
        begin
          Result := False;
          exit;
        end;    //切换到新的桌面
        if (not SelectHDESK(desktop)) then
          if (not CloseDesktop(desktop)) then
          begin
            Result := False;
            exit;
          end;
        Result := True;
      end;
      Result := (name = nil);
    end;