比如进程里有flashget.exe进程,怎么获得他的句柄,
可不可以详细点回答,我很菜的。谢谢

解决方案 »

  1.   

    调用序列:1 CreateToolhelp32Snapshot创建快照
    2 Process32First和Process32Next,轮询找到你的目标进程,获取其ID
    3 用OpenProcess打开,获得进程句柄具体函数用法可以参考MSDN,此处从略。
      

  2.   

    OpenProcess里有个PID参数,但是这个参数在每次重启的时候有可能会不同啊
      

  3.   

    DWORD GetFlashget()
    {
    HANDLE m_handle=::CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
    PROCESSENTRY32* Info = new PROCESSENTRY32;
    Info->dwSize = sizeof(PROCESSENTRY32);
    if(::Process32First(m_handle,Info))
    {
    while(::Process32Next(m_handle,Info)!=FALSE)
    {
    CString ss;
    ss=Info->szExeFile;
    ss.MakeLower();
    if(ss.Find("flashget") != -1)
    {
    return Info->th32ProcessID;
    }
    }
    ::CloseHandle(m_handle);
    if(Info)
    {
    delete Info;
    }
    }
    return -1;
    }
      

  4.   

    D:\Utilities\UtilitiesDlg.cpp(178) : error C2039: 'CreateToolhelp32Snapshot' : is not a member of '`global namespace''
    D:\Utilities\UtilitiesDlg.cpp(178) : error C2065: 'CreateToolhelp32Snapshot' : undeclared identifier晕,编译的时候出这样的问题
      

  5.   

    我建的是MFC EXE工程,默认已经包含了
      

  6.   

    哦,是MFC咯,那再加上这个就可以了:(经过测试,绝对可以:))
    #include "tlhelp32.h"
      

  7.   

    真的,可以了,谢谢了
    HANDLE和HWND怎么转,现在要对flashget操作,比如最大化。
    提示“cannot convert parameter 1 from 'void *' to 'struct HWND__ *'”
    是不是(HWND)m_handle就可以了?
      

  8.   

    哦,对了,你是获得句柄,那还要这样获得:
    HANDLE hFlashget=HANDLE OpenProcess(PROCESS_ALL_ACCESS,FALSE,Info->th32ProcessID);
    //Info->th32ProcessID就是上面代码获得的进程ID:)
      

  9.   

    你要获得窗口句柄的话,用这个啊
    HWND hWnd= FindWindow(NULL,"flashget");
    至于通过进程句柄怎么来拿窗口句柄,我还没想到有什么方法可以.....
      

  10.   

    FindWindow(NULL,"flashget");这里的FLASHGET就是指我们在进程里看到的进程名吗,不过好像不是
    吧。
      

  11.   

    不是进程名,是窗口名!
    详细的参考MSDN
      

  12.   

    HWND hWnd= FindWindow(NULL,"flashget")
    好像要HWND hWnd= ::FindWindow(NULL,"flashget")编译才通得过。
    我通过::SendMessage(hWnd, SC_MAXIMIZE, 0, 0);没办法让他最大化??