2010-11-20 35 views
3

"Masaüstünde listelenen tüm işlem kimliklerini al" yöntemini kullanmayı denedim, ancak çalışmaz.Pencere Sapına Geçme (c)

Bir tanıtıcıyı bir pencere tutamacına veya 'a dönüştürmenin bir yolu var Bir işlem kimliğini almanın ve işlem tarafından oluşturulan tüm çocuk pencerelerini bulmanın bir yolu var mı?

Not: Birden çok işlem nedeniyle FindWindow kullanmak istemiyorum.

cevap

4

Ekrandaki tüm en üst düzey pencerelerin üzerinde yineleme yapmak için EnumWindows() numaralı telefonu arayabilir ve daha sonra işleminize ait olanları bulmak için GetWindowThreadProcessId()'u kullanabilirsiniz. gibi

Örneğin

şey:

BOOL CALLBACK ForEachTopLevelWindow(HWND hwnd, LPARAM lp) 
{ 
    DWORD processId; 
    GetWindowThreadProcessId(hwnd, &processId); 
    if (processId == (DWORD) lp) { 
     // `hwnd` belongs to the target process. 
    } 
    return TRUE; 
} 

VOID LookupProcessWindows(DWORD processId) 
{ 
    EnumWindows(ForEachTopLevelWindow, (LPARAM) processId); 
}