Microsoft Surface pro 3, keybroad and the ALT PRINT SCREEN

copy, and the original is, http://swf.com.tw/?p=651

Surface Pro 3 實體鍵盤(type cover)缺乏螢幕截圖(Print Screen, PrtSc)鍵,
可以透過Fn組合鍵(熱鍵)達成。

Fn + 空白鍵:擷取整個螢幕。
Fn + 空白鍵 + Alt:擷取目前作用中的視窗。
Fn + Caps(大小寫鍵):鎖定F1~F12功能鍵。

鍵盤蓋最上面一排的F1~F12功能鍵,預設必須搭配Fn按鍵才有作用,
例如,執行F1功能鍵,必須按下Fn和F1,否則在實體鍵盤將執行按鍵燈光變暗的功能
(註:鍵盤燈光有三種亮度變化)。鎖定之後,F1~F12就變成一般的功能鍵了。

Fn + Del:調亮螢幕。
Fn + Backspace:調暗螢幕。

底下的組合鍵,已標示在觸控和實體鍵盤上,所以應該用不到:

Fn + 左方向鍵:等同Home鍵(回到行首或頁首)
Fn + 右方向鍵:等同End鍵(回到行尾或頁尾)
Fn + 上方向鍵:等同Pg Up(Page Up),到上一頁。
Fn + 下方向鍵:等同Pg Dn(Page Down),到下一頁。

 

 

廣告

Microsoft Surface pro 3, how to see battery usage

http://wp.me/ph3BR-1mX

 

桌面, 建立 BAT 檔案如下, 點兩下, 執行後會在桌面出現一個 battery_log_xxxxxxxx.html

battery_log.bat


REM xiaolaba
REM 2014-10-30
REM windows 8.1, surface pro 3, also usable with all windows notebook
REM To obtain battery usage and log, file name : battery_log_yyyymmdd_hhMMSS.

rem powercfg /batteryreport /output %USERPROFILE%\Desktop\%date%_battery_log.html

powercfg /batteryreport /output %USERPROFILE%\Desktop\battery_log_%date%_%time:~0,2%%time:~3,2%%time:~6,2%.html

rem powercfg /batteryreport

 

xiaolaba_win8_battrery_log

 

打開這個html, 瀏覽器就會出現電池的使用狀況.

xiaolaba_win8_battrery_log2

 

跟ANDROID 手機的很像. 其實, Surface Pro 3 自己顯示, 說他自己是 “手機", 奇怪吧.

 

 

 

俺們得到的第一個 電池消耗的紀錄

Battery report

// <![CDATA[
// Formats a number using the current locale (to handle the 1000’s separator).

// The result is rounded so no decimal point is shown.

function numberToLocaleString(value) {

var localeString = Math.round(parseFloat(value + “)).toLocaleString();

return localeString.substring(0, localeString.indexOf(‘.’));

}

function padLeft(number, length) {

var str = " + number;

while (str.length endTime

? msBetween(endTime, startTime)

: parseDateTime(endTime) – parseDateTime(startTime);

}

var dateFormat = /(\d{4})-(\d{2})-(\d{2})[T](\d{2}):(\d{2}):(\d{2})/

// Parses a date-time string and returns a Date (i.e. number of milliseconds)

function parseDateTime(value) {

if (!value) {

return 0;

}

var match = dateFormat.exec(value)

if (!match) {

return 0;

}

return Date.parse(match[1] + ‘/’ + match[2] + ‘/’ +

match[3] + ‘ ‘ + match[4] + ‘:’ +

match[5] + ‘:’ + match[6])

}

// Parses just the date portion of a date-time string and returns a Date

// (i.e. number of milliseconds)

function parseDate(value) {

if (!value) {

return 0;

}

var match = dateFormat.exec(value)

if (!match) {

return 0;

}

return Date.parse(match[1] + ‘/’ + match[2] + ‘/’ + match[3])

}

var durationFormat = /P((\d+)D)?T((\d+)H)?((\d+)M)?(\d+)S/

// Convert a string of the form P10DT1H15M40S to a count of milliseconds

function parseDurationToMs(value) {

var match = durationFormat.exec(value)

if (!match) {

return 0

}

var days = parseInt(match[2] || ‘0’);

var hrs = parseInt(match[4] || ‘0’);

var mins = parseInt(match[6] || ‘0’);

var secs = parseInt(match[7] || ‘0’);

return ((((((days * 24) + hrs) * 60) + mins) * 60) + secs) * 1000;

}

// Converts milliseconds to days

function msToDays(ms) {

return (ms / 1000 / 60 / 60 / 24);

}

function daysToMs(days) {

return (days * 24 * 60 * 60 * 1000);

}

// Formats a number of milliseconds as h:mm:ss

function formatDurationMs(value) {

var ms = parseInt(value);

var secs = ms / 1000;

var mins = secs / 60;

var hrs = Math.floor(mins / 60);

mins = Math.floor(mins % 60);

secs = Math.floor(secs % 60);

return hrs + ‘:’ + padLeft(mins,2) + ‘:’ + padLeft(secs,2);

}

// Converts a millisecond timestamp to a day and month string

// Note: dayOffset is forward from date.

function dateToDayAndMonth(ms, dayOffset) {

var adjustedDate = new Date(ms + (dayOffset * 24 * 60 * 60 * 1000));

return padLeft(adjustedDate.getMonth() + 1, 2) + “-" +

padLeft(adjustedDate.getDate(), 2);

}

// Takes a millisecond timestamp and returns a new millisecond timestamp

// rounded down to the current day.

function dateFloor(ms) {

var dt = new Date(ms);

return Date.parse(dt.getFullYear() + ‘/’ + (dt.getMonth() + 1) + ‘/’ + dt.getDate());

}

Timegraph = {

axisTop: 9.5,

axisRight: 24.5,

axisBottom: 25.5,

axisLeft: 25.5,

ticks: 10,

// Maximum number of 24 hour ticks for showing 12 and 6 hour ticks

ticks12Hour: 8,

ticks6Hour: 4,

// Shading

lineColor: “#B82830″,

shadingColor: “#4d1d35″,

precompute: function (graph) {

var canvas = graph.canvas;

var data = graph.data;

var min = 0;

var max = 0;

graph.height = canvas.height – Timegraph.axisTop – Timegraph.axisBottom;

graph.width = canvas.width – Timegraph.axisLeft – Timegraph.axisRight;

for (var i = 0; i < data.length; i++) {

data[i].t0 = parseDateTime(data[i].x0);

data[i].t1 = parseDateTime(data[i].x1);

if (i == 0) {

min = data[i].t0;

max = data[i].t1;

}

if (data[i].t0 max) {

max = data[i].t1;

}

data[i].yy0 =

Timegraph.axisTop + graph.height – data[i].y0 * graph.height;

data[i].yy1 =

Timegraph.axisTop + graph.height – data[i].y1 * graph.height;

}

if (graph.startTime != null) {

graph.startMs = parseDateTime(graph.startTime);

} else {

graph.startMs = min;

}

graph.endMs = max;

graph.durationMs = max – min;

},

drawFrame: function (graph) {

var canvas = graph.canvas;

var context = graph.context;

graph.width =

canvas.width – Timegraph.axisRight – Timegraph.axisLeft;

graph.height =

canvas.height – Timegraph.axisTop – Timegraph.axisBottom;

context.beginPath();

context.moveTo(Timegraph.axisLeft, Timegraph.axisTop);

context.lineTo(Timegraph.axisLeft + graph.width,

Timegraph.axisTop);

context.lineTo(Timegraph.axisLeft + graph.width,

Timegraph.axisTop + graph.height);

context.lineTo(Timegraph.axisLeft,

Timegraph.axisTop + graph.height);

context.lineTo(Timegraph.axisLeft, Timegraph.axisTop);

context.strokeStyle = “#c0c0c0″;

context.stroke();

},

drawRange: function (graph) {

var canvas = graph.canvas;

var context = graph.context;

context.font = “12pt Segoe UI";

context.fillStyle = “#00b0f0″;

context.fillText(“%", 0, Timegraph.axisTop + 5, Timegraph.axisLeft);

var tickSpacing = graph.height / 10;

var offset = Timegraph.axisTop + tickSpacing;

var tickValue = 90;

for (var i = 0; i < 9; i++) {

context.beginPath();

context.moveTo(Timegraph.axisLeft, offset);

context.lineTo(Timegraph.axisLeft + graph.width,

offset);

context.stroke();

context.fillText(tickValue.toString(),

0,

offset + 5,

Timegraph.axisLeft);

offset += tickSpacing;

tickValue -= 10;

}

},

drawDomain: function (graph, start, end) {

var canvas = graph.canvas;

var context = graph.context;

var data = graph.data;

var duration = end – start;

if ((end t0) {

t0 = t0 + daysToMs(1);

dayOffset++;

}

if (t0 >= t1) {

return;

}

var increment =

Math.max(Math.floor((t1 – t0) / daysToMs(Timegraph.ticks)), 1);

var incrementMs = daysToMs(increment);

var spacing = (incrementMs / duration) * graph.width;

var offset = (t0 – start) / duration;

var ticksCount = Math.floor((t1 – t0) / incrementMs);

for (offset = offset * graph.width + Timegraph.axisLeft;

offset < (graph.width + Timegraph.axisLeft);

offset += spacing) {

context.beginPath();

context.moveTo(offset, Timegraph.axisTop);

context.lineTo(offset, Timegraph.axisTop + graph.height);

context.stroke();

context.fillText(dateToDayAndMonth(startDay, dayOffset),

offset,

Timegraph.axisTop + graph.height + 15,

spacing);

dayOffset += increment;

}

},

plot: function (graph, start, end) {

var canvas = graph.canvas;

var context = graph.context

var data = graph.data;

if ((end < start)) {

return;

}

var duration = end – start;

Timegraph.drawDomain(graph, start, end);

context.fillStyle = Timegraph.shadingColor;

for (var i = 0; i < data.length – 1; i++) {

if ((data[i].t0 end) ||

(data[i].t1 > end)) {

continue;

}

var x1 = (data[i].t0 – start) / duration;

x1 = x1 * graph.width + Timegraph.axisLeft;

var x2 = (data[i].t1 – start) / duration;

x2 = x2 * graph.width + Timegraph.axisLeft;

context.globalAlpha = 0.3;

context.fillRect(x1, Timegraph.axisTop, (x2 – x1), graph.height);

context.globalAlpha = 1;

context.beginPath();

context.strokeStyle = Timegraph.lineColor;

context.lineWidth = 1.5;

context.moveTo(x1, data[i].yy0);

context.lineTo(x2, data[i].yy1);

context.stroke();

}

},

draw: function (graph) {

var canvas = document.getElementById(graph.element);

if (canvas == null) {

return;

}

var context = canvas.getContext(‘2d’);

if (context == null) {

return;

}

graph.width = 0;

graph.height = 0;

graph.context = context;

graph.canvas = canvas;

Timegraph.precompute(graph);

Timegraph.drawFrame(graph);

Timegraph.drawRange(graph);

Timegraph.plot(graph, graph.startMs, graph.endMs);

}

};

drainGraphData = [

{ x0: “2014-10-29T20:45:57″, x1: “2014-10-29T20:53:45″, y0: 0.6080023478771278, y1: 0.6416307963216592 },

{ x0: “2014-10-29T20:53:45″, x1: “2014-10-29T21:00:00″, y0: 0.6416307963216592, y1: 0.6249021717863432 },

{ x0: “2014-10-29T21:00:00″, x1: “2014-10-29T21:04:00″, y0: 0.6249021717863432, y1: 0.612453531598513 },

{ x0: “2014-10-29T21:04:00″, x1: “2014-10-29T21:07:14″, y0: 0.612453531598513, y1: 0.5962874192917237 },

{ x0: “2014-10-29T21:07:14″, x1: “2014-10-29T21:07:40″, y0: 0.5962874192917237, y1: 0.5951623948346704 },

{ x0: “2014-10-29T21:07:40″, x1: “2014-10-29T21:07:46″, y0: 0.5951623948346704, y1: 0.5947955390334573 },

{ x0: “2014-10-29T21:07:46″, x1: “2014-10-29T21:07:47″, y0: 0.5947955390334573, y1: 0.5947955390334573 },

{ x0: “2014-10-29T21:07:47″, x1: “2014-10-29T21:08:00″, y0: 0.5947955390334573, y1: 0.5927411465466641 },

{ x0: “2014-10-29T21:08:00″, x1: “2014-10-29T21:08:01″, y0: 0.5927411465466641, y1: 0.5927411465466641 },

{ x0: “2014-10-29T21:10:57″, x1: “2014-10-29T21:10:57″, y0: 0.5884856192525925, y1: 0.5884856192525925 },

{ x0: “2014-10-29T21:10:57″, x1: “2014-10-29T21:10:57″, y0: 0.5884856192525925, y1: 0.5884856192525925 },

{ x0: “2014-10-29T21:10:57″, x1: “2014-10-29T21:11:17″, y0: 0.5884856192525925, y1: 0.5882899628252788 },

{ x0: “2014-10-29T21:11:17″, x1: “2014-10-29T21:15:18″, y0: 0.5882899628252788, y1: 0.5802925063588339 },

{ x0: “2014-10-29T22:00:00″, x1: “2014-10-29T22:00:10″, y0: 0.632532772451575, y1: 0.6336333398552142 },

{ x0: “2014-10-29T22:00:19″, x1: “2014-10-29T22:15:31″, y0: 0.6338289962825279, y1: 0.7057571903737038 },

{ x0: “2014-10-30T12:11:53″, x1: “2014-10-30T12:40:26″, y0: 1, y1: 1 },

{ x0: “2014-10-30T12:40:26″, x1: “2014-10-30T12:58:00″, y0: 1, y1: 1 },

{ x0: “2014-10-30T12:58:00″, x1: “2014-10-30T13:03:00″, y0: 1, y1: 1 },

{ x0: “2014-10-30T13:03:00″, x1: “2014-10-30T13:05:00″, y0: 1, y1: 0.94413263508912 },

{ x0: “2014-10-30T13:05:00″, x1: “2014-10-30T13:09:00″, y0: 0.94413263508912, y1: 0.9348566329286335 },

{ x0: “2014-10-30T13:09:00″, x1: “2014-10-30T13:11:00″, y0: 0.9348566329286335, y1: 0.9316393866096799 },

{ x0: “2014-10-30T13:11:00″, x1: “2014-10-30T13:14:00″, y0: 0.9316393866096799, y1: 0.924852640725172 },

{ x0: “2014-10-30T13:14:00″, x1: “2014-10-30T13:19:00″, y0: 0.924852640725172, y1: 0.9148721320714839 },

{ x0: “2014-10-30T13:19:00″, x1: “2014-10-30T13:21:00″, y0: 0.9148721320714839, y1: 0.9102223892163539 },

];

function main() {

Timegraph.draw({

element: “drain-graph",

data: drainGraphData,

startTime: “2014-10-27T13:22:01″,

endTime: “2014-10-30T13:22:01″,

});

}

if (window.addEventListener != null) {

window.addEventListener(“load", main, false);

} else if (window.attachEvent != null) {

window.attachEvent(“onload", main);

}

// ]]>

 

Battery report

COMPUTER NAME USER-12
SYSTEM PRODUCT NAME Microsoft Corporation Surface Pro 3
BIOS 3.11.0250 09/27/2014
OS BUILD 9600.17085.amd64fre.winblue_gdr.140330-1035
PLATFORM ROLE Slate
CONNECTED STANDBY Supported
REPORT TIME 2014-10-30 13:22:01

Installed batteries

Information about each currently installed battery

BATTERY1
NAME X863568
MANUFACTURER SDI
SERIAL NUMBER 291E
CHEMISTRY LION
DESIGN CAPACITY 42,157 mWh
FULL CHARGE CAPACITY 42,583 mWh
CYCLE COUNT

Recent usage

Power states over the last 3 days

START TIME STATE SOURCE CAPACITY REMAINING
2014-10-29 20:42:56 Active AC 59 % 24,267 mWh
20:45:52 Connected standby AC 61 % 24,837 mWh
20:45:57 Active AC 61 % 24,860 mWh
20:53:45 Active Battery 64 % 26,235 mWh
21:07:14 Connected standby Battery 60 % 24,381 mWh
21:07:40 Active Battery 60 % 24,335 mWh
21:07:46 Connected standby Battery 59 % 24,320 mWh
21:07:47 Active Battery 59 % 24,320 mWh
21:08:00 Connected standby Battery 59 % 24,236 mWh
21:08:01 Suspended 59 % 24,236 mWh
21:10:57 Connected standby Battery 59 % 24,062 mWh
21:10:57 Active Battery 59 % 24,062 mWh
21:10:57 Connected standby Battery 59 % 24,062 mWh
21:11:17 Active Battery 59 % 24,054 mWh
21:15:18 Connected standby Battery 58 % 23,727 mWh
21:49:56 Connected standby AC 56 % 23,028 mWh
21:49:56 Active AC 56 % 23,028 mWh
21:50:02 Connected standby AC 56 % 23,043 mWh
21:50:08 Active AC 56 % 23,066 mWh
21:50:39 Connected standby AC 57 % 23,218 mWh
22:00:00 Active AC 63 % 25,863 mWh
22:00:10 Active Battery 63 % 25,908 mWh
22:00:19 Active AC 63 % 25,916 mWh
22:15:31 Active Battery 71 % 28,857 mWh
22:15:41 Active AC 71 % 28,865 mWh
22:37:00 Suspended 78 % 31,692 mWh
22:38:50 Active AC 78 % 31,973 mWh
2014-10-30 00:16:05 Connected standby AC 99 % 40,668 mWh
00:34:41 Active AC 104 % 42,583 mWh
00:55:25 Connected standby AC 104 % 42,583 mWh
06:13:48 Active AC 104 % 42,583 mWh
06:14:18 Connected standby AC 104 % 42,583 mWh
08:59:05 Active AC 104 % 42,583 mWh
09:28:00 Suspended 104 % 42,583 mWh
09:35:23 Active AC 100 % 42,583 mWh
09:35:23 Suspended 100 % 42,583 mWh
09:36:58 Active AC 100 % 42,583 mWh
11:58:43 Connected standby AC 100 % 42,583 mWh
12:11:53 Active AC 100 % 42,583 mWh
12:40:26 Active Battery 100 % 42,583 mWh
13:21:00 Report generated Battery 91 % 38,760 mWh

Battery usage

Battery drains over the last 3 days

 

START TIME STATE DURATION ENERGY DRAINED
2014-10-29 20:53:45 Active 0:13:28 5 % 1,854 mWh
21:07:14 Connected standby 0:00:25 46 mWh
21:07:40 Active 0:00:06 15 mWh
21:07:46 Connected standby 0:00:01
21:07:47 Active 0:00:13 84 mWh
21:08:00 Connected standby 0:00:00
21:10:57 Connected standby 0:00:00
21:10:57 Active 0:00:00
21:10:57 Connected standby 0:00:19 8 mWh
21:11:17 Active 0:04:00 1 % 327 mWh
21:15:18 Connected standby 0:34:38 2 % 699 mWh
22:00:10 Active 0:00:09 -8 mWh
22:15:31 Active 0:00:09 -8 mWh
12:40:26 Active 0:40:33 9 % 3,823 mWh

Usage history

History of system usage on AC and battery

BATTERY DURATION AC DURATION
PERIOD ACTIVE CONNECTED STANDBY ACTIVE CONNECTED STANDBY
2014-10-04- 2014-10-11 0:02:06
2014-10-11- 2014-10-18
2014-10-19
2014-10-20
2014-10-21
2014-10-22
2014-10-23
2014-10-24
2014-10-25
2014-10-26
2014-10-27
2014-10-28
2014-10-29 0:18:05 0:35:23 2:09:05 0:09:32

Battery capacity history

Charge capacity history of the system’s batteries

PERIOD FULL CHARGE CAPACITY DESIGN CAPACITY
2014-10-04- 2014-10-11 40,888 mWh 42,157 mWh
2014-10-11- 2014-10-18 40,888 mWh 42,157 mWh
2014-10-19 40,888 mWh 42,157 mWh
2014-10-20 40,888 mWh 42,157 mWh
2014-10-21 40,888 mWh 42,157 mWh
2014-10-22 40,888 mWh 42,157 mWh
2014-10-23 40,888 mWh 42,157 mWh
2014-10-24 40,888 mWh 42,157 mWh
2014-10-25 40,888 mWh 42,157 mWh
2014-10-26 40,888 mWh 42,157 mWh
2014-10-27 40,888 mWh 42,157 mWh
2014-10-28 40,888 mWh 42,157 mWh
2014-10-29 40,888 mWh 42,157 mWh

Battery life estimates

Battery life estimates based on observed drains

AT FULL CHARGE AT DESIGN CAPACITY
PERIOD ACTIVE CONNECTED STANDBY ACTIVE CONNECTED STANDBY
2014-10-04- 2014-10-11
2014-10-11- 2014-10-18
2014-10-19
2014-10-20
2014-10-21
2014-10-22
2014-10-23
2014-10-24
2014-10-25
2014-10-26
2014-10-27
2014-10-28
2014-10-29 5:26:35
32:01:19

50 %

/ 16 h

 

5:36:43
33:00:56

48 %

/ 16 h

 

Current estimate of battery life based on all observed drains since OS install

Since OS install 5:40:07
33:20:58

48 %

/ 16 h

 

5:36:43
33:00:56

48 %

/ 16 h