How to call
IShellWindows::FindWindowSW with swClass=SWC_BROWSER to get a browser window from a cookie (swfwOptions=SWFO_COOKIEPASSED)? Note that if you don't know, it is unlikely you can guess.
The attached project has a C++ managed program that calls FindWindowSW in unmanged code. I am hoping to get an unmanaged program working so I can do the corresponding in managed code; especially C#.
The FindWindowSW documentation says that pvarLoc is a "VARIANT of type VT_VARIANT | VT_BYREF" but it has been suggested that for a cookie just use a VT_I4 without redirection. I have tried many combinations and nothing that I have tried works.
The attached program uses
DShellWindowsEvents.WindowRegistered in managed code to monitor IE windows to get cookie values. When a new window opens, it calls FindWindowSW in unmanaged code.
The following is a simplified version of how I am calling FindWindowSW. The commented code shows some of the combinations I have tried.
const int Options = SWFO_COOKIEPASSED | SWFO_NEEDDISPATCH | SWFO_INCLUDEPENDING;
//VARIANT CookieVariant;
//CookieVariant.vt = VT_I4;
//CookieVariant.lVal = Cookie;
//VARIANT pvarLoc;
//pvarLoc.vt = VT_VARIANT | VT_BYREF;
//pvarLoc.pvarVal = &CookieVariant;
VARIANT pvarLoc;
pvarLoc.vt = VT_I4;
pvarLoc.lVal = Cookie;
_variant_t Empty;
hr = pshellws->FindWindowSW(&pvarLoc, &Empty, 0xFFFF/*SWC_BROWSER*/, &hwnd, Options, &dp);