質問編集履歴
10
現状に修正しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -77,7 +77,7 @@
|
|
77
77
|
```
|
78
78
|
|
79
79
|
https://qiita.com/tera1707/items/dc4d261fd0d64b8fc725
|
80
|
-
に載っている「実験コード(C++)」は、
|
80
|
+
に載っている「実験コード(C++)」は、コメントを参考に動きましたが、まだコードを理解できずにいます。
|
81
81
|
|
82
82
|
### 補足
|
83
83
|
Microsoft Visual Studio Community 2022
|
9
コンソールアプリで作っています。に書き換えました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -84,4 +84,4 @@
|
|
84
84
|
Version 17.9.6
|
85
85
|
VisualStudio.17.Release/17.9.6+34728.123
|
86
86
|
|
87
|
-
|
87
|
+
コンソールアプリで作っています。
|
8
URLを追加しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -76,6 +76,8 @@
|
|
76
76
|
}
|
77
77
|
```
|
78
78
|
|
79
|
+
https://qiita.com/tera1707/items/dc4d261fd0d64b8fc725
|
80
|
+
に載っている「実験コード(C++)」は、includeするヘッダーファイルが無いのでそのままコピペしても動かないみたいです。
|
79
81
|
|
80
82
|
### 補足
|
81
83
|
Microsoft Visual Studio Community 2022
|
7
タイプミスの修正をしました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -42,6 +42,7 @@
|
|
42
42
|
}
|
43
43
|
|
44
44
|
}
|
45
|
+
```
|
45
46
|
|
46
47
|
あと、ディスプレイがオフになった時が分かりません。
|
47
48
|
「WM_POWERBROADCAST メッセージ」を取得するには、「WindowProc 関数」を使うようですが、読んでも理解ができないです。
|
6
ソースを追記しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -15,9 +15,8 @@
|
|
15
15
|
|
16
16
|
##### 上記の詳細・結果
|
17
17
|
ググってみましたが、キーワードが悪いのか、解決に至りませんでした。
|
18
|
-
例えば「VisualStudio "C++" スクリーンセーバー起動 検知」でググってみたのですが、
|
19
|
-
スクリーンセイバーを抑制するとか、設定を変えるとか、実行するとかの記事ばかりで、わかりませんでした。
|
20
18
|
|
19
|
+
コメント頂きましてありがとうございます。
|
21
20
|
下記のソースで、スクリーンセイバーの状態を取得することに成功しました。
|
22
21
|
```C++
|
23
22
|
#include <Windows.h>
|
@@ -43,11 +42,40 @@
|
|
43
42
|
}
|
44
43
|
|
45
44
|
}
|
46
|
-
```
|
47
45
|
|
48
46
|
あと、ディスプレイがオフになった時が分かりません。
|
49
|
-
「WM_POWERBROADCAST メッセージ」を取得するには、「WindowProc 関数」を使うようですが、
|
47
|
+
「WM_POWERBROADCAST メッセージ」を取得するには、「WindowProc 関数」を使うようですが、読んでも理解ができないです。
|
48
|
+
https://learn.microsoft.com/ja-jp/windows/win32/power/wm-powerbroadcast
|
50
49
|
|
50
|
+
下記のような記述では、ダメみたいです。
|
51
|
+
```C++
|
52
|
+
#include <iostream>
|
53
|
+
#include <windows.h>
|
54
|
+
|
55
|
+
int main()
|
56
|
+
{
|
57
|
+
while (true)
|
58
|
+
{
|
59
|
+
HWND hActWin = GetForegroundWindow(); // フォアグラウンドアプリのハンドル取得
|
60
|
+
UINT uMsg = NULL;
|
61
|
+
if (hActWin)
|
62
|
+
{
|
63
|
+
LRESULT CALLBACK WindowProc(
|
64
|
+
HWND hActWin, // handle to window
|
65
|
+
UINT uMsg, // WM_POWERBROADCAST
|
66
|
+
WPARAM wParam, // power-management event
|
67
|
+
LPARAM lParam // function-specific data
|
68
|
+
);
|
69
|
+
}
|
70
|
+
if (uMsg == WM_POWERBROADCAST)
|
71
|
+
{
|
72
|
+
printf("ディスプレイがOFFになりました。");
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}
|
76
|
+
```
|
77
|
+
|
78
|
+
|
51
79
|
### 補足
|
52
80
|
Microsoft Visual Studio Community 2022
|
53
81
|
Version 17.9.6
|
5
タイプミス直しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -53,4 +53,4 @@
|
|
53
53
|
Version 17.9.6
|
54
54
|
VisualStudio.17.Release/17.9.6+34728.123
|
55
55
|
|
56
|
-
|
56
|
+
Console Applicationで作っています。
|
4
Cconsole Applicationで作っています。
title
CHANGED
File without changes
|
body
CHANGED
@@ -51,4 +51,6 @@
|
|
51
51
|
### 補足
|
52
52
|
Microsoft Visual Studio Community 2022
|
53
53
|
Version 17.9.6
|
54
|
-
VisualStudio.17.Release/17.9.6+34728.123
|
54
|
+
VisualStudio.17.Release/17.9.6+34728.123
|
55
|
+
|
56
|
+
Cconsole Applicationで作っています。
|
3
ソースのひと文字余計でした。
title
CHANGED
File without changes
|
body
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
while (true)
|
32
32
|
{
|
33
|
-
fResult =
|
33
|
+
fResult = SystemParametersInfo(
|
34
34
|
SPI_GETSCREENSAVERRUNNING,
|
35
35
|
0,
|
36
36
|
&pvParam,
|
2
スクリーンセイバー状態の取得はできました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
例えば「VisualStudio "C++" スクリーンセーバー起動 検知」でググってみたのですが、
|
19
19
|
スクリーンセイバーを抑制するとか、設定を変えるとか、実行するとかの記事ばかりで、わかりませんでした。
|
20
20
|
|
21
|
-
下記のソース
|
21
|
+
下記のソースで、スクリーンセイバーの状態を取得することに成功しました。
|
22
22
|
```C++
|
23
23
|
#include <Windows.h>
|
24
24
|
#include <stdio.h>
|
@@ -31,7 +31,7 @@
|
|
31
31
|
while (true)
|
32
32
|
{
|
33
33
|
fResult = SystemParametersInfoA(
|
34
|
-
|
34
|
+
SPI_GETSCREENSAVERRUNNING,
|
35
35
|
0,
|
36
36
|
&pvParam,
|
37
37
|
0
|
@@ -45,6 +45,9 @@
|
|
45
45
|
}
|
46
46
|
```
|
47
47
|
|
48
|
+
あと、ディスプレイがオフになった時が分かりません。
|
49
|
+
「WM_POWERBROADCAST メッセージ」を取得するには、「WindowProc 関数」を使うようですが、その関数のウィンドウのハンドルの取得で躓いてます。
|
50
|
+
|
48
51
|
### 補足
|
49
52
|
Microsoft Visual Studio Community 2022
|
50
53
|
Version 17.9.6
|
1
自分なりにに書いてみました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -7,14 +7,6 @@
|
|
7
7
|
状態を判定するためのコードが分かりません。
|
8
8
|
教えてください。
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
### 該当のソースコード
|
13
|
-
|
14
|
-
```
|
15
|
-
特になし
|
16
|
-
```
|
17
|
-
|
18
10
|
### 試したこと・調べたこと
|
19
11
|
- [x] teratailやGoogle等で検索した
|
20
12
|
- [ ] ソースコードを自分なりに変更した
|
@@ -26,6 +18,33 @@
|
|
26
18
|
例えば「VisualStudio "C++" スクリーンセーバー起動 検知」でググってみたのですが、
|
27
19
|
スクリーンセイバーを抑制するとか、設定を変えるとか、実行するとかの記事ばかりで、わかりませんでした。
|
28
20
|
|
21
|
+
下記のソースを書いてみましたが、コンソールに何も表示されませんでした。
|
22
|
+
```C++
|
23
|
+
#include <Windows.h>
|
24
|
+
#include <stdio.h>
|
25
|
+
|
26
|
+
int main(void)
|
27
|
+
{
|
28
|
+
bool fResult = true;
|
29
|
+
bool pvParam = true;
|
30
|
+
|
31
|
+
while (true)
|
32
|
+
{
|
33
|
+
fResult = SystemParametersInfoA(
|
34
|
+
SPI_GETSCREENSAVEACTIVE,
|
35
|
+
0,
|
36
|
+
&pvParam,
|
37
|
+
0
|
38
|
+
);
|
39
|
+
if (!pvParam)
|
40
|
+
{
|
41
|
+
printf("スクリーンセイバーが起動しました。\n");
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
}
|
46
|
+
```
|
47
|
+
|
29
48
|
### 補足
|
30
49
|
Microsoft Visual Studio Community 2022
|
31
50
|
Version 17.9.6
|