顯示具有 Windows 標籤的文章。 顯示所有文章
顯示具有 Windows 標籤的文章。 顯示所有文章

2014/5/23

【VirtualBox】Windows 8安裝問題

  最近要測試一些系統相容性問題要在VirtaulBox上安裝Windows8卻遇到兩個問題無法安裝。
  首先是安裝畫面帶起來的過程就出問題了,進入藍色的Recovery畫面,Error Code是0xc0000225,畫面如下:
   解決這問題只需開啟虛擬機器設定頁面將晶片組改成ICH9,延伸功能部分把「啟用I/O APIC」選項勾起來即可,截圖如下:
   解掉第一個問題後下個問題馬上出現,這次是停在黑色畫面Error Code是0x0000000C,畫面如下圖:
雖然這問題稍為複雜些,Google上總有神人跳出來解答:這問題是因缺乏CMPXCHG16B指令支援導致。比較麻煩的是這次沒有GUI設定畫面可以勾選解決,必須Key一些命令才行,但指令也很單純:
"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata [vmname] VBoxInternal/CPUM/CMPXCHG16B 1
  指令中的[vmname]必須改為自訂的虛擬機器名稱,比如虛擬機器名稱命名為test則上述指令就應該改成:
"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata test VBoxInternal/CPUM/CMPXCHG16B 1
  完成上面兩項的修改後應該就可以正確安裝Windows 8了!

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

2012/10/9

【Windows】Process Explorer

  在Windows系統上一般要查看執行中的處理程序可以開啟Windows工作管理員(可用快截鍵Ctrl + Shift + ESC開啟)來查看,這用來查看系統中哪個處理程序吃掉太多CPU或記憶體資源或是想殺掉某些用不到又吃資源的處理程序很好用,但若要進一步查看程式呼叫了哪些DLL、存取哪些Handle或是動了哪些Registry等詳細訊息就不夠用了!

  要進一步查看Process的相關資訊可以到Sysinternals網站下載Process Explorer,這工具以樹狀關係顯示Process之間的關係,把滑鼠移到某個Process上停著會顯示執行擋完整的路徑名稱,連帶起來的參數資訊都會顯示出來,不同的程序也可用不同顏色顯示(ex. 預設Service會以粉紅色顯示、一般程序則是藍色顯示...等),雙點某個程序則會顯示進一步詳細資訊,像是CPU佔用時間、記憶體資源或是IO資訊等,最厲害的大概就是可以查看Process執行載入了哪些DLL或是開啟了哪些Handle資訊,這些資訊對於開發人員要找問題可是有很大的幫助!