利用PostMessage发送消息到这个进程?

解决方案 »

  1.   

    http://www.codeguru.com/system/index.shtml
    的process part.
      

  2.   

    用这几个试一试
    CreateToolhelp32Snapshot
    Process32First
    Process32Next
      

  3.   

    我是想在一个应用程序的界面上面模拟鼠标单击事件,先将鼠标移动到指定的位置,然后发送鼠标Clicked的事件。
      

  4.   

    如果是想得到进程的ID的话,可以用FINDWINDOW()进行枚举就可以了,不过要先得到桌面的HWND,GETDESKTOPWINDOW()
      

  5.   

    同意Wargod2002(Wargod2002)
    我做过,是要这么做的。
      

  6.   

    楼上的兄弟,我能枚举得到各个进程的ID,只是通过这些ID利用EnumWindows得不到窗口句柄
      

  7.   

    BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lparam)
    {
    DWORD ProcId;
    DWORD ThreadId;
    ThreadId=GetWindowThreadProcessId(hwnd,&ProcId)
    if(ProcId==your process ID)
    {
    HWND targetWin;   //进程主窗口
    targetWin=hwnd;
    while(true)
    {
    HWND hTemp;
    hTemp=GetParent(targetWin);
    if(hTemp==NULL)
    break;
    else
    targetWin=hTemp;
    }
    return FALSE;
    }
    else
    return true;
    }EnumWindows(EnumWindowsProc,0);
      

  8.   

    BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lparam)
    {
    DWORD ProcId;
    DWORD ThreadId;
    ThreadId=GetWindowThreadProcessId(hwnd,&ProcId)
    if(ProcId==your process ID)
    {
    HWND targetWin;   //进程主窗口
    targetWin=hwnd;
    while(true)
    {
    HWND hTemp;
    hTemp=GetParent(targetWin);
    if(hTemp==NULL)
    break;
    else
    targetWin=hTemp;
    }
    return FALSE;
    }
    else
    return true;
    }EnumWindows(EnumWindowsProc,0);
      

  9.   

    webber84(糕鱼昏) 
    我得代码和你得一样,在
    hTemp=GetParent(targetWin);
    每次得到得都是空值
      

  10.   

    targetWin就是属于你那个进程的一个顶层窗口呵。
      

  11.   

    void CProcessDlg::OnFresh() 
    {
    // TODO: Add your control notification handler code here
    m_wndList.ResetContent();
    HANDLE hSnapshot; // 创建一快照句柄
    hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    PROCESSENTRY32 pe;
    Process32First(hSnapshot,&pe); // 先搜索系统中的第一个进程信息
    do // 下面对系统中的所有信息进行过滤,并保存其信息
    { int index=m_wndList.AddString(pe.szExeFile); // 把进程对应的文件路径填入列表框
      m_wndList.SetItemData(index, pe.th32ProcessID); // 设置列表框中该项的Data号为相应的进程的ID号,利于以后终止该进程。
    }while(Process32Next(hSnapshot,&pe));CloseHandle(hSnapshot); // 关闲快照句柄
    GetDlgItem(IDC_STOP)->EnableWindow(FALSE); // 由于此时列表框中尚未有选择,故按纽IDC_STOP的状态应为Disable
    }void CProcessDlg::OnStop() //
    {
    // TODO: Add your control notification handler code here
    int index=m_wndList.GetCurSel(); // 获取此时列表框中的所选项
    DWORD data=m_wndList.GetItemData(index); // 获取所选项的的数据,即该项对应的进程ID
    HANDLE hProcess;
    hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,data); // 利用进程ID值,打开该进程,获得进程句柄,PROCESS_TERMINATE表示可以用 TerminateProcess() 函数来终止该进程。
    if(hProcess)
       TerminateProcess(hProcess,0); 
    else
       MessageBox("=== 该进程可能已被终止 ===");
    Sleep(500); // 延迟一段时间,以便系统正确响应
    OnFresh();

    }
      

  12.   

    webber84(糕鱼昏) 我曾经试图发消息到targetWin,但是,好像没有什么反映的。
      

  13.   

    没反应?调用IsWindow(targetWin),看它是不是一个窗口。
      

  14.   

    cwkxm(cwkxm) 
    你这个是具体干什么呢?