Holy cow, I wrote a book!
Nothing is explicitly written about this topic, but you can
put on your logic cap and figure it out.
If you need an invalid thread ID, you can use zero.
How do you know that zero is an invalid thread ID?
It's implied by
Notice that if you pass zero, then the hook is installed into
all threads on the current desktop.
This implies that zero is not itself a valid thread ID.
This sentinel value is confirmed by
GetThreadID, which uses zero as its error return value.
Similarly, if you need an invalid process ID, you can use (DWORD)-1.
This comes from
The value ASFW_ANY has special meaning,
which implies that it is never a valid process ID.
Or, you can use zero as your invalid process ID,
since that is the error value returned by