有API可以用吗?

解决方案 »

  1.   

    我要在程序甲中用SendMessage向程序乙发消息,要用到乙的handle,已知乙的文件名,怎样才能得到它的handle?
      

  2.   

    枚举系统中所有的进程,找到这个进程后用OpenProcess取得句柄。
      

  3.   

    按楼主的意思应该知道了乙的进程名了,那么枚举一下进程,你可以看下MSDN里的CreateToolhelp32Snapshot这个函数,相应的它有一篇Taking a Snapshot and Viewing Processes的代码片段,里面可以得到句柄的。
    我试过的,呵呵,祝好运~
      

  4.   

    多谢楼上两位老大!
    可是OpenProcess得到的是进程的Handle,怎么能通过进程的Handle得到窗口的Handle呢?
      

  5.   

    搞定了!
    送给后来人:
    PROCESSENTRY32 pe;
    HWND hwndFind = NULL;
    BOOL FindExe(WCHAR* exeName)
    {
    HANDLE  hSnapshot;
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); pe.dwSize=sizeof(PROCESSENTRY32);
    Process32First(hSnapshot,&pe);
    do 
    {
    if (0 == wcscmp(pe.szExeFile,exeName))
    {
    return TRUE;
    }
    }
    while(Process32Next(hSnapshot,&pe));

    CloseHandle(hSnapshot);
    return FALSE;
    }
    //在头文件中声明成:static BOOL CALLBACK CMyDlg::YourEnumProc(HWND Wnd,LPARAM lParam);
    BOOL CALLBACK CMyDlg::YourEnumProc(HWND Wnd,LPARAM lParam)
    {
       DWORD dwProcessId;
       GetWindowThreadProcessId(Wnd,&dwProcessId);
       if(dwProcessId==(DWORD)lParam)
       {
           hwndFind = Wnd;
       return FALSE;
       }
       return TRUE;
    }FindExe(_T("You Want Find.exe"));
    EnumWindows(YourEnumProc,(LPARAM)pe.th32ProcessID);
    ::SendMessage(hwndFind,WM_XX,1,0);