33 Commits

Author SHA1 Message Date
jpark37
40cea9ca50 win-capture: Remove dependency on psapi.lib 2021-09-12 14:10:36 -07:00
jpark37
484084abb5 win-capture: Clean up remaining /W4 warnings 2020-11-15 06:03:18 -08:00
jpark37
4ec9081f3a win-capture: Don't use Chrome classes for priority
Avoids accidental fallback to Discord for example.
2020-07-03 00:12:21 -07:00
Richard Stanway
50e1d17615 win-capture: Better matching of internal UWP windows
All strings were treated as partial matches before, which caused a
false positive with any executable beginning with "time", notably
affecting the game "Timelie" which used Timelie.exe.
2020-05-23 01:50:38 +02:00
jpark37
e933e20b7c win-capture: Ignore cloaked windows
Fixes issue where there are two window handles for minimized Calculator,
and OBS picks the wrong one.
2020-05-17 10:45:10 -07:00
jp9000
465174413a win-capture: Remove microsoft store from capture blacklist 2020-03-06 21:53:53 -08:00
jpark37
d4ca08c4c7 win-capture: Add support for finding windows via EnumWindows
The top-level window appears to be preferred for upcoming Windows
Graphics Capture support, at least for UWP apps.
2020-02-22 21:02:33 -08:00
Joel Bethke
6fb3552d70 win-capture: Add additional exe to window capture blacklist
These are additional internal windows processes that should not
be listed in the window capture dropdown.
2019-10-16 19:47:43 -05:00
jp9000
f53df7da64 clang-format: Apply formatting
Code submissions have continually suffered from formatting
inconsistencies that constantly have to be addressed.  Using
clang-format simplifies this by making code formatting more consistent,
and allows automation of the code formatting so that maintainers can
focus more on the code itself instead of code formatting.
2019-06-23 23:49:10 -07:00
jp9000
a4e8b93653 win-capture: Add a few more blacklisted capture exes 2019-02-04 18:16:43 -08:00
jp9000
da1f84133e win-capture: Do not capture "explorer.exe" with null titles 2019-02-04 18:16:43 -08:00
jp9000
2e0d237341 win-capture: Fix and clarify window capture prioritization
Changes "class" prioritization to attempt to find the window either with
the same title, or the next window of the same window class (window
type), changes "title" prioritization to only find the window based
upon its title, and changes "executable" prioritization to attempt to
find the window with the same title, or the next window of the same
executable.

Additionally changes the text associated with these selections to
clarify that functionality to users.
2017-04-30 00:25:02 -07:00
jp9000
eb90b7dfff win-capture: Fall back to GetWindow if FindWindowEx fails
When kaspersky is installed on windows 7, FindWindowEx will fail to find
any windows due to apparently being blocked by kaspersky, so detect when
that happens, and fall back to GetWindow instead if it does.
2017-02-21 00:42:14 -08:00
jp9000
839e593e77 Revert "Revert "win-capture: Use FindWindowEx to traverse window list""
This reverts commit f4d7f0cbbaf064d66b6945813aae11ce343c713b.

Never thought a revert of a revert would happen.
2017-01-18 20:18:28 -08:00
jp9000
f4d7f0cbba Revert "win-capture: Use FindWindowEx to traverse window list"
This reverts commit bd67c18c022f6a01ba054ecd77ba176359f33f73.

Causes performance issues when the window isn't found.  The situation it
fixes is also very rare anyway.
2017-01-16 03:22:12 -08:00
jp9000
ad72194090 win-capture: Do not add certain windows to window lists
Due to using FindWindowEx to search for certain windows, certain windows
will show up that aren't usable/capturable.  Prevent these windows from
showing up in the window lists.
2016-12-23 02:15:59 -08:00
jp9000
4fe2ca0f75 win-capture: Fix possible null pointer dereference 2016-12-23 02:04:26 -08:00
jp9000
bd67c18c02 win-capture: Use FindWindowEx to traverse window list
For some unknown reason, GetWindow will not traverse the entire window
tree.  It could be due to Microsoft purposely hiding certain UWP
windows, though the reason is unknown.  For some equally unknown reason
FindWindowEx does work in its place.

This fixes the issue of not being able to find/capture certain windows,
such as halo 5: forge.
2016-12-23 01:53:44 -08:00
jp9000
68a8a5bf2b win-capture: Do not fall back to other windows for UWP windows
If capturing a UWP window, do not fall back to matching windows with the
same window class if the exact window is not found, as this will get any
other UWP window on the system (due to the fact that they all have the
same window class name).
2016-12-16 14:06:05 -08:00
jp9000
1e48b522fa win-capture: Fix getting proper UWP window handles
The "main" windows detected for UWP programs are basically to help
sandbox the programs -- they run in the ApplicationFrameHost process and
help reduce the possibility of other programs trying to access the
actual process window, which is a child window.

To bypass this, go through the list of child windows for the
ApplicationFrameHost window, and then find the one that's attached to
a different process; that different process will always be the target,
and will allows us to open the actual process of the UWP program.
2016-12-16 02:21:05 -08:00
jp9000
bf166c07f4 win-capture: Blacklist specific executables from game capture
Prevents the common problem of injecting in to certain processes and
getting the hook DLL "stuck":
- windows explorer
- steam
- battle.net
- gog galaxy
- skype
- uplay
- origin
- microsoft visual studio
- task manager
- league of legends lobby window
- windows 10 system settings window
2016-07-30 13:04:53 -07:00
jp9000
383c96744e win-capture: Expose helper funcs to get win. class/title 2016-07-30 11:24:39 -07:00
jp9000
2707f05c46 Revert "win-capture: Allow window capturing of current process"
This reverts commit 8d520b970d3552417005f6dab4f0892485cd14ce.

This can actually cause a hard lock due to the windows API when
destroying window capture.  When the graphics thread locks the source
list for doing tick or render, and then the UI thread tries to destroy a
source, the UI thread will wait for the graphics thread to complete
rendering/ticking of sources.  The video_tick of window capture would
then check windows in the same process and try to query the window's
name via GetWindowText.  However, GetWindowText is synchronous, and will
not return until the window event has been processed by the UI thread,
so it will perpetually lock because the two threads are waiting for each
other to finish.
2016-05-13 04:21:39 -07:00
jp9000
8d520b970d win-capture: Allow window capturing of current process
Allows window capture to capture windows of the current process, and
adds windows of the current process to the end of the window list.
2016-05-13 02:14:24 -07:00
Richard Stanway
7630946874 win-capture: Check return values on Windows API functions 2015-10-12 23:21:45 +02:00
Richard Stanway
8f2460525f win-capture: Fix buffer overrun in get_window_class
Detected by Coverity Scan (CID 12856)
2015-10-12 23:21:44 +02:00
jp9000
883d93e84c win-dshow: Remove unnecessarily inline define
This is already defined when including libobs headers
2015-02-09 03:55:31 -08:00
jp9000
428a7def16 win-capture: Use PSAPI GetProcessImageFileName
If the PSAPI_VERSION macro is not set to 1 when using
GetProcessImageFileName, it will attempt to import it as
K32GetProcessImageFileName from kernel32.dll instead of psapi.dll, which
breaks compatibility with vista and xp.
2015-01-07 05:26:32 -08:00
jp9000
dcae2a0624 win-capture: Expose get_window_exe as extern
This allows get_window_exe to be used with other .c files in the module.
2014-12-08 01:53:53 -08:00
jp9000
5e2eef6231 win-capture: Fix a bug with INCLUDE_MINIMIZED
This fixes a bug where if INCLUDE_MINIMIZED was set and the window size
was (0, 0), the window would still be excluded from the resulting list
that was created.
2014-12-08 01:53:52 -08:00
jp9000
422c6ffe86 win-capture: Obfuscate OpenProcess in win-helpers
OpenProcess can often be misinterpreted as invasive.  To avoid it, a
simple obfuscation workaround does the trick.
2014-12-08 01:53:52 -08:00
jp9000
7bf69e8a0a win-capture: Always set class/title/exe to null
When getting the class/title/exe of a particular window handle in the
build_window_strings function, always set the class/title/exe pointers
to null to prevent any potential references to invalid values if any of
them do not happen to be set for whatever reason.
2014-12-08 01:53:51 -08:00
jp9000
9898060223 win-capture: Separate window finding source code
Because other capture methods may end up needing to share this code,
separate the window finding source code to window-helpers.c and
window-helpers.h.

This include a function to fill out a property list with windows, a
function to find a window based upon priority/title/class/exe, and a
function to decode the window title/class/exe strings from a window
setting string.
2014-10-17 04:15:57 -07:00