Pergunta

Eu estou tentando começar iexplore.exe deixá-lo correr por 5 segundos e, em seguida, fechá-lo novamente.

iexplore abre muito bem no entanto, ele não fecha quando eu chamar o PostThreadMessage. qualquer um pode ver o que estou fazendo de errado? Aqui está o meu código:

CString IEPath = "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE";//GetIEPath();
//IEPath += ' ' + url;
std::string strCommand((LPCTSTR)IEPath);
PROCESS_INFORMATION    procinfo;
STARTUPINFO    startupinfo;    
GetStartupInfo(&startupinfo);

CreateProcess(
        NULL,       
        (char *)strCommand.c_str(),// name of executable module
        NULL,           // lpProcessAttributes
        NULL,           // lpThreadAttributes
        false,          // handle inheritance option
        CREATE_SHARED_WOW_VDM,              // creation flags
        NULL,           // new environment block
        NULL,           // current directory name
        &startupinfo,    // startup information
        &procinfo        // process information
        );


Sleep(5000);
    ::PostThreadMessage(procinfo.dwThreadId, WM_QUIT, 0, 0); //<---Dosent Close internet explorer!

Alguém tem uma idéia do que estou fazendo de errado? Ou há maneira melhor do que fazer o truque?

Foi útil?

Solução

Se você pode enumerar as janelas na área de trabalho e enviar uma WM_CLOSE para a janela do IE, ele poderia funcionar .. você pode usar o programa de espionagem para obter a classe de janela da janela do IE

Outras dicas

O que é o valor de retorno da chamada PostThreadMessage? Isso pode dar uma pista.

Para mim, isso funciona perfeito:

TerminateProcess(procinfo.hProcess, 0);

Tente enviar WM_CLOSE para a janela principal (de nível superior). Isso é equivalente à saída normal Alt-F4.

Eu não tenho uma resposta especificamente porque PostThreadMessage não funcionou. Mas, talvez, se você elaborar sobre por que você quer fazer isso, não há uma solução melhor?

Por exemplo, se você só quer mostrar uma página web por 5 segundos, você pode criar e mostrar sua própria janela com um controle ActiveX do Internet Explorer embutido. Você será também capaz de adicionar uma pia para detectar quando a página é carregada no controle ActiveX, para que você começar o seu 5-segundo contador somente após a página é carregada e exibida.

Acabei fazendo uma enumeração das janelas (Como serval de você mencionou que eu deveria fazer) Eu fui inspirado de http://simplesamples.info/Windows/EnumWindows.php .

Não use PostThreadMessage (), que envia uma mensagem para uma linha específica no processo de destino, em vez do processo de bomba de mensagem do Windows. Use PostMessage () ou SendMessage () ao invés, o que coloca a mensagem na bomba de mensagens do Windows o processo do alvo -. Que é exatamente o que você quer

Não, nunca use SendMessage () (básico win32 regra) Não use EnmWindows () (horrível)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top