質問するログイン新規登録

質問編集履歴

10

現状に修正しました。

2024/05/05 07:09

投稿

One_of_Arthur
One_of_Arthur

スコア83

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++)」は、includeするヘッダーファイルが無いのでそのままピペしてもかないみです。
80
+ に載っている「実験コード(C++)」は、コメントを参考にきましが、まだコードを理解きずにいます。
81
81
 
82
82
  ### 補足
83
83
  Microsoft Visual Studio Community 2022

9

コンソールアプリで作っています。に書き換えました。

2024/05/05 07:08

投稿

One_of_Arthur
One_of_Arthur

スコア83

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
- Console Applicationで作っています。
87
+ コンソールアプリで作っています。

8

URLを追加しました。

2024/05/04 06:36

投稿

One_of_Arthur
One_of_Arthur

スコア83

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

タイプミスの修正をしました。

2024/05/04 06:13

投稿

One_of_Arthur
One_of_Arthur

スコア83

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

ソースを追記しました。

2024/05/04 06:12

投稿

One_of_Arthur
One_of_Arthur

スコア83

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

タイプミス直しました。

2024/05/04 05:36

投稿

One_of_Arthur
One_of_Arthur

スコア83

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
- Cconsole Applicationで作っています。
56
+ Console Applicationで作っています。

4

Cconsole Applicationで作っています。

2024/05/04 05:35

投稿

One_of_Arthur
One_of_Arthur

スコア83

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

ソースのひと文字余計でした。

2024/05/04 01:53

投稿

One_of_Arthur
One_of_Arthur

スコア83

title CHANGED
File without changes
body CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  while (true)
32
32
  {
33
- fResult = SystemParametersInfoA(
33
+ fResult = SystemParametersInfo(
34
34
  SPI_GETSCREENSAVERRUNNING,
35
35
  0,
36
36
  &pvParam,

2

スクリーンセイバー状態の取得はできました。

2024/05/04 01:52

投稿

One_of_Arthur
One_of_Arthur

スコア83

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
- SPI_GETSCREENSAVEACTIVE,
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

自分なりにに書いてみました。

2024/05/03 08:47

投稿

One_of_Arthur
One_of_Arthur

スコア83

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