1。在WINDOWS里如何做到关闭指定或所有运行的程序?2。如何可靠的关闭WINDOWS?

解决方案 »

  1.   

    1、找到句柄,发close消息过去。
    2、你说的关闭windows是指窗口还是系统?关机有api函数的。
      

  2.   

    var
      h:thandle;
    begin
      h:= findwindow(nil,'form1');  //窗口名字根据自己的内容变化
      if h=0 then
        begin
          showmessage('没有找到制定窗口');
          exit;
        end;
      sendmessage(h,WM_CLOSE,0,0);
    END;
      

  3.   

    exitwindow(EWX_SHUTDOWN,0);  //EWX_REBOOT
      

  4.   

    写错了,用这个
      ExitWindowsEx(EWX_SHUTDOWN,0);  //EWX_REBOOT
      

  5.   

    var
      handle:thandle;
    begin
      handle:= Findwindow(nil,'计算器'); 
      if handle>0 then Sendmessage(handle,WM_CLOSE,0,0);
    END;
      

  6.   

    Sendmessage(handle,WM_CLOSE,0,0);是关闭指定程序.只要有了它的句柄就行了.第一个参数是要关闭窗体的句柄,第二个参数是消息的类型,第三个和第四个是附加参数,没什么特殊需要就不用指定了.
    exitwindow(EWX_SHUTDOWN,0);  是以前老的关机函数
    ExitWindowsEx(EWX_SHUTDOWN,0);  这个是新的api函数,这个比较好些.
    至于怎么查找窗体的句柄,楼上的都说了.当然也可以做循环来找出所有窗体.
      

  7.   

    要运行指定的程序,可用Winexec()和ShellExecute()这两个函数中的任一个
    例子么.....相信后面上来的哥们会给出的,^-^
      

  8.   

    BOOL EnumWindows(    WNDENUMPROC lpEnumFunc, // pointer to callback function
        LPARAM lParam  // application-defined value
       );
     
    这个函数可以列举。
      

  9.   

    //关闭系统
    procedure Shutdown;
    var
      htmp,hToken:Thandle;
      tkp:TOKEN_PRIVILEGES;
      tkpOld:TOKEN_PRIVILEGES;
    begin
      if application.MessageBox('确实要关机吗?',pchar(application.Title),mb_okcancel)=mrok then
      begin
        OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES  Or  TOKEN_QUERY,hToken);
        LookupPrivilegeValue(nil,  'SeShutdownPrivilege',tkp.Privileges[0].Luid);
        tkp.PrivilegeCount:=1;
        tkp.Privileges[0].Attributes:=  SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(hToken,  false,  tkp,  sizeof(tkpOld),  tkpOld,  htmp);
        ExitwindowsEx(EWX_POWEROFF,0);
      end;
    end;