StandUp 定时休息软件

前端时间,老大一天到晚脖子痛,说是老了,不能比我们年轻人了...

其实我脖子也痛好吗!!!

就有做个软件的想法,于是产生了这个东西——StandUp。


一个非常简陋的小东西,不过也有值得学习的地方,是基于 WPF 的。

<Window x:Class="StandUp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:StandUp"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Label x:Name="labPointer" Content="Label" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
        <Label x:Name="labRestPointer" Content="Label" HorizontalAlignment="Left" Margin="10,40,0,0" VerticalAlignment="Top"/>
        <Label x:Name="labInfo" Content="请休息五分钟后再回来!" Margin="255,0,205,42" Foreground="White" FontWeight="Bold" VerticalAlignment="Bottom" Height="60" Width="500" BorderBrush="White" FontSize="24" RenderTransformOrigin="0.5,0.5">
            <Label.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform/>
                    <TranslateTransform X="100"/>
                </TransformGroup>
            </Label.RenderTransform>
        </Label>

    </Grid>
</Window>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Microsoft.Win32;

namespace StandUp
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private DispatcherTimer timer;
        private DispatcherTimer restTimer;

        private const long timeToWork = 300;//(5分钟)
        private const long timeToStandUp = 3600;//(1小时)

        //private const long timeToWork = 300;//(1分钟)
        //private const long timeToStandUp = 30;//(5分钟)

        private long timeSpan = 0;
        private long momentTs = 0;

        private NotifyIcon notifyIcon;

        #region 禁用全局快捷键
        public static bool IsEnableHook;

        private struct KBDLLHOOKSTRUCT
        {
            public int vkCode;
            int scanCode;
            public int flags;
            int time;
            int dwExtraInfo;
        }

        private delegate int LowLevelKeyboardProcDelegate(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);

        [DllImport("user32.dll")]
        private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, IntPtr hMod, int dwThreadId);

        [DllImport("user32.dll")]
        private static extern bool UnhookWindowsHookEx(IntPtr hHook);

        [DllImport("user32.dll")]
        private static extern int CallNextHookEx(int hHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);

        [DllImport("kernel32.dll")]
        private static extern IntPtr GetModuleHandle(IntPtr path);

        private IntPtr hHook;
        LowLevelKeyboardProcDelegate hookProc; // prevent gc
        const int WH_KEYBOARD_LL = 13;

        public enum Ekey
        {
            VK_LBUTTON = 0x01,//	Left mouse button
            VK_RBUTTON = 0x02,//	Right mouse button
            VK_CANCEL = 0x03,//	Control-break processing
            VK_MBUTTON = 0x04,//	Middle mouse button (three-button mouse)
            VK_XBUTTON1 = 0x05,//	X1 mouse button
            VK_XBUTTON2 = 0x06,//	X2 mouse button

            VK_BACK = 0x08,//	BACKSPACE key
            VK_TAB = 0x09,//	TAB key

            VK_CLEAR = 0x0C,//	CLEAR key
            VK_RETURN = 0x0D,//	ENTER key

            VK_SHIFT = 0x10,//	SHIFT key
            VK_CONTROL = 0x11,//	CTRL key
            VK_MENU = 0x12,//	ALT key
            VK_PAUSE = 0x13,//	PAUSE key
            VK_CAPITAL = 0x14,//	CAPS LOCK key
            VK_KANA = 0x15,//	IME Kana mode
            VK_HANGUEL = 0x15,//	IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
            VK_HANGUL = 0x15,//	IME Hangul mode

            VK_JUNJA = 0x17,//	IME Junja mode
            VK_FINAL = 0x18,//	IME final mode
            VK_HANJA = 0x19,//	IME Hanja mode
            VK_KANJI = 0x19,//	IME Kanji mode

            VK_ESCAPE = 0x1B,//	ESC key
            VK_CONVERT = 0x1C,//	IME convert
            VK_NONCONVERT = 0x1D,//	IME nonconvert
            VK_ACCEPT = 0x1E,//	IME accept
            VK_MODECHANGE = 0x1F,//	IME mode change request
            VK_SPACE = 0x20,//	SPACEBAR
            VK_PRIOR = 0x21,//	PAGE UP key
            VK_NEXT = 0x22,//	PAGE DOWN key
            VK_END = 0x23,//	END key
            VK_HOME = 0x24,//	HOME key
            VK_LEFT = 0x25,//	LEFT ARROW key
            VK_UP = 0x26,//	UP ARROW key
            VK_RIGHT = 0x27,//	RIGHT ARROW key
            VK_DOWN = 0x28,//	DOWN ARROW key
            VK_SELECT = 0x29,//	SELECT key
            VK_PRINT = 0x2A,//	PRINT key
            VK_EXECUTE = 0x2B,//	EXECUTE key
            VK_SNAPSHOT = 0x2C,//	PRINT SCREEN key
            VK_INSERT = 0x2D,//	INS key
            VK_DELETE = 0x2E,//	DEL key
            VK_HELP = 0x2F,//	HELP key
            N0 = 0x30,//	0 key
            N1 = 0x31,//	1 key
            N2 = 0x32,//	2 key
            N3 = 0x33,//	3 key
            N4 = 0x34,//	4 key
            N5 = 0x35,//	5 key
            N6 = 0x36,//	6 key
            N7 = 0x37,//	7 key
            N8 = 0x38,//	8 key
            N9 = 0x39,//	9 key
            A = 0x41,//	A key
            B = 0x42,//	B key
            C = 0x43,//	C key
            D = 0x44,//	D key
            E = 0x45,//	E key
            F = 0x46,//	F key
            G = 0x47,//	G key
            H = 0x48,//	H key
            I = 0x49,//	I key
            J = 0x4A,//	J key
            K = 0x4B,//	K key
            L = 0x4C,//	L key
            M = 0x4D,//	M key
            N = 0x4E,//	N key
            O = 0x4F,//	O key
            P = 0x50,//	P key
            Q = 0x51,//	Q key
            R = 0x52,//	R key
            S = 0x53,//	S key
            T = 0x54,//	T key
            U = 0x55,//	U key
            V = 0x56,//	V key
            W = 0x57,//	W key
            X = 0x58,//	X key
            Y = 0x59,//	Y key
            Z = 0x5A,//	Z key
            VK_LWIN = 0x5B,//	Left Windows key (Natural keyboard)
            VK_RWIN = 0x5C,//	Right Windows key (Natural keyboard)
            VK_APPS = 0x5D,//	Applications key (Natural keyboard)

            VK_SLEEP = 0x5F,//	Computer Sleep key
            VK_NUMPAD0 = 0x60,//	Numeric keypad 0 key
            VK_NUMPAD1 = 0x61,//	Numeric keypad 1 key
            VK_NUMPAD2 = 0x62,//	Numeric keypad 2 key
            VK_NUMPAD3 = 0x63,//	Numeric keypad 3 key
            VK_NUMPAD4 = 0x64,//	Numeric keypad 4 key
            VK_NUMPAD5 = 0x65,//	Numeric keypad 5 key
            VK_NUMPAD6 = 0x66,//	Numeric keypad 6 key
            VK_NUMPAD7 = 0x67,//	Numeric keypad 7 key
            VK_NUMPAD8 = 0x68,//	Numeric keypad 8 key
            VK_NUMPAD9 = 0x69,//	Numeric keypad 9 key
            VK_MULTIPLY = 0x6A,//	Multiply key
            VK_ADD = 0x6B,//	Add key
            VK_SEPARATOR = 0x6C,//	Separator key
            VK_SUBTRACT = 0x6D,//	Subtract key
            VK_DECIMAL = 0x6E,//	Decimal key
            VK_DIVIDE = 0x6F,//	Divide key
            VK_F1 = 0x70,//	F1 key
            VK_F2 = 0x71,//	F2 key
            VK_F3 = 0x72,//	F3 key
            VK_F4 = 0x73,//	F4 key
            VK_F5 = 0x74,//	F5 key
            VK_F6 = 0x75,//	F6 key
            VK_F7 = 0x76,//	F7 key
            VK_F8 = 0x77,//	F8 key
            VK_F9 = 0x78,//	F9 key
            VK_F10 = 0x79,//	F10 key
            VK_F11 = 0x7A,//	F11 key
            VK_F12 = 0x7B,//	F12 key


            VK_NUMLOCK = 0x90,//	NUM LOCK key
            VK_SCROLL = 0x91,//	SCROLL LOCK key

            VK_LSHIFT = 0xA0,//	Left SHIFT key
            VK_RSHIFT = 0xA1,//	Right SHIFT key
            VK_LCONTROL = 0xA2,//	Left CONTROL key
            VK_RCONTROL = 0xA3,//	Right CONTROL key
            VK_LMENU = 0xA4,//	Left MENU key
            VK_RMENU = 0xA5,//	Right MENU key
            VK_BROWSER_BACK = 0xA6,//	Browser Back key
            VK_BROWSER_FORWARD = 0xA7,//	Browser Forward key
            VK_BROWSER_REFRESH = 0xA8,//	Browser Refresh key
            VK_BROWSER_STOP = 0xA9,//	Browser Stop key
            VK_BROWSER_SEARCH = 0xAA,//	Browser Search key
            VK_BROWSER_FAVORITES = 0xAB,//	Browser Favorites key
            VK_BROWSER_HOME = 0xAC,//	Browser Start and Home key
            VK_VOLUME_MUTE = 0xAD,//	Volume Mute key
            VK_VOLUME_DOWN = 0xAE,//	Volume Down key
            VK_VOLUME_UP = 0xAF,//	Volume Up key
            VK_MEDIA_NEXT_TRACK = 0xB0,//	Next Track key
            VK_MEDIA_PREV_TRACK = 0xB1,//	Previous Track key
            VK_MEDIA_STOP = 0xB2,//	Stop Media key
            VK_MEDIA_PLAY_PAUSE = 0xB3,//	Play/Pause Media key
            VK_LAUNCH_MAIL = 0xB4,//	Start Mail key
            VK_LAUNCH_MEDIA_SELECT = 0xB5,//	Select Media key
            VK_LAUNCH_APP1 = 0xB6,//	Start Application 1 key
            VK_LAUNCH_APP2 = 0xB7,//	Start Application 2 key
            VK_OEM_1 = 0xBA,//	Used for miscellaneous characters; it can vary by keyboard.

            VK_OEM_PLUS = 0xBB,//	For any country/region, the '+' key
            VK_OEM_COMMA = 0xBC,//	For any country/region, the ',' key
            VK_OEM_MINUS = 0xBD,//	For any country/region, the '-' key
            VK_OEM_PERIOD = 0xBE,//	For any country/region, the '.' key
            VK_OEM_2 = 0xBF,//	Used for miscellaneous characters; it can vary by keyboard.
            VK_OEM_3 = 0xC0,//	Used for miscellaneous characters; it can vary by keyboard.
            VK_OEM_4 = 0xDB,//	Used for miscellaneous characters; it can vary by keyboard.
            VK_OEM_5 = 0xDC,//	Used for miscellaneous characters; it can vary by keyboard.
            VK_OEM_6 = 0xDD,//	Used for miscellaneous characters; it can vary by keyboard.
            VK_OEM_7 = 0xDE,//	Used for miscellaneous characters; it can vary by keyboard.
            VK_OEM_8 = 0xDF,//	Used for miscellaneous characters; it can vary by keyboard.
            VK_OEM_102 = 0xE2,//	Either the angle bracket key or the backslash key on the RT 102-key keyboard
            VK_PROCESSKEY = 0XE5,//	IME PROCESS key
            VK_PACKET = 0xE7,//	Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key 
            VK_ATTN = 0xF6,//	Attn key
            VK_CRSEL = 0xF7,//	CrSel key
            VK_EXSEL = 0xF8,//	ExSel key
            VK_EREOF = 0xF9,//	Erase EOF key
            VK_PLAY = 0xFA,//	Play key
            VK_ZOOM = 0xFB,//	Zoom key
            VK_NONAME = 0xFC,//	Reserved
            VK_PA1 = 0xFD,//	PA1 key
            VK_OEM_CLEAR = 0xFE,//	Clear key
        }

        //protected override void OnExit(ExitEventArgs e)
        //{
        //    UnhookWindowsHookEx(hHook); // release keyboard hook
        //    base.OnExit(e);
        //}

        private static int LowLevelKeyboardProc(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam)
        {
            if (nCode >= 0)
                switch (wParam)
                {
                    case 256: // WM_KEYDOWN
                    case 257: // WM_KEYUP
                    case 260: // WM_SYSKEYDOWN
                    case 261: // M_SYSKEYUP
                        if (
                            (lParam.vkCode == (int)Ekey.VK_SPACE && lParam.flags == 32) || // Alt+ space
                            (lParam.vkCode == (int)Ekey.VK_TAB && lParam.flags == 32) || // Alt+Tab
                            (lParam.vkCode == (int)Ekey.VK_ESCAPE && lParam.flags == 32) || // Alt+Esc
                            (lParam.vkCode == (int)Ekey.VK_F4 && lParam.flags == 32) || // Alt+F4
                            (lParam.vkCode == (int)Ekey.VK_ESCAPE && lParam.flags == 0) || // Ctrl+Esc
                            (lParam.vkCode == 0x5b && lParam.flags == 1) || // Left Windows Key 
                            (lParam.vkCode == 0x5c && lParam.flags == 1))    // Right Windows Key 
                        {
                            return 1;
                        }
                        break;
                }
            return CallNextHookEx(0, nCode, wParam, ref lParam);
        }
        #endregion

        public MainWindow()
        {
            InitializeComponent();

            // hook keyboard
            IntPtr hModule = GetModuleHandle(IntPtr.Zero);
            hookProc = new LowLevelKeyboardProcDelegate(LowLevelKeyboardProc);
            hHook = SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, hModule, 0);
            if (hHook == IntPtr.Zero)
                System.Windows.Forms.MessageBox.Show("不能设置快捷键:" + Marshal.GetLastWin32Error());
            else
                IsEnableHook = true;

            ImageBrush b = new ImageBrush();
            b.ImageSource = new BitmapImage(new Uri("pack://application:,,,/images/bg.jpg", UriKind.RelativeOrAbsolute));
            //b.ImageSource = new BitmapImage(new Uri("pack://application:,,,../../bg.jpg", UriKind.RelativeOrAbsolute));
            b.Stretch = Stretch.Fill;
            this.Background = b;

            #region 图标显示在托盘
            this.notifyIcon = new NotifyIcon();
            this.notifyIcon.BalloonTipText = "Stand Up | ";
            this.notifyIcon.ShowBalloonTip(2000);
            this.notifyIcon.Text = "Stand Up | ";
            this.notifyIcon.Icon = System.Drawing.Icon.ExtractAssociatedIcon(System.Windows.Forms.Application.ExecutablePath);
            this.notifyIcon.Visible = true;

            string startUpStr = GetRegRunState("StandUp") ? "取消自启动" : "自启动";

            System.Windows.Forms.MenuItem startUp = new System.Windows.Forms.MenuItem(startUpStr);
            startUp.Click += new EventHandler((o, e) =>
            {
                if (startUp.Text.Equals("自启动"))
                {
                    if (RegRun("StandUp", true))
                        startUp.Text = "取消自启动";
                }
                else
                {
                    if (RegRun("StandUp", false))
                        startUp.Text = "自启动";
                }
            });

            System.Windows.Forms.MenuItem open = new System.Windows.Forms.MenuItem("打开");
            open.Click += new EventHandler(Show);

            System.Windows.Forms.MenuItem exit = new System.Windows.Forms.MenuItem("退出");
            exit.Click += new EventHandler(Close);

            //关联托盘控件
            System.Windows.Forms.MenuItem[] childen = new System.Windows.Forms.MenuItem[] { startUp, open, exit };
            notifyIcon.ContextMenu = new System.Windows.Forms.ContextMenu(childen);

            this.notifyIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler((o, e) =>
            {
                if (e.Button == MouseButtons.Left) this.Show(o, e);
            });
            #endregion
            ShowInTaskbar = false;
            WindowState = WindowState.Maximized;
            WindowStyle = WindowStyle.None;
            labInfo.Content = "";
            Loaded += new RoutedEventHandler(RestTimeLoaded);
            Loaded += new RoutedEventHandler(TimerLoaded);
        }

        /// <summary>
        /// 工作计时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void TimerLoaded(object sender, RoutedEventArgs e)
        {
            timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += new EventHandler(TimerArrive);
            timer.Start();
        }

        /// <summary>
        /// 休息计时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void RestTimeLoaded(object sender, RoutedEventArgs e)
        {
            restTimer = new DispatcherTimer();
            restTimer.Interval = TimeSpan.FromSeconds(1);
            restTimer.Tick += new EventHandler(RestTimerArrive);
        }

        /// <summary>
        /// 工作期间执行的时间
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TimerArrive(object sender, EventArgs e)
        {
            if (IsEnableHook)
            {
                if (UnhookWindowsHookEx(hHook))
                    IsEnableHook = false;
                else
                    IsEnableHook = true;
            }

            if (this.Visibility != Visibility.Hidden)
            {
                ShowInTaskbar = false;
                momentTs++;
                if (momentTs >= 5)
                    this.Hide();
            }

            string notiInfo = GetTime(true);
            this.notifyIcon.BalloonTipText = this.notifyIcon.Text = "Stand Up | " + notiInfo;
            labInfo.Content = notiInfo;
            timeSpan++;
            if (timeSpan == timeToStandUp)
            {
                timeSpan = 0;
                timer.Stop();
                restTimer.Start();
            }
        }

        private string GetTime(bool getTimeToStandUp)
        {
            string result = string.Empty;
            if (getTimeToStandUp)
            {
                long ts = timeToStandUp - timeSpan;
                string clockStr = string.Format("{0} 小时 {1} 分钟 {2} 秒", ts / 3600, (ts % 3600) / 60, (ts % 3600) % 60);
                result = string.Format("您还可以工作:{0}", clockStr);
            }
            else
            {
                long ts = timeToWork - timeSpan;
                string clockStr = string.Format("{0} 分钟 {1} 秒", ts / 60, ts % 60);
                result = string.Format("您还可以休息:{0}", clockStr);
            }
            return result;
        }

        /// <summary>
        /// 休息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void RestTimerArrive(object sender, EventArgs e)
        {
            if (!IsEnableHook)
            {
                hHook = SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, GetModuleHandle(IntPtr.Zero), 0);
                if (hHook == IntPtr.Zero)
                {
                    IsEnableHook = false;
                    System.Windows.Forms.MessageBox.Show("不能设置快捷键:" + Marshal.GetLastWin32Error());
                }
                else
                    IsEnableHook = true;
            }

            momentTs = 0;
            if (this.Visibility != Visibility.Visible)
                this.Show();

            labInfo.Content = GetTime(false);
            timeSpan++;
            if (timeSpan == timeToWork)
            {
                timeSpan = 0;
                restTimer.Stop();
                timer.Start();
            }
        }

        private void Show(object sender, EventArgs e)
        {
            momentTs = 0;
            this.Visibility = System.Windows.Visibility.Visible;
            this.ShowInTaskbar = true;
            this.Activate();
        }

        private void Hide(object sender, EventArgs e)
        {
            this.ShowInTaskbar = false;
            this.Visibility = System.Windows.Visibility.Hidden;
        }

        private void Close(object sender, EventArgs e)
        {
            bool result = UnhookWindowsHookEx(hHook);
            System.Windows.Application.Current.Shutdown();
        }

        /// <summary>
        /// 自启动
        /// </summary>
        /// <param name="appName"></param>
        /// <param name="f"></param>
        bool RegRun(string appName, bool f)
        {
            RegistryKey HKCU = Registry.CurrentUser;
            RegistryKey Run = HKCU.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
            bool b = false;
            foreach (string i in Run.GetValueNames())
            {
                if (i == appName)
                {
                    b = true;
                    break;
                }
            }
            try
            {
                if (f)
                    Run.SetValue(appName, System.Windows.Forms.Application.ExecutablePath);
                else
                    Run.DeleteValue(appName);
            }
            catch
            {
                return false;
            }
            HKCU.Close();
            return true;
        }

        /// <summary>
        /// 获取当前是否开机启动
        /// </summary>
        /// <param name="appName"></param>
        /// <returns></returns>
        bool GetRegRunState(string appName)
        {
            bool result = false;
            RegistryKey HKCU = Registry.CurrentUser;
            RegistryKey Run = HKCU.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);

            try
            {
                if (Run.GetValue(appName) != null)
                    result = true;
            }
            catch
            {
                return result; ;
            }
            HKCU.Close();
            return result;
        }

    }
}
虽然是找资料东平西凑做出来的,不过也算是灵活应变嘛!嘿嘿!

对了,这里面加入了开机自启和休息时间屏蔽快捷键的功能.

不过屏蔽快捷键的功能做的不是特别好,ctrl + alt + del 可以打开任务管理器...这个不知道怎么解决...


两款定时提醒休息工具 你是否知道每天在椅子或者沙发上坐超过六小时会带来以下一系列烦人的问题?看看这些令人忧心的事实:患心脏病的机率将提高了将近64%,减损七年高质量的生活,增加患上某种癌症的危险。换言之,久坐会要了你的命。这确实是个噩耗。不过好消息是,无论你有多懒,这个问题都不难解决。 我们从基本的开始分析吧。从小我们就知道整天坐在沙发上是伤身的。但是,这是为什么呢?简单地说,我们的身体并不适合久坐。长时间久坐,就算中间穿插一些锻炼,对身体健康还是有负面的影响。更糟糕的是,许多人一天坐着的时间长达15小时,这意味着,他们连散步的时间都花在沙发上,椅子上和车上了。 久坐并不是很难克服的坏习惯,关键在两个细节:日常活动、注意久坐时间。我们先来看看久坐是怎样影响身体的吧。 •久坐对身体产生的伤害评估 要想准确地评估出久坐对身体带来多大的伤害是件困难的事,因为这还与个人的饮食习惯以及其他因素相关。因此,这里假设你身体相对健康(不酗酒,不抽烟,体重也不超标)。我们将从你坐下的那刻开始,评估每天坐六个小时以上对你身体的影响。为了使大家对这个评估有个整体的了解,请参考一下这张从医疗账务处理中得到的分项数据,对应不同的时间,可以看到久坐带来的不同影响(哪怕你是坐在桌子上、或使用站立式办公桌也会带来相应的问题)。 刚刚坐下那一刻 当你坐下的时候,肌肉里面的电流活动减弱,同时卡路里燃烧速度下降到每分钟一卡路里,这是你走路时所消耗卡路里的三分之一。如果久坐整整24个小时,供应给胰岛素的葡萄糖会减少40%,这最终可能会导致你患上第二型糖尿病。 每天坐六个小时,两周以后 当久坐变成生活方式的前5天时间里,你体内的甘油三酯(脂肪分子)、低密度脂蛋白胆固醇(又名坏胆固醇)和胰岛素耐受性将上升。这意味着肌肉不吸收脂肪,血糖浓度提高,从而增加肥胖风险。两个星期之后,肌肉将开始萎缩,最大耗氧量降低。也就是说,爬楼梯和跑步对你来说变得难了。即使你有每天健身,身体机能的退化还是会在你结束健身后出现。 每天坐六个小时,一年以后 一年之后,久坐带来的长期影响开始慢慢明显。根据Nature的研究,久坐有可能导致体重增加和胆固醇过高的问题。针对女人的研究表明,如果每天久坐超过6个小时,骨质每年减少可高达1%。 每天坐六个小时,十至二十年以后 久坐的生活方式持续10-20年之后,等于你失去7个高品质生活年(那种你想过的生活)。会让因心脏病死亡的几率上升64%,得前列腺癌或乳腺癌的几率增加30%。 是不是觉得这些很可怕?但是别担心,接下来我们将教你怎样在不完全改变生活方式的前提下应对久坐带来的负面影响 •如何在不改变生活方式的前提下防止久坐伤身 幸运地是,你只需要做两件事来应对这些负面的影响: 1.记住每小时要站立一次。 2.每天要做大约30分钟的运动。 无论你是个整天黏在肥皂剧前的宅人还是坐电脑面前的白领,一个澳大利亚的研究表明每坐一个小时经过短暂休息可以减轻上面提到的危害。短暂休息不是指去健身,虽然健身有其好处,但是对于抵消久坐危害却没有多少帮助。你只需做些简单适度的活动,让你的身体从久坐中解放出来。 所以,什么是适度的活动呢?我曾与Brian Parr博士(美国南卡罗莱纳大学艾肯分校训练与健康科学学院院副教授)探讨过。他指出了适度活动与锻炼之间的差别: 我们常跟人们说适当活动就相当于快步走路。这包括了整理院子和清洁房间,任何能让你活动一下的事情都算。你并不需要做那些人们常说的锻炼。 当然,肥皂剧迷和白领难得有30分钟的空闲时间,但是,你可以把这30分钟分散到一整天,Brian Parr博士说: 我们经常告诉人们把活动时间分成10分钟的小片段,因为这是最实际的。如果我告诉你可以把这30分钟分散到一整天中,你会说,“我可以站起来经过房间走到茶水间”,十秒钟?在我看来,你不应该这样做(划分时间),但你可以这样试试(走动起来活动筋骨)。 你想把时间分成十分钟的主要原因在于这样可以在身体里产生小许的压力,帮助提高你的忍耐力。在现实生活中,这意味着你爬楼梯将不会爬到一半就觉得累了。试着这样子想:你不会每天快跑十分钟来锻炼马拉松。相反的,会通过长距离的慢跑来提高你的耐力。日常活动也是一样的道理,你需要维持一定的时间才能使效果有作用。 接下来我们将教你如何评估每天的活动量和确保你有离开你的座椅。 •从利用计步器计算日常活动量基线开始 要做的第一件事情就是计算一下你现在正常一天的活动量是多少。对我而言,最简单的办法就是用计步器记录我一天走过的步数。你可以在亚马逊上花三美元就买到个便宜的计步器,或者使用iPhone或者Android手机上的应用程序。 你第一步要做的就是步行三十分钟,看看你走了多少步。我的总步数是略小于4000步。你的步伐的快慢和大小会最终影响你的结果。 下一步,你得找出日常活动量的基线。起床后把记步计打开,放在口袋里(或者打开手机里的应用),直到你晚上睡觉时结束记录。这样就可以从记步计上估量出你的日常活动量。 对我来说,如果不针对性地做运动,那么最后得到是数据将低得可怕。我总共走过的步数低于2000步。这个数字真的弱爆了,这相当于一天步行不超过一公里。毫无疑问,我需要站起来,到处多转转。 •稍微改变你的行为达到目标活动量 如果你像我一样,步行数也是远远低于目标运动量。只需在你生活中进行一些小的改变来帮助你实现目标。以下是一些建议: •在停车场的远端停车 •站起来走过去取文件夹,而不是滚动椅子滑过去 •走过去跟你的同事面对面沟通问题而不是给他们发邮件 •沿着景致路线去卫生间而不是最短路径 从离开家去上班开始,我就刻意去做这些来实现目标运动量。我开始在下午步行到附近的咖啡店,每天至少骑上10-20分钟的室内自行车。如果这两个都没做,那我会去洗衣服,因为这样我得走两次楼梯。 达到目标活动量只是第一步。第二步要做的要更加简单些,那就是不时的站起来。下面是一些小贴士,用于提示自己别忘了不时要站立一下。 •设置定时提醒来使你站立一下 我们知道,如果每小时不时的站立一两分钟,这将有效抵消整天坐着带来的负面影响。从技术角度来说,你甚至不需要移动一下,只是站一下对你的帮助都很大。可是忙着工作的时候,我们就会常常忘记了。我在Mac OS X里发现有个定时提醒的功能:点击 设置 > 日期与时间 > 时间提醒。Windows的用户也可以设置类似的提醒,通过这个路径设置:控制面板 > 管理工具 > 任务安排。 如果电脑的定时提醒还不够,不妨下载一个专门的软件来提醒。Windows用户可以下载类似的免费软件,例如Workrave和Breakder,Mac用户就可以使用Time Out。这些软件定时提醒你站立一下,并把电脑显示屏变暗从而强制你离开座位。 这取决于你怎么利用这些短时休息。你甚至可以不移动如果你不愿意的话。如果你那时确实想运动一下又不想离开座位,以下有一些小建议。 •站起来 •原地踏步20秒 •伸出手,尝试着触摸到脚趾,持续20秒 •远望一下,重复或变换刚才的运动 我还买了个iCade放在站立时的水平高度,这样我站立着的时候就有事可做。就我而言,我没办法只是呆呆地站立几分钟啥也不干,我得找点事情做。如果我站起来不想伸展一下的话,iCade会给我增加一些目标感。 •把那些蹩脚的广告变成必须站立起来的理由 电视广告毫无意义。与其坐在那里浪费时间看那些过去20年你已经看过的广告,何不站起来,趁广告时间活动一下。 为了能在广告时间找到一些有建设性的事情来做,我会在咖啡桌那里贴着张的待办事项列表,不同于办公室里列表,这里面包括如:去丢垃圾,洗碗,清洗猫砂盘或者其他需要完成的事情。最重要的是?我不用去看那些无聊的广告了。 同样的,在玩网游的时候,我把每一局的结束当成是需要站立一下的提示。如果在玩单机游戏,我会在游戏加载间隔时候站立一下。 这些的关键在于,我们坐下时在享受的大部分活动包括了很多等待间隙。如果你是在看书,可以在每一个或者两个章节后停下来站立一下。如果你是在玩拼字游戏,可以在每一局结束后站立一下,而不是继续坐着发呆。站起来,这其实非常简单。 最后重复一遍两个要点:每小时站立一小会,每天至少活动30分钟。就这么简单。除非体型超重,否则你不需要进行锻炼或者去健身房来抵消久坐带来的负面影响,只需要保证一整天有活动一下,你甚至可以不用放弃长时间的看电视节目而只需要每小时花一点时间注意一下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值