Crawl.W 2015-08-04 03:34 采纳率: 75%
浏览 2114
已采纳

今天写代码给360安全浏览器窗口发消WM_CLOSE息竟然它不睬我,想问问大神怎么回事?

想想这种情况应该是不可能的,浏览器在windows系统下运作可以不听操作系统的命令?怎么可能,只可能我获得的东西不正确

void CtestDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
STARTUPINFO suInfo;
PROCESS_INFORMATION procInfo;

memset (&suInfo, 0, sizeof(suInfo));
suInfo.cb = sizeof(suInfo);
suInfo.dwFlags = STARTF_USESHOWWINDOW;
suInfo.wShowWindow = TRUE;
CHAR chCmdLine[] = " http://www.baidu.com/";

HKEY key = NULL;
CHAR szXplorer[MAX_PATH];
DWORD dwBufLen;
DWORD type = REG_SZ;

ZeroMemory(szXplorer,MAX_PATH);

if(ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CLASSES_ROOT,
    "http\\shell\\open\\command",
    0,
    KEY_QUERY_VALUE,
    &key))
{
    LONG lRet;
    lRet = ::RegQueryValueEx(key,NULL,NULL,&type,(LPBYTE)szXplorer,&dwBufLen);
    if(lRet == ERROR_SUCCESS)
        strcat(szXplorer, chCmdLine);
    RegCloseKey(key);
}

BOOL bRet = CreateProcess(NULL/*"C://Program Files//360Chrome//Chrome//Application//360chrome.exe"*//*"c://program files//internet explorer//iexplore.exe"*/,
    szXplorer, NULL, NULL, false,
    NORMAL_PRIORITY_CLASS, NULL, NULL, &suInfo, &procInfo);
if(bRet)
{
    CloseHandle(procInfo.hThread);
    CloseHandle(procInfo.hProcess);
}

m_dwProcessId = procInfo.dwProcessId;

}

void CtestDlg::OnBnClickedButton2()
{
// TODO: Add your control notification handler code here
HANDLE handle = OpenProcess(SYNCHRONIZE | PROCESS_TERMINATE, FALSE, m_dwProcessId);
EnumWindows(EnumWindowsProc, m_dwProcessId);
CloseHandle(handle);
}

BOOL CALLBACK CtestDlg::EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
DWORD wndPid;
CString Title;
// lParam = procInfo.dwProcessId;

// This gets the windows handle and pid of enumerated window.
GetWindowThreadProcessId(hwnd, &wndPid);

// This gets the windows title text
// from the window, using the window handle
CWnd::FromHandle( hwnd )->GetWindowText(Title);

//  this makes sure that the PID matches that PID we started, and window
// text exists, before we kill it . I don't think this is really needed, 
// I included it because some apps have more than one window.
if ( wndPid == (DWORD)lParam && Title.GetLength() != 0)
{
    //  Please kindly close this process
    ::PostMessage(hwnd, WM_CLOSE, 0, 0);
    return false;
}
else
{
    // Keep enumerating
    return true;
}

}


  • 写回答

4条回答 默认 最新

  • 纵横车 2015-08-06 04:02
    关注

    是不是没取对句柄?用spy++看看。或者试试其他几个关闭的消息WM_DESTROY ,WM_CLOSE,WM_QUIT。或者发送鼠标点击消息,参数传关闭按钮的坐标。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图