我知道有个PSAPI.dll,其中有一些这一类的函数.包含在windasm中的,但是我用LoadLibary调用时跟踪发现它返回的值始终为0,也就是装入失败.
那么不用它的话,自己写一段程序去枚举,怎么做?

解决方案 »

  1.   

    用toolhelp函数。这个在98下也能用。查查msdn索引里输入toolhelp可以查到,里面还能找到例子
      

  2.   

    EnumWindows( EnumWindowsProc, 0 );EnumWindowsProc函数比如可以写成:
    typedef struct _WindowInfo_{
    char Title[255];
    HWND hWndProc;
    }WindowInfo, *pWindowInfo;BOOL CALLBACK EnumWindowsProc( HWND hwnd,  LPARAM lParam )
    {
    if(count < 10000)
    {
    GetWindowText( hwnd, wininfo[count].Title, 255 );
    wininfo[count].hWndProc = hwnd;
    count++;
    }

    return TRUE;
    }
      

  3.   

    补充
    WindowInfo wininfo[10000];
      

  4.   

    HANDLE    hSnapshot;
    PROCESSENTRY32  ProcEntry;
    BOOL      ret;hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL)
    ret = Process32First(hSnapshot, &ProcEntry);
    while(ret)
    {
         ....
         ret = Process32Next(hSnapshot, &ProcEntry);
    }
      

  5.   

    void ListProcess()
    {
    int numOfProgress=0;
    HANDLE  hSysSnapshot = NULL;
    PROCESSENTRY32 proc;
    char list[MAX_FLENGTH];
    char tmp[64];

    strcpy(list,"\nList of Process:\n");
    proc.dwSize = sizeof(proc);
    hSysSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0 );
    if ( hSysSnapshot == (HANDLE)-1 )
    exit(1);
    if ( Process32First ( hSysSnapshot, &proc ) )
    {
    proc.dwSize = sizeof(proc);
    do
    {
    numOfProgress++;
    sprintf(tmp,"%lu - %s\n",proc.th32ProcessID, proc.szExeFile);
    strcat(list,tmp);
    }
    while ( Process32Next ( hSysSnapshot, &proc ) ); }
    sprintf(tmp,"Total Progress is:%d\n",numOfProgress);
    strcat(list,tmp);
    CloseHandle ( hSysSnapshot );
    }