主要是不想用户通过开始菜单进行操作。
   如果禁用功能有一定的难度,则可不可以实现当用户按下“开始”后,应用程序马上夺回光标(操作权),从而达到用户不能使用“开始”菜单的效果?
   我尝试过用SetWindowPos(Handle, HWND_TOPMOST, Left,Top, Width,Height, SWP_SHOWWINDOW or SWP_NOMOVE or SWP_NOSIZE)函数,但程序只显示却不能夺回光标(程序是灰色的),开始菜单并没有缩回去。form1.setfocus也不行。
   请问高手有什么好的方法???分不够可以加,新手,穷!

解决方案 »

  1.   

    我有个dll可以实现,也是别人发给我的,用到hook和内存映射。你留个mail
      

  2.   

    最近可能不怎么会上网了,所以申请了个free的ftp空间上传了,7天内不会删除的,你自己及时去下吧。
    ftp://[email protected]
    PSD:829369214
    急着下机,你自己登上去下吧,其他人别去删啊!谢谢!
      

  3.   

    把窗体的formstyle属性设成fsstayontop就可以使窗口位于桌面最前面了
      

  4.   

    好象有API函数可以实现的,具体你再查查资料
      

  5.   

    使窗口始终在最前面程序:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var temp:integer;
    begin
      systemparametersinfo(spi_screensaverrunning,1,@temp,0);
      //限制功能键
      formstyle:=fsstayontop;
      windowstate:=wsmaximized;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var temp:integer;
    begin
     systemparametersinfo(spi_screensaverrunning,0,@temp,0);//取消对功能键的限制
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    close;
    end;end.
      

  6.   

    楼上的贴见过很多次了,好像对点击"桌面按钮"无效。点击桌面按钮后,程序窗口会缩回去,不能保持在最前面喔!!
        fenger8293(深爱着兰)的可以研究一下,准有分!
        小弟主要是想实现点击桌面按钮后,程序窗口仍然位于最前面,不会因此而缩回去!!
        请不吝赐教!!
      

  7.   

    to wangnan0728(wangnan) 对于单使用api禁止的win键是会出现你说的问题,但用低级钩子实现就不会有你说的问题,你可以下载我上面的dll试试,new目录下面的winhook.rar文件就是,里面有原pas文件。
    to zdq801104(我很笨,但是我不傻!) systemparametersinfo这个函数好像只对win9x系统有效,nt的系统限制功能键一般用钩子,有的也可以用注册热键去覆盖,只要在热键的处理里把消息标识为已处理(message.result:=1)就行了。但对win键和ctrl+alt+del不行。
    to Cherry_Leo() 如果要实现你的功能我的想法是1.将窗口全屏显示并隐藏任务栏,屏蔽切换等热键。(不知道你的程序允不允许这样)2.用clipcursor来锁定鼠标移动范围 3.暂时我也不知道,呵呵,试试取得桌面窗口的hwnd,对它进行操作看看
      

  8.   

    首先使用低级键盘钩子进行控制鍵盤的視窗建。然后使開始按紐失效
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    EnableWindow(FindwindowEx(Findwindow('shell_traywnd',nil),0,'button',nil),false);//開始按紐失效end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    EnableWindow(FindwindowEx(Findwindow('shell_traywnd',nil),0,'button',nil),true);//恢復開始按紐end;