Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mendapatkan Pemegang Tetingkap Utama daripada ID Proses dalam .NET dan C?

Bagaimanakah Saya Boleh Mendapatkan Pemegang Tetingkap Utama daripada ID Proses dalam .NET dan C?

Barbara Streisand
Barbara Streisandasal
2024-12-11 19:34:12490semak imbas

How Can I Get a Main Window Handle from a Process ID in .NET and C  ?

Mendapatkan semula Pemegang Tetingkap Utama daripada ID Proses

Dalam usaha untuk membawa tetingkap tertentu ke latar depan, pemahaman tentang cara mendapatkannya pemegang tetingkap utama daripada ID prosesnya adalah penting. Proses ini biasanya digunakan untuk mengurus tetingkap dan membawanya ke dalam fokus.

Penyelesaian menggunakan .NET dan EnumWindows()

Pelaksanaan .NET wujud yang menggunakan EnumWindows() untuk mengenal pasti tetingkap utama. Fungsi ini menyenaraikan semua tetingkap peringkat atas dalam sistem, membolehkan anda mencari tetingkap yang dikaitkan dengan proses tertentu.

Pelaksanaan Kod dalam C

Berikut ialah kod C coretan yang menunjukkan pendekatan yang sama seperti pelaksanaan .NET:

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);
}

Kod ini mencipta fungsi panggil balik yang menyemak ID proses setiap tetingkap dan status keterlihatannya untuk menentukan sama ada ia adalah tetingkap utama. Jika ia sepadan dengan ID proses dan kriteria keterlihatan yang ditentukan, pemegang tetingkap disimpan dalam struktur handle_data.

Dengan memanggil EnumWindows() dengan fungsi panggil balik ini, anda boleh lelaran melalui semua tetingkap peringkat atas, kenal pasti yang utama tetingkap untuk ID proses yang ditentukan, dan dapatkan pemegangnya. Pemegang ini kemudiannya boleh digunakan untuk membawa tingkap ke hadapan atau melakukan operasi lain yang berkaitan dengan tingkap.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Pemegang Tetingkap Utama daripada ID Proses dalam .NET dan C?. 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