有!修改注册表的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun下面的就可以!
当然还得在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer下面建立一个RestrictRun=Dword(1).
类似于:
1="regedit.exe"
2="notepad.exe"
3="explorer.exe"
........
上面列出来的是允许使用的!没有在上面列出来的就是不允许使用的!

解决方案 »

  1.   

    2 Kingron(WinAPI) :我是指OS是怎样读取注册表里的数据(如你所写的1="regedit.exe"
    2="notepad.exe"
    3="explorer.exe
    )来禁止用户使用别的程序!!!!!
    明白了吗?
      

  2.   

    Windows在运行一个程序之前,会搜索注册表中上面所说的注册表键值,判断将要运行的程序文件命名是否在列表中,如果在的话,允许运行,否则禁止运行!就这么简单。不是由注册表编辑器regedit来控制的,是系统的核心来控制的。
      

  3.   

    2 Kingron(WinAPI) :能不能写出源代码???具体怎样做的??
      

  4.   

    这是我写的一个程序中的一段代码,你自己看吧:
    procedure TMainWindow.LimitRunGBProc(bInit: boolean=true);
    var
      reg:tregistry;
      i:integer;
      buf:tstrings;
    begin
      reg:=tregistry.Create;
      buf:=tstringlist.Create;
      reg.RootKey:=LimitRunReginfo.RootKey;
      if binit then
      begin
        RestRunLB.Items.Clear;
        if reg.OpenKey(LimitRunRegInfo.Key,false) then
        begin
          if reg.ValueExists(LimitRunRegInfo.Name) then
          try
            RestRunCB.Checked:=reg.ReadInteger(LimitRunRegInfo.Name)>=1;
          except
            reg.DeleteValue(LimitRunRegInfo.Name);
          end;
          RestRunCBClick(self);
          if reg.KeyExists(LimitRunRegInfo.Name) then
            if reg.OpenKey(LimitRunRegInfo.Name,false) then
            begin
              reg.GetValueNames(buf);
              for i:=0 to buf.Count-1 do
                if buf.Strings[i]<>'' then
                  RestRunLB.Items.Add(reg.ReadString(buf.Strings[i]));
            end;
        end;
      end
      else   //Apply
      begin
        if reg.OpenKey(LimitRunRegInfo.Key,true) then
        begin
          reg.DeleteKey(LimitRunRegInfo.Name);
          if RestRunCB.Checked then
          begin
            reg.WriteInteger(LimitRunRegInfo.Name,1);
            if reg.OpenKey(LimitRunRegInfo.Name,true) then
            begin
              reg.WriteString('',extractfilename(paramstr(0)));
              for i:=0 to RestRunLB.Items.Count-1 do
                reg.WriteString(inttostr(i+1),RestRunLB.Items.Strings[i]);
            end;
          end
          else
            reg.DeleteValue(LimitRunRegInfo.Name);
        end;
      end;
      reg.CloseKey;
      reg.Free;
      buf.Free;
    end;
      

  5.   

    那么是不是将被禁止的程序修改为授权程序的文件名就可以越过了呢???
    不过我知道regedit是不能的,其它的就不知道了