もくじ
やりたいこと
指定のGUID({381b4222-f694-41f0-9685-ff5bb260df2e}
とかそういうやつ)とほかのGUIDを比較して、一致してるのかどうか、というのを確認したいシーンがあった。
具体的には、Windowsの電力プランの設定で、「バランス」が選択されてるのかどうか、というのを知りたいときに、電力プランはそれぞれGUIDを持っていて、それが一致するかということをしたかったので、GUIDの一致確認をしたかった。
で、その際、guiddef.h
というところに定義されているGUID
を使うのだが、まずここに自分の指定のGUIDを入れるのをどうやるのか?(手動で順番に値をいれるようなことはしたくない)となったので、好きな値をGUID
に入れるのと、GUID
どうしを比較、一致確認する方法を調べた。
やりかた
combaseapi.h
に定義されてるCLSIDFromString()
という関数を使用して、文字列で書いたGUIDからGUID
をまず作成し、そのあとguiddef.h
にあるIsEqualGUID()
という関数を使って比較をした。
※IsEqualGUID()
は、memcmpで中身が全く一緒かどうかを見てるだけっぽい。
サンプル
<combaseapi.h>
をinclude必要。
(今回PowerGetActiveScheme()
を使うので、一緒に<powersetting.h>
もincludeしている)
#pragma comment(lib, "PowrProf.lib")
#include <Windows.h>
#include <powersetting.h>
#include <combaseapi.h>
#include <string>
int main()
{
GUID srcGuid;
//GUID srcGuid = { 0x381b4222, 0xf694, 0x41f0, 0x96, 0x85, 0xff, 0x5b, 0xb2, 0x60, 0xdf, 0x2e };
GUID* targetGuid;
// GUID文字列からGUIDに変換
CLSIDFromString(L"{381b4222-f694-41f0-9685-ff5bb260df2e}", &srcGuid);//「バランス」の電力プランのGUID
// 今選んでいる電力プランのGUIDを取得
PowerGetActiveScheme(NULL , &targetGuid);
// 比較する
if (IsEqualGUID(*targetGuid, srcGuid) == TRUE)
{
MessageBox(NULL, L"今、バランスの電力プランを使ってます", L"", MB_OK);
}
system("pause");
}
追記
CLSIDFromString()
を使わなくても、普通に構造体に値を入れる感じで下記のようにすれば任意のGUID値を作ることができる。
GUID srcGuid = { 0x381b4222, 0xf694, 0x41f0, 0x96, 0x85, 0xff, 0x5b, 0xb2, 0x60, 0xdf, 0x2e };
<combaseapi.h>
の関数は、CLSIDFromString()
よりも、その逆のStringFromCLSID()
とかStringFromGUID2()
とかの、GUID⇒stringに直す方がよく使いそうな気がする。
参考
OLECHARはワイド文字列