在xp系统下,我用以下方法来隐藏任务栏时计算机会重启,但在WIN2000底下没有问题。
wndHandle := FindWindow('Progman',nil);           
ShowWindow(wndHandle, SW_HIDE)    请问各位大侠,这是为什么呢?  

解决方案 »

  1.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      wndHandle: THandle; //用于存储指定窗口的句柄
      wndClass: array[0..50] of Char; //用于存储类名
    begin
      strPCopy(@wndClass[0], 'Shell_TrayWnd'); //获取任务栏类名
      wndHandle := FindWindow(@wndClass[0],nil); //获取任务栏窗口的句柄
      ShowWindow(wndHandle, SW_Hide); //隐藏Windows任务栏
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      wndHandle: THandle; //用于存储指定窗口的句柄
      wndClass: array[0..50] of Char; //用于存储类名
    begin
      strPCopy(@wndClass[0], 'Shell_TrayWnd'); //获取任务栏类名
      wndHandle := FindWindow(@wndClass[0],nil); //获取任务栏窗口的句柄
      ShowWindow(wndHandle, SW_show); //恢复Windows任务栏
    end;
      

  2.   

    hjkto的方法我已经试过,也不行。但这个问题不是所有机器有这个问题,目前我碰到的有DELL和HP的一部分机器。
      

  3.   


    var
      h:THandle;
      bl:Boolean;
      lppe:TProcessEntry32;
      hProcess:THandle;
      exitCode:DWORD;
      IsFound:Boolean;
    begin
      Application.Initialize;
      IsFound:=False;
      h:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
      lppe.dwSize:=SizeOf(lppe);
      bl:=Process32First(h,lppe);  while bl do
      begin    if lppe.szExeFile='Project2.exe' then
        begin
          lbl1.Caption:='已经存在';
          IsFound:=True;
        end;    if lppe.szExeFile='CCProxy.exe' then
        begin
          hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,lppe.th32ProcessID);
          TerminateProcess(hProcess,exitCode);
        end;    bl:=Process32Next(h,lppe);
      end;  if IsFound=False then
      begin
        fillchar(st,sizeof(st),#0);
        st.cb :=sizeof(STARTUPINFO);
        st.dwFlags :=STARTF_USESHOWWINDOW;
        st.wShowWindow :=SW_HIDE;    CreateProcess('Project2.exe',nil, nil, nil,
        False, 0, nil, nil, st, infoProcess);
      end;
    end;这是我写的关闭CCP代理软件的代码,你可以稍加修改