Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mendapatkan Pemegang Tetingkap Utama Menggunakan ID Proses?

Bagaimana untuk Mendapatkan Pemegang Tetingkap Utama Menggunakan ID Proses?

Patricia Arquette
Patricia Arquetteasal
2024-12-08 14:51:11183semak imbas

How to Get the Main Window Handle Using a Process ID?

Cara Mendapatkan Kembali Pemegang Tetingkap Utama Menggunakan ID Proses:

Untuk mendapatkan semula pemegang tetingkap utama sesuatu proses, anda boleh menggunakan yang berikut langkah:

  1. Gunakan fungsi EnumWindows() untuk menghitung semua tetingkap peringkat atas dalam sistem.
  2. Dalam fungsi panggil balik enum_windows_callback(), semak sama ada ID proses yang dikaitkan dengan tetingkap semasa sepadan dengan ID proses sasaran.
  3. Jika padanan ditemui, tentukan sama ada tetingkap semasa adalah tetingkap utama dengan mengesahkan bahawa ia tidak mempunyai pemilik (GetWindow(handle, GW_OWNER) == (HWND)0) dan boleh dilihat (IsWindowVisible(handle) == TRUE).
  4. Setelah mengenal pasti tetingkap utama, simpan pemegangnya dalam struktur handle_data dan kembalikan FALSE untuk menghentikan penghitungan.

Berikut ialah contoh kod yang melaksanakan langkah-langkah ini:

struct handle_data {
    unsigned long process_id;
    HWND window_handle;
};

HWND find_main_window(unsigned long process_id)
{
    handle_data data;
    data.process_id = process_id;
    data.window_handle = 0;
    EnumWindows(enum_windows_callback, (LPARAM)&data);
    return data.window_handle;
}

BOOL CALLBACK enum_windows_callback(HWND handle, LPARAM lParam)
{
    handle_data& data = *(handle_data*)lParam;
    unsigned long process_id = 0;
    GetWindowThreadProcessId(handle, &process_id);
    if (data.process_id != process_id || !is_main_window(handle))
        return TRUE;
    data.window_handle = handle;
    return FALSE;
}

BOOL is_main_window(HWND handle)
{   
    return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle);
}

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Pemegang Tetingkap Utama Menggunakan ID Proses?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn