Re: Flash Player Launching Process With CreateProcess
Alex Blekhman ("%s@%s.%s", strrev"xfkt" "yahoo", "com") wrote:
Jay wrote:
Hey There,
I have been writing some code in C++ that gets a
message from a Macromedia Flash Player to launch an
application that is associated with a flash button. When
the button is pressed, it launches the application, but
the app window is never completely in front. The C++ code
that I have been using to do this is below:
retVal =
CreateProcess(NULL,modName,NULL,NULL,FALSE,NULL,NULL,NULL,&s
i,&pi);
hProc = pi.hProcess;
procID = pi.dwProcessId;
HPStruct.procID = procID;
HPStruct.WindHandle = 0;
fp = fopen(THREAD_LOG_FILE,"a+");
fprintf(fp,"ProcID=%d\n",procID);
fclose(fp);
WaitForInputIdle(hProc,INFINITE);
EnumWindows((WNDENUMPROC)EnumOpenWindows,(LPARAM)&HPStruct);
fp = fopen(THREAD_LOG_FILE,"a+");
fprintf(fp,"After EnumWindows \n");
fclose(fp);
if(HPStruct.WindHandle != 0)
{
ShowWindow(HPStruct.WindHandle,SW_SHOWMAXIMIZED);
retVal = BringWindowToTop(HPStruct.WindHandle);
}
Is there something with the flash player that
stops the app from being in front? When I have other
windows open and launch the app, it will always be in
front of any other window BUT the flash player window.
Any suggestions?
New process is not foreground process. That's why
BringWindowToTop cannot overcome currently foreground
process. First, you need to relinquish your foreground
rights in favor of new process, then bring new window to
front. Read more about it in SetForegroundWindow and
AllowSetForegroundWindow functions description.
HTH
Alex
Hey There,
I tried to implement the suggestion you made, by inserting the code
for the foreground window, as shown below:
if(HPStruct.WindHandle != 0)
{
//ShowWindow(HPStruct.WindHandle,SW_SHOWMAXIMIZED);
retVal = AllowSetForegroundWindow(procID);
errNo = GetLastError();
if(retVal == FALSE)
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM, NULL, errNo,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPSTR)&lpvMessageBuffer, 0, NULL);
fprintf(fp,"AllowSetForegroundWindow error=%s\n",lpvMessageBuffer);
}
retVal = SetForegroundWindow(HPStruct.WindHandle);
errNo = GetLastError();
if(retVal == FALSE)
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM, NULL, errNo,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPSTR)&lpvMessageBuffer, 0, NULL);
fprintf(fp,"AllowSetForegroundWindow error=%s\n",lpvMessageBuffer);
}
The AllowSetForegroundWindow though returns with an "Access is denied."
error. Can anyone tell me why this is the case, and what can be done to
allow it to be set to the foreground?
Thanks,
Jay
(patelj27b at gmail dot com)