程序a.exe的进程名固定不变,只能打开一个实例。
窗口名随机产生。怎么通过进程名得到窗口名?

解决方案 »

  1.   

    一个进程可能打开N个窗口。
    枚举窗口EnumWindows,GetWindowThreadProcessId比较
      

  2.   

    根据EXE名得到进程ID =》 得到主窗口句柄 =》 GetWindowText
      

  3.   

    //大概就是这样子,还要稍微修改下#include <windows.h>
    #include <tlhelp32.h>
    #include <stdio.h>
    #include <string>
    using namespace std;
    DWORD GetProcessList( );BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
    {
    DWORD proID = (DWORD)lParam;
    char buf[500] = {0};
    GetWindowText(hWnd, buf, 499);
    DWORD proID2;
    GetWindowThreadProcessId(hWnd, &proID2);
    if(proID2 == proID)
    {
    printf("\n%s\n", buf);
    }
    return TRUE;
    }void main( )
    {
    DWORD proID = GetProcessList( );
    EnumWindows(EnumWindowsProc, proID);
    }DWORD GetProcessList( )
    {
    HANDLE hProcessSnap;
    PROCESSENTRY32 pe32;
    hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
    if( hProcessSnap == INVALID_HANDLE_VALUE )
    {
    return( FALSE );
    }
    pe32.dwSize = sizeof( PROCESSENTRY32 );
    if( !Process32First( hProcessSnap, &pe32 ) )
    {
    CloseHandle( hProcessSnap );  
    return( FALSE );
    }
    do
    {
    if( (string)pe32.szExeFile == "notepad.exe")
    {
    return pe32.th32ProcessID;
    }
    } while( Process32Next( hProcessSnap, &pe32 ) );
    CloseHandle( hProcessSnap );
    return( TRUE );
    }
      

  4.   

    先在EnumWindowsProc获取所有的proID2,然后在GetProcessList函数里判断pe32的szExeFile ,th32ProcessID好点。