Skip to content

Commit d656baa

Browse files
committed
(#17) Updated Windows implementation
1 parent c76079f commit d656baa

File tree

3 files changed

+25
-17
lines changed

3 files changed

+25
-17
lines changed

src/main.cc

+5-2
Original file line numberDiff line numberDiff line change
@@ -684,8 +684,10 @@ Napi::Array _getWindows(const Napi::CallbackInfo &info) {
684684

685685
Napi::Object _getWindowRect(const Napi::CallbackInfo &info) {
686686
Napi::Env env = info.Env();
687+
688+
WindowHandle windowHandle = info[0].As<Napi::Number>().Int64Value();
689+
MMRect windowRect = getWindowRect(windowHandle);
687690

688-
MMRect windowRect = getWindowRect(info[0].As<Napi::Number>().Int64Value());
689691
Napi::Object obj = Napi::Object::New(env);
690692
obj.Set(Napi::String::New(env, "x"), Napi::Number::New(env, windowRect.origin.x));
691693
obj.Set(Napi::String::New(env, "y"), Napi::Number::New(env, windowRect.origin.y));
@@ -698,7 +700,8 @@ Napi::Object _getWindowRect(const Napi::CallbackInfo &info) {
698700
Napi::String _getWindowTitle(const Napi::CallbackInfo &info) {
699701
Napi::Env env = info.Env();
700702

701-
return Napi::String::New(env, getWindowTitle(info[0].As<Napi::Number>().Int64Value()));
703+
WindowHandle windowHandle = info[0].As<Napi::Number>().Int64Value();
704+
return Napi::String::New(env, getWindowTitle(windowHandle));
702705
}
703706

704707
Napi::Object _captureScreen(const Napi::CallbackInfo &info)

src/win32/window_manager.cc

+18-13
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,39 @@
22
#include <windows.h>
33

44
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam) {
5-
std::vector<int64_t>* windowHandles = reinterpret_cast<std::vector<int64_t>*>(lparam);
5+
std::vector<WindowHandle>* windowHandles = reinterpret_cast<std::vector<WindowHandle>*>(lparam);
66
if (windowHandles != nullptr) {
7-
windowHandles->push_back(reinterpret_cast<int64_t>(hwnd));
7+
windowHandles->push_back(reinterpret_cast<WindowHandle>(hwnd));
88
}
99
return TRUE;
1010
}
1111

12-
std::vector<int64_t> getWindows() {
13-
std::vector<int64_t> windowHandles;
12+
std::vector<WindowHandle> getWindows() {
13+
std::vector<WindowHandle> windowHandles;
1414

1515
EnumWindows (&EnumWindowsProc, reinterpret_cast<LPARAM>(&windowHandles));
1616

1717
return windowHandles;
1818
}
1919

20-
MMRect getWindowRect(const int64_t windowHandle) {
20+
MMRect getWindowRect(const WindowHandle windowHandle) {
2121
HWND hWnd = reinterpret_cast<HWND>(windowHandle);
2222
RECT windowRect;
23-
GetWindowRect(hWnd, &windowRect);
24-
return MMRectMake(windowRect.left, windowRect.top, windowRect.right - windowRect.left, windowRect.bottom - windowRect.top);
23+
if (GetWindowRect(hWnd, &windowRect)) {
24+
return MMRectMake(windowRect.left, windowRect.top, windowRect.right - windowRect.left, windowRect.bottom - windowRect.top);
25+
}
26+
return MMRectMake(0, 0, 0, 0);
2527
}
2628

27-
std::string getWindowTitle(const int64_t windowHandle) {
29+
std::string getWindowTitle(const WindowHandle windowHandle) {
2830
HWND hWnd = reinterpret_cast<HWND>(windowHandle);
2931
auto BUFFER_SIZE = GetWindowTextLength(hWnd) + 1;
30-
LPSTR windowTitle = new CHAR[BUFFER_SIZE];
31-
32-
GetWindowText(hWnd, windowTitle, BUFFER_SIZE);
33-
34-
return std::string(windowTitle);
32+
if (BUFFER_SIZE) {
33+
LPSTR windowTitle = new CHAR[BUFFER_SIZE];
34+
if (GetWindowText(hWnd, windowTitle, BUFFER_SIZE)) {
35+
return std::string(windowTitle);
36+
}
37+
return "";
38+
}
39+
return "";
3540
}

src/window_manager.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
std::vector<WindowHandle> getWindows();
1010

11-
std::string getWindowTitle(const int64_t windowHandle);
12-
MMRect getWindowRect(const int64_t windowHandle);
11+
std::string getWindowTitle(const WindowHandle windowHandle);
12+
MMRect getWindowRect(const WindowHandle windowHandle);
1313

1414
#endif

0 commit comments

Comments
 (0)