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
Lepaskan: 2024-12-11 19:34:12
asal
502 orang telah melayarinya

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);
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan