2012/10/31

【Windows8】取得Auto Rotation狀態

先前同事提了個需求要能用程式判斷當前Auto Rotation狀態,查了一下發現有個GetAutoRotationState()函數可以調用,透過這函數呼叫可以查知目前系統Auto Rotation是否被開啟,直接看程式內容吧!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>

#pragma comment (lib, "User32")

int _tmain(int argc, _TCHAR* argv[])
{
 enum tagAR_STATE state;
 bool blResult = GetAutoRotationState(&state);
 if(blResult)
 {
  if(0 == state)
   printf("Auto Rotation: ON\n");
  else
   printf("Auto Rotation: OFF\n");
 }
 else
  printf("Access rotation status ... fail\n");
 return  0;
}

需要注意的是這函數是Windows8才加入User32.dll的,因此如果拿這程式在Windows7以前版本執行的話會遇到這樣的錯誤:
如果要避免這樣的錯誤,需要用動態載入dll方式進行呼叫。

在Windows8上執行截圖如下:


附註:tagAR_STATE詳細屬性:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
public enum tagAR_STATE : uint
{
 AR_ENABLED = 0x0,
 AR_DISABLED = 0x1,
 AR_SUPPRESSED = 0x2,
 AR_REMOTESESSION = 0x4,
 AR_MULTIMON = 0x8,
 AR_NOSENSOR = 0x10,
 AR_NOT_SUPPORTED = 0x20,
 AR_DOCKED = 0x40,
 AR_LAPTOP = 0x80
}

Keyword:Windows API、System Call

沒有留言:

張貼留言