العملية باستخدام إطار .NET. من خلال توفير معرف العملية (PID) ، تبحث هذه المهمة عن طريقة فعالة لتعداد جميع النوافذ المقابلة. توظف. يوضح مقتطف الكود التالي كيفية تنفيذ هذا الحل:
تفويض bool enumThreadDelegate (intptr hwnd ، intptr lparam) ؛
[Dllimport ("user32.dll")]
enumThreadWindows extern extern extern
intptr lparam) ؛
ثابت ienumerable
enumerateprocesswindowhandles (int processID)
{
VAR HANDLES = قائمة جديدة () ؛
foreach (Throughread Thread in Process.GetProcessById (processID) .Threads)
EnumThreadWindows (thread.id ،
(hwnd ، lparam) = & gt ؛ {handles.add (hwnd) ؛ العودة صحيح. } ، intptr.zero) ؛
مقابض العودة
}
مثال على الاستخدام
يوضح الكود المقدم كيفية تعداد جميع النوافذ المرتبطة بعملية مستكشف Windows:
خاص const uint wm_gettext = 0x000d ؛
[dllimport ("user32.dll" ، charset = charset.auto)]
intptr extern extern exter
StringBuilder LPARAM) ؛
[Stathread]
باطل ثابت رئيسي (سلسلة [] args)
{
foreach (var handle في inumerateprocesswindowhandles (
Process.getProcessESByName ("Explorer"). أولاً (). معرف))
{
رسالة stringBuilder = جديد StringBuilder (1000) ؛
sendMessage (Handle ، wm_gettext ، message.capacity ، message) ؛
console.writeline (message) ؛
}
}
عن طريق استخدام هذا الحل ، يمكنك تعداد جميع النوافذ بشكل فعال إلى عملية معينة ، وتوفير رؤى قيمة في واجهة مستخدم التطبيق.