Mercurial > minori
comparison dep/animia/src/win/win32.cc @ 153:bd439dd6ffc5
*: make win stuff actually work, rename bsd.cc to xnu.cc
It's been OS X only for ages, and these functions are different between
most BSDs anyway
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Wed, 15 Nov 2023 13:28:18 -0500 |
| parents | 8700806c2cc2 |
| children | cdf79282d647 |
comparison
equal
deleted
inserted
replaced
| 152:8700806c2cc2 | 153:bd439dd6ffc5 |
|---|---|
| 15 // WNDCLASSEX structure | 15 // WNDCLASSEX structure |
| 16 constexpr int kMaxSize = 256; | 16 constexpr int kMaxSize = 256; |
| 17 | 17 |
| 18 std::wstring buffer(kMaxSize, L'\0'); | 18 std::wstring buffer(kMaxSize, L'\0'); |
| 19 const auto size = ::GetClassNameW(hwnd, &buffer.front(), buffer.length()); | 19 const auto size = ::GetClassNameW(hwnd, &buffer.front(), buffer.length()); |
| 20 /* for some reason GetClassName returns the actual size of the buffer *with* the | |
| 21 terminating NULL byte */ | |
| 22 buffer.resize(size); | |
| 20 return buffer; | 23 return buffer; |
| 21 } | 24 } |
| 22 | 25 |
| 23 static std::wstring GetWindowText(HWND hwnd) { | 26 static std::wstring GetWindowText(HWND hwnd) { |
| 24 const int size = ::GetWindowTextLengthW(hwnd); | 27 const int estimated_size = ::GetWindowTextLengthW(hwnd); |
| 25 | 28 |
| 26 std::wstring buffer(size, L'\0'); | 29 std::wstring buffer(estimated_size + 1, L'\0'); |
| 27 ::GetWindowTextW(hwnd, &buffer.front(), buffer.length()); | 30 const auto size = ::GetWindowTextW(hwnd, &buffer.front(), buffer.length()); |
| 31 /* GetWindowTextLength docs: | |
| 32 "Under certain conditions, the GetWindowTextLength function may return a value | |
| 33 that is larger than the actual length of the text." */ | |
| 34 buffer.resize(size); | |
| 28 return buffer; | 35 return buffer; |
| 29 } | 36 } |
| 30 | 37 |
| 31 static DWORD GetWindowProcessId(HWND hwnd) { | 38 static DWORD GetWindowProcessId(HWND hwnd) { |
| 32 DWORD process_id = 0; | 39 DWORD process_id = 0; |
| 53 // Note that this function requires Windows Vista or above. You may use | 60 // Note that this function requires Windows Vista or above. You may use |
| 54 // GetProcessImageFileName or GetModuleFileNameEx on earlier versions. | 61 // GetProcessImageFileName or GetModuleFileNameEx on earlier versions. |
| 55 if (!::QueryFullProcessImageNameW(process_handle.get(), 0, &buffer.front(), &buf_size)) | 62 if (!::QueryFullProcessImageNameW(process_handle.get(), 0, &buffer.front(), &buf_size)) |
| 56 return std::wstring(); | 63 return std::wstring(); |
| 57 | 64 |
| 58 return buffer.substr(0, buf_size + 1); | 65 buffer.resize(buf_size); |
| 66 return buffer; | |
| 59 } | 67 } |
| 60 | 68 |
| 61 //////////////////////////////////////////////////////////////////////////////// | 69 //////////////////////////////////////////////////////////////////////////////// |
| 62 | 70 |
| 63 static bool VerifyWindowStyle(HWND hwnd) { | 71 static bool VerifyWindowStyle(HWND hwnd) { |
