質問編集履歴
4
コード修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -38,17 +38,21 @@
|
|
38
38
|
32BitExeから32BitDLL=>64Bitプロセスへは、フック事態が動きません。
|
39
39
|
引き続き調べてみたいと思います。
|
40
40
|
|
41
|
+
再度追加記載
|
42
|
+
一部コードを変更しました。
|
43
|
+
変更により「UnCloseHook32_MsgLoop」から「CloseHook32_MsgLoop」を呼び出しでの終了を行えました。
|
44
|
+
が「UnhookWindowsHookEx(hHwnd)」がエラーを返却するため、フックを解除できません。
|
45
|
+
|
46
|
+
|
41
47
|
```C++
|
42
48
|
// 共有領域(共有領域のデータは初期化してないとうまく確保されない)
|
43
49
|
#pragma data_seg("share")
|
44
50
|
HHOOK hHookWnd = NULL;
|
45
51
|
HINSTANCE hdll = NULL;
|
46
52
|
HWND hTarget = NULL;
|
47
|
-
volatile static bool runHooked = false;
|
53
|
+
volatile static bool runHooked = false;
|
48
54
|
#pragma data_seg()
|
49
55
|
|
50
|
-
|
51
|
-
volatile static bool runHooked = false; //<=ここでもだめ
|
52
56
|
// フックを組み込む
|
53
57
|
int CALLBACK CloseHook32_MsgLoop(HWND HandleofTarget)
|
54
58
|
{
|
@@ -63,13 +67,22 @@
|
|
63
67
|
|
64
68
|
MSG msg;
|
65
69
|
runHooked = true;
|
66
|
-
while(runHooked) { //メッセージループ(ポンプ)
|
67
|
-
|
70
|
+
//Loop
|
71
|
+
while(runHooked)
|
72
|
+
{
|
68
|
-
|
73
|
+
if( PeekMessage(&msg, nullptr, 0, 0, PM_NOREMOVE))
|
74
|
+
{
|
75
|
+
if (GetMessage(&msg, NULL, 0, 0) > 0)
|
76
|
+
{ // GetMessageでPeekMessageで確認したメッセージを取得.
|
69
|
-
|
77
|
+
TranslateMessage(&msg);
|
70
|
-
|
78
|
+
DispatchMessage(&msg);
|
71
|
-
|
72
|
-
|
79
|
+
Sleep(10);
|
80
|
+
}
|
81
|
+
else
|
82
|
+
{
|
83
|
+
break;
|
84
|
+
}
|
85
|
+
}
|
73
86
|
}
|
74
87
|
|
75
88
|
int ans = UnhookWindowsHookEx(hHwnd);
|
3
間違いを見つけた
title
CHANGED
File without changes
|
body
CHANGED
@@ -62,7 +62,7 @@
|
|
62
62
|
}
|
63
63
|
|
64
64
|
MSG msg;
|
65
|
-
runHooked =
|
65
|
+
runHooked = true;
|
66
66
|
while(runHooked) { //メッセージループ(ポンプ)
|
67
67
|
// Keep pumping...
|
68
68
|
PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE);
|
@@ -89,6 +89,6 @@
|
|
89
89
|
|
90
90
|
void CALLBACK UnCloseHook32_MsgLoop(void)
|
91
91
|
{
|
92
|
-
runHooked=
|
92
|
+
runHooked=false;
|
93
93
|
}
|
94
94
|
```
|
2
デバック時のコードだった
title
CHANGED
File without changes
|
body
CHANGED
@@ -62,7 +62,7 @@
|
|
62
62
|
}
|
63
63
|
|
64
64
|
MSG msg;
|
65
|
-
runHooked =
|
65
|
+
runHooked = false;
|
66
66
|
while(runHooked) { //メッセージループ(ポンプ)
|
67
67
|
// Keep pumping...
|
68
68
|
PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE);
|
1
情報の追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -26,4 +26,69 @@
|
|
26
26
|
32Bitプロセスから64Bitのアプリを直接制御できるようなのですが、
|
27
27
|
どなたかご存知の方はいらっしゃらないでしょうか?
|
28
28
|
|
29
|
-
宜しくお願い致します。
|
29
|
+
宜しくお願い致します。
|
30
|
+
|
31
|
+
追加記載
|
32
|
+
キーボードのグローバルフックですが、同じようなことをしている記事を
|
33
|
+
見つけましたので、URL等を追記します。
|
34
|
+
https://stackoverflow.com/questions/15542783/global-keyhook-on-64-bit-windows
|
35
|
+
|
36
|
+
ただ上記記事を元に、コードを修正してみましたがまだ動きません。
|
37
|
+
32BitExeから32BitDLL=>32Bitプロセスへフックはかかりますが、解除が動きません。
|
38
|
+
32BitExeから32BitDLL=>64Bitプロセスへは、フック事態が動きません。
|
39
|
+
引き続き調べてみたいと思います。
|
40
|
+
|
41
|
+
```C++
|
42
|
+
// 共有領域(共有領域のデータは初期化してないとうまく確保されない)
|
43
|
+
#pragma data_seg("share")
|
44
|
+
HHOOK hHookWnd = NULL;
|
45
|
+
HINSTANCE hdll = NULL;
|
46
|
+
HWND hTarget = NULL;
|
47
|
+
volatile static bool runHooked = false; //<=現状共有領域でも正常にUnHookができない
|
48
|
+
#pragma data_seg()
|
49
|
+
|
50
|
+
|
51
|
+
volatile static bool runHooked = false; //<=ここでもだめ
|
52
|
+
// フックを組み込む
|
53
|
+
int CALLBACK CloseHook32_MsgLoop(HWND HandleofTarget)
|
54
|
+
{
|
55
|
+
if(hdll == NULL) return 99;
|
56
|
+
hTarget = HandleofTarget;
|
57
|
+
HHOOK hHwnd=SetWindowsHookEx(WH_CBT,(HOOKPROC)CallWndProc, hdll, 0);
|
58
|
+
|
59
|
+
if(hHwnd == NULL)
|
60
|
+
{
|
61
|
+
return 100;
|
62
|
+
}
|
63
|
+
|
64
|
+
MSG msg;
|
65
|
+
runHooked = true;
|
66
|
+
while(runHooked) { //メッセージループ(ポンプ)
|
67
|
+
// Keep pumping...
|
68
|
+
PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE);
|
69
|
+
TranslateMessage(&msg);
|
70
|
+
DispatchMessage(&msg);
|
71
|
+
|
72
|
+
Sleep(10);
|
73
|
+
}
|
74
|
+
|
75
|
+
int ans = UnhookWindowsHookEx(hHwnd);
|
76
|
+
|
77
|
+
hHwnd = NULL;
|
78
|
+
|
79
|
+
if(ans == 0)
|
80
|
+
{
|
81
|
+
return ans;
|
82
|
+
}
|
83
|
+
else
|
84
|
+
{
|
85
|
+
return ans;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
|
90
|
+
void CALLBACK UnCloseHook32_MsgLoop(void)
|
91
|
+
{
|
92
|
+
runHooked=true;
|
93
|
+
}
|
94
|
+
```
|