在我的程序启动的时候,如何判断任务栏"属性"->"自动隐藏"复选框是否选中,如果没选中,则自动选中!

解决方案 »

  1.   

    任务栏的自动隐藏!Uses 
    ShellApi; Function IsTaskbarAutoHideOn:boolean; 
    Var 
    AB : TAppBarData; 
    Begin 
    AB.cbSize := sizeof(AB); 
    Result :=(SHAppBarMessage(ABM_GETSTATE, AB)and ABS_AUTOHIDE) > 0; 
    End; 
      

  2.   

    选中的函数如下:
    function ChangeTaskBarAutoHideOn(AutoHideTaskBar:Boolean):Boolean;
    var
      ABData : TAppBarData;
    begin
      Result:=False;
      ABData.cbSize := SizeOf(ABData);
      ABData.uCallbackMessage:=1;
      if AutoHideTaskBar then
        ABData.lParam:=1
      else
        ABData.lParam:=0;
      Result := SHAppBarMessage(ABM_SETAUTOHIDEBAR, ABData)>0
    end;
      

  3.   

    "自动隐藏"复选框在没选中情况下,函数function ChangeTaskBarAutoHideOn(true)不能选中复选框!
      

  4.   

    procedure TaskbarAutoHide;
    var
      Shell_TrayWnd: HWND;
      P_Wnd: HWND;
      R: TRect;
      iCount: integer;
    begin
      Shell_TrayWnd := FindWindow('Shell_TrayWnd', nil);
      SetForegroundWindow(Shell_TrayWnd);
      GetWindowRect(Shell_TrayWnd, r);
      setcursorpos(r.Right - 1, r.Bottom - 1);
      Mouse_Event(MOUSEEVENTF_RIGHTDOWN, r.Right - 1, r.Bottom - 1, 0, 0);
      Mouse_Event(MOUSEEVENTF_RIGHTUP, r.Right - 1, r.Bottom - 1, 0, 0);  keybd_event(ord('R'), 0, KEYEVENTF_EXTENDEDKEY, 0); //KEYDOWN£?
      keybd_event(ord('R'), 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
      //KEYUP  P_Wnd := 0;
      iCount := 0;
      while P_Wnd = 0 do
      begin
        P_Wnd := FindWindow('#32770', nil); // '工作列及開始功能表 內容');
        Sleep(10);
        Inc(iCount);
        if iCount > 65535 then Exit;
      end;
      SetWindowPos(P_Wnd, HWND_TOP, 0, 0, 1, 1, SWP_NOMOVE);
      Application.ProcessMessages;
      keybd_event(ord('U'), 0, KEYEVENTF_EXTENDEDKEY, 0); //KEYDOWN£?
      keybd_event(ord('U'), 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
      //KEYUP
        //  { Under WinXP:1102:Control ID of 'Auto Hide' }
        //  CheckDlgButton(FindWindowEx(P_Wnd,0,'SysTabControl32',nil), 1102, BST_CHECKED);  PostMessage(P_Wnd, WM_KEYDOWN, VK_RETURN, 0);
      PostMessage(P_Wnd, WM_KEYUP, VK_RETURN, 0);
    end;