1 用COM通过Windows提供的IShellExtInit和IContextMenu接口(ShlObj单元),应该可以达到这个功能,具体怎么做没试过,<Delphi COM 深入编程>一书里面有关于这方面的内容.
2  用ICO就行了
3  可以用Sleep(xxx) 控制程序停止响应xxx毫秒
4  function ShutDown(uFlags: Cardinal):boolean;
const
  ADJUST_PRIV = TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES;
  SHTDWN_PRIV = 'SeShutdownPrivilege';
  PRIV_SIZE   = sizeOf(TTokenPrivileges);var
  Len: DWORD;
  TokenPriv, Dummy: TTokenPrivileges;
  Token: THandle;
  Error:integer;
begin
  error:=0;
  // 设置特权
  // Delphi2:
  //if not OpenProcessToken(GetCurrentProcess(), ADJUST_PRIV, @Token) then
  if not OpenProcessToken(GetCurrentProcess(), ADJUST_PRIV, Token) then
      Error := Error or 4;
  if not LookupPrivilegeValue(nil, SHTDWN_PRIV,TokenPriv.Privileges[0].Luid) then
    Error := Error or 8;
  TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  TokenPriv.PrivilegeCount := 1;  // One privilege to set
  if not AdjustTokenPrivileges(Token, false, TokenPriv, PRIV_SIZE,Dummy, Len) then
    Error:=Error or 16;
  ExitWindowsEx(uFlags, 0);
  Result := (Error=0);
end;调用:
ShutDown(EWX_POWEROFF + EWX_FORCE);//强制关机并无任何提示5  类似第一个问题

解决方案 »

  1.   

    转贴:
    系统菜单的更改可以通过修改注册表实现:  因为在不同的地方,右见菜单的内容不相同,所以修改的位置也不同,但原理相同
      举个例子,其它的自己去找  例如:
       定制右击“开始菜单”和“我的电脑”出现的菜单项:
     ①添加文件夹的快捷方式(如:我的文件夹(“My Documents)”)
     运行注册表编辑器(regedit.exe),在编辑菜单中选择查找命令,查找Directory
     主键,找到‘HKEY_CLASSES_ROOT\Directory\shell\’主键,在它下面新建
     主键’myitem1’(名称自定),默认值设为: “我的文件夹”(将来出现在右击
     菜单中的文字),然后在主键’myitem1’下新建主键‘command’(名称不能为
     其它值),其默认值设为:“explorer.exe c:\My Documents”。(该命令的意思
     是用资源管理器浏览c:\My Documents文件夹的内容.) ②添加应用程序的快捷方式(如:Word)
      运行注册表编辑器(regedit.exe),在编辑菜单中选择查找命令,查找Directory
     主键,找到‘HKEY_CLASSES_ROOT\Directory\shell\’主键,在它下面新建
     主键’myitem2’(名称自定),默认值: Word(将来出现在右击菜单中的文字),
     然后在主键’myitem2’下新建主键‘command’(名称不能为其它值),其默认值
     设为:"C:\Program Files\Microsoft Office\Office\WINWORD.EXE"。
    (该命令的意思是启动应用程序:
       C:\Program Files\Microsoft Office\Office\WINWORD.EXE.)  ③添加命令(如:关机)
       运行注册表编辑器(regedit.exe),在编辑菜单中选择查找命令,查找
       Directory主键,找到‘HKEY_CLASSES_ROOT\Directory\shell\’主键,
       在它下面新建主键’myitem3’(名称自定),默认值: “关闭计算机”
      (将来出现在右击菜单中的文字),然后在主键’myitem3’下新建主键
      ‘command’(名称不能为其它值),其默认值设为:“Rundll32.exe 
       User.exe,ExitWindows”。(该命令的意思是关闭计算机.)
     
      上面的方法添加的是右击“开始菜单”(其实是任一文件夹)出现的内容,
      要定制右击“我的电脑”或“网上邻居”出现的内容,上面新建主键的位置
      变一下即可.
      

  2.   

    楼上的前辈,请多发几个,每个最多只能加100分,这样我可以多给你分,另
    我这次又有几个问题想请教一下:
    1  怎样用程序实现在“发送到”的右键菜单的子菜单增加内容,怎样打开SENDTO子目录,以及怎样在SENDTO里面建立快捷方式。
    2  请问一下,假如有两个变量,一个是PCHAR的,还有个是CAPTION,要CAPTION的值赋给PCHAR的变量,该怎么办?
    3,我想在主窗口的右上角的关闭按键,一按就关闭程序,有什么办法不让它关闭,
      

  3.   

    我想在主窗口的右上角的关闭按键,一按就关闭程序,有什么办法不让它关闭, 
    别忘记给我分数!
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
      TForm1 = class(TForm)
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
            CanClose:=false;
    end;end.
      

  4.   

    第一个DELPHI程序?
    就这么难?
    佩服:)
    不过……
    发分时不要超过3贴
    否则我要删贴的
      

  5.   

    1  怎样用程序实现在“发送到”的右键菜单的子菜单增加内容,怎样打开SENDTO子目录,以及怎样在SENDTO里面建立快捷方式。
    //其实不需要改你自己注册表,也用不到COM什么的;在你的Windows系统盘搜索“SendTo”文件夹(比如在Win2000中为“D:\Documents and Settings\Administrator\SendTo”),然后在SendTo文件夹中加入快捷方式即可。
    2  请问一下,假如有两个变量,一个是PCHAR的,还有个是CAPTION,要CAPTION的值赋给PCHAR的变量,该怎么办?
    3,我想在主窗口的右上角的关闭按键,一按就关闭程序,有什么办法不让它关闭,
    //tangyong_delphi() 提供的方法是可行的,但是这样会产生一个问题,就是再你的这个程序关闭之前,Windows不能注销和关机-----因为CanClose:=false;
    这句让你的程序不能关闭!
      

  6.   

    要彻底解决:3,我想在主窗口的右上角的关闭按键,一按就关闭程序,有什么办法不让它关闭
    可以这样:
    procedure SysCommand(var msg:TWMSysCommand);message WM_SysCommand;
    //这句写在 Type 下  private 之前
    然后实现它:
    procedure TFORM1.SysCommand(var msg: TWMSysCommand);
    begin
      if msg.CmdType = SC_CLOSE then
         msg.cmdtype:= SC_DEFAULT;
      inherited;
    end;
    这样点右上角的关闭按键不会关闭程序,Windows也能注销和关机。
    ------------------------------------
    说明:点右上角的关闭按键实际上发出了SysCommand命令,SC_CLOSE 表示关闭程序,改为SC_DEFAULT就取消关闭了。
      

  7.   

    解决:3,我想在主窗口的右上角的关闭按键,一按就关闭程序,有什么办法不让它关闭,可以这样:
    在form的onclosequery中关掉CanClose
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      CanClose:=false;
    end;
      

  8.   

    2  请问一下,假如有两个变量,一个是PCHAR的,还有个是CAPTION,要CAPTION的值赋给PCHAR的变量,该怎么办?yourpchar:=pchar(caption)
      

  9.   

    第2个问题你可以先将bmp图象转为ico图象
      

  10.   

    我来解决这个问题
    3.启动界面的时间应该怎么控制?  
    在DPR文件中加入以下代码:
    var
      splashfrm:Tsplashform;
    begin
      splashfrm:=Tsplashform.create(application);
      splashfrm.show;
      application.init....
      application.createform(form1,tform1);...
      application.run;
    end;
    在splashform中放一个定时器timer1:ttimer;
    设定好时间后,加入timer1的触发事件
    procedure timer1timer(sender:tobject);
    begin
      close;
    end;
    可以随心所欲控制显示时间.
      

  11.   

    1  怎样用程序实现在“发送到”的右键菜单的子菜单增加内容,怎样打开SENDTO子目录,以及怎样在SENDTO里面建立快捷方式。
    //其实不需要改你自己注册表,也用不到COM什么的;在你的Windows系统盘搜索“SendTo”文件夹(比如在Win2000中为“D:\Documents and Settings\Administrator\SendTo”),然后在SendTo文件夹中加入快捷方式即可。
    2  Sleep(xxx) ;就可以了