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 gcconst int WH_KEYBOARD_LL = 13;public enum Ekey{VK_LBUTTON = 0x01,// Left mouse buttonVK_RBUTTON = 0x02,// Right mouse buttonVK_CANCEL = 0x03,// Control-break processingVK_MBUTTON = 0x04,// Middle mouse button (three-button mouse)VK_XBUTTON1 = 0x05,// X1 mouse buttonVK_XBUTTON2 = 0x06,// X2 mouse buttonVK_BACK = 0x08,// BACKSPACE keyVK_TAB = 0x09,// TAB keyVK_CLEAR = 0x0C,// CLEAR keyVK_RETURN = 0x0D,// ENTER keyVK_SHIFT = 0x10,// SHIFT keyVK_CONTROL = 0x11,// CTRL keyVK_MENU = 0x12,// ALT keyVK_PAUSE = 0x13,// PAUSE keyVK_CAPITAL = 0x14,// CAPS LOCK keyVK_KANA = 0x15,// IME Kana modeVK_HANGUEL = 0x15,// IME Hanguel mode (maintained for compatibility; use VK_HANGUL)VK_HANGUL = 0x15,// IME Hangul modeVK_JUNJA = 0x17,// IME Junja modeVK_FINAL = 0x18,// IME final modeVK_HANJA = 0x19,// IME Hanja modeVK_KANJI = 0x19,// IME Kanji modeVK_ESCAPE = 0x1B,// ESC keyVK_CONVERT = 0x1C,// IME convertVK_NONCONVERT = 0x1D,// IME nonconvertVK_ACCEPT = 0x1E,// IME acceptVK_MODECHANGE = 0x1F,// IME mode change requestVK_SPACE = 0x20,// SPACEBARVK_PRIOR = 0x21,// PAGE UP keyVK_NEXT = 0x22,// PAGE DOWN keyVK_END = 0x23,// END keyVK_HOME = 0x24,// HOME keyVK_LEFT = 0x25,// LEFT ARROW keyVK_UP = 0x26,// UP ARROW keyVK_RIGHT = 0x27,// RIGHT ARROW keyVK_DOWN = 0x28,// DOWN ARROW keyVK_SELECT = 0x29,// SELECT keyVK_PRINT = 0x2A,// PRINT keyVK_EXECUTE = 0x2B,// EXECUTE keyVK_SNAPSHOT = 0x2C,// PRINT SCREEN keyVK_INSERT = 0x2D,// INS keyVK_DELETE = 0x2E,// DEL keyVK_HELP = 0x2F,// HELP keyN0 = 0x30,// 0 keyN1 = 0x31,// 1 keyN2 = 0x32,// 2 keyN3 = 0x33,// 3 keyN4 = 0x34,// 4 keyN5 = 0x35,// 5 keyN6 = 0x36,// 6 keyN7 = 0x37,// 7 keyN8 = 0x38,// 8 keyN9 = 0x39,// 9 keyA = 0x41,// A keyB = 0x42,// B keyC = 0x43,// C keyD = 0x44,// D keyE = 0x45,// E keyF = 0x46,// F keyG = 0x47,// G keyH = 0x48,// H keyI = 0x49,// I keyJ = 0x4A,// J keyK = 0x4B,// K keyL = 0x4C,// L keyM = 0x4D,// M keyN = 0x4E,// N keyO = 0x4F,// O keyP = 0x50,// P keyQ = 0x51,// Q keyR = 0x52,// R keyS = 0x53,// S keyT = 0x54,// T keyU = 0x55,// U keyV = 0x56,// V keyW = 0x57,// W keyX = 0x58,// X keyY = 0x59,// Y keyZ = 0x5A,// Z keyVK_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 keyVK_NUMPAD0 = 0x60,// Numeric keypad 0 keyVK_NUMPAD1 = 0x61,// Numeric keypad 1 keyVK_NUMPAD2 = 0x62,// Numeric keypad 2 keyVK_NUMPAD3 = 0x63,// Numeric keypad 3 keyVK_NUMPAD4 = 0x64,// Numeric keypad 4 keyVK_NUMPAD5 = 0x65,// Numeric keypad 5 keyVK_NUMPAD6 = 0x66,// Numeric keypad 6 keyVK_NUMPAD7 = 0x67,// Numeric keypad 7 keyVK_NUMPAD8 = 0x68,// Numeric keypad 8 keyVK_NUMPAD9 = 0x69,// Numeric keypad 9 keyVK_MULTIPLY = 0x6A,// Multiply keyVK_ADD = 0x6B,// Add keyVK_SEPARATOR = 0x6C,// Separator keyVK_SUBTRACT = 0x6D,// Subtract keyVK_DECIMAL = 0x6E,// Decimal keyVK_DIVIDE = 0x6F,// Divide keyVK_F1 = 0x70,// F1 keyVK_F2 = 0x71,// F2 keyVK_F3 = 0x72,// F3 keyVK_F4 = 0x73,// F4 keyVK_F5 = 0x74,// F5 keyVK_F6 = 0x75,// F6 keyVK_F7 = 0x76,// F7 keyVK_F8 = 0x77,// F8 keyVK_F9 = 0x78,// F9 keyVK_F10 = 0x79,// F10 keyVK_F11 = 0x7A,// F11 keyVK_F12 = 0x7B,// F12 keyVK_NUMLOCK = 0x90,// NUM LOCK keyVK_SCROLL = 0x91,// SCROLL LOCK keyVK_LSHIFT = 0xA0,// Left SHIFT keyVK_RSHIFT = 0xA1,// Right SHIFT keyVK_LCONTROL = 0xA2,// Left CONTROL keyVK_RCONTROL = 0xA3,// Right CONTROL keyVK_LMENU = 0xA4,// Left MENU keyVK_RMENU = 0xA5,// Right MENU keyVK_BROWSER_BACK = 0xA6,// Browser Back keyVK_BROWSER_FORWARD = 0xA7,// Browser Forward keyVK_BROWSER_REFRESH = 0xA8,// Browser Refresh keyVK_BROWSER_STOP = 0xA9,// Browser Stop keyVK_BROWSER_SEARCH = 0xAA,// Browser Search keyVK_BROWSER_FAVORITES = 0xAB,// Browser Favorites keyVK_BROWSER_HOME = 0xAC,// Browser Start and Home keyVK_VOLUME_MUTE = 0xAD,// Volume Mute keyVK_VOLUME_DOWN = 0xAE,// Volume Down keyVK_VOLUME_UP = 0xAF,// Volume Up keyVK_MEDIA_NEXT_TRACK = 0xB0,// Next Track keyVK_MEDIA_PREV_TRACK = 0xB1,// Previous Track keyVK_MEDIA_STOP = 0xB2,// Stop Media keyVK_MEDIA_PLAY_PAUSE = 0xB3,// Play/Pause Media keyVK_LAUNCH_MAIL = 0xB4,// Start Mail keyVK_LAUNCH_MEDIA_SELECT = 0xB5,// Select Media keyVK_LAUNCH_APP1 = 0xB6,// Start Application 1 keyVK_LAUNCH_APP2 = 0xB7,// Start Application 2 keyVK_OEM_1 = 0xBA,// Used for miscellaneous characters; it can vary by keyboard.VK_OEM_PLUS = 0xBB,// For any country/region, the '+' keyVK_OEM_COMMA = 0xBC,// For any country/region, the ',' keyVK_OEM_MINUS = 0xBD,// For any country/region, the '-' keyVK_OEM_PERIOD = 0xBE,// For any country/region, the '.' keyVK_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 keyboardVK_PROCESSKEY = 0XE5,// IME PROCESS keyVK_PACKET = 0xE7,// Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key VK_ATTN = 0xF6,// Attn keyVK_CRSEL = 0xF7,// CrSel keyVK_EXSEL = 0xF8,// ExSel keyVK_EREOF = 0xF9,// Erase EOF keyVK_PLAY = 0xFA,// Play keyVK_ZOOM = 0xFB,// Zoom keyVK_NONAME = 0xFC,// ReservedVK_PA1 = 0xFD,// PA1 keyVK_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_KEYDOWNcase 257: // WM_KEYUPcase 260: // WM_SYSKEYDOWNcase 261: // M_SYSKEYUPif ((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);}#endregionpublic MainWindow(){InitializeComponent();// hook keyboardIntPtr 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());elseIsEnableHook = 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);});#endregionShowInTaskbar = 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;elseIsEnableHook = 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());}elseIsEnableHook = 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);elseRun.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 可以打开任务管理器...这个不知道怎么解决...
StandUp 定时休息软件相关推荐
- iRelax for Mac(定时休息提醒工具)
iRelax for Mac可以定时休息提醒,放松一下,伸伸懒腰,喝杯水走动走动.又可以提高工作的效率和专注力还能保持健康的身体. iRelax for Mac软件介绍 iRelax 辅助你在繁忙的工 ...
- 定时提醒软件有哪些 定时提醒便签推荐
随着社会发展节奏越来越快,人们的日程事物也越来越多.一款优秀的定时提醒软件不但可以帮助你合理安排工作.处理紧急事件,还能规划休息时间,让大脑劳逸结合保持精力和创造力. 敬业签的提醒功能非常多样化,除了 ...
- 早衰真可怕,有Python你可不用怕,学了定时休息
2019年11月27日在<追我吧>第九期节目的录制过程中,当期参与嘉宾高以翔奔跑时突然减速倒地,节目现场医护人员第一时间展开救治,并紧急将其送往医院.经过两个多小时的全力抢救,医院最终宣布 ...
- 批处理+定时任务实现定时休息提醒
前言:俗话说的好,懒是第一生产力,懒是提高生产效率的必要条件.而现今windows是大部分人的第一生产工具,批处理+定时任务这对黄金搭档就是提升生产效率的第一工具.大家在生产过程中经常会遇到各种周期性 ...
- python定时器 循环_Python3 循环定时休息并播放音乐 (Windows)
功能:工作一段时间(40 min),自动定时休息(10 min)并播放音乐,如此循环 文件名:EyeTimer.pyw,直接双击运行 关闭方法:在任务管理器里结束 Python 进程 #coding= ...
- xp定时关机软件_好用又免费的电脑定时工具,不用得后悔
现在利用电脑办公的人有多少,举个手示意下!!! 给电脑设置定时关机,可以方便我们不在电脑前完成关机操作. 那么,如何设置定时关机呢?如果要取消,定时关机又如何取消? 有的人可能觉得定时关机根本用不到, ...
- 米拓建站系统(MetInfo CMS)文章定时发布软件
简介: 米拓建站系统(MetInfo CMS)文章定时发布软件是一个网友根据自己需求写的文章发布辅助工具,能够帮助用户定时自动发布文章,这样就不用每天手动发文章啦,只需简单的操作就能轻松发布多篇文章, ...
- 定时重启软件_办公电脑怎样设置定时重启?依靠这款工具即可轻松实现
在平时的工作办公过程当中,电脑是我们进行工作展开的标配,很多事情都需要通过电脑来进行完成,而像平板或手机,可能无法实现电脑上的一些功能,哪怕是最基本的功能,所以电脑是工作过程中的重要工具. 而我们平时 ...
- 卓越电脑定时关机软件
卓越电脑定时关机软件是一款操作简便,功能强大,绿色,无任何插件的电脑自动定时关机软件,是家长,公司文员和电脑办公管理人员的好助手. 卓越电脑定时关机软件主要功能: 1.可设置电脑定时关机,定时重启,定 ...
- 定时启动软件的脚本。同时也适用于定时打开游戏。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.脚本简介 二.脚本内容 三.脚本自启动 总结 一.脚本简介 每天上班族上班第一件事就是登录各种办公软件,今天給大家带来了 ...
最新文章
- Linux系统命令常用查询
- 谷歌联合创始人:AI发展速度让我吃惊,但未来难料
- 上海首次正式试用人脸识别系统抓医药代表:频繁出入的非就医可疑人员
- 移动端适配--flexible.js
- 应用程序自动更新组件GeneralUpdate3.2.1发布
- 谷歌员工中位数年薪达 170 万元,却仍买不起房!
- python基础教程慕课_Python基础教程(6)--抽象
- 系统批量运维管理器Fabric详解
- CF1139D Steps to One
- mac 安装adb工具
- 12306 官网硬卧下铺的选择(亲测可用)
- php 变量加的作用是什么,php变量的定义和作用是什么 - php完全自学手册 - php中文网手册...
- C语言-Switch 语句
- 程序员如何提升英语水平
- 结束 oracle 锁 ps -ef|grepp.spid,oracle 解锁表剔除去session 和kill
- ajax调用ajax_AJAX即将到来
- 小程序免官费注册和突破实名只能绑定5个小程序的限制
- 今日份安利:手机上怎么去图片水印
- macbook无法打开移动硬盘 为什么mac上显示不了移动硬盘
- DaaS架构及落地 (一)