فهمیدم مشکل از کجاست ، علاوه بر برنامه ی Program Manager باید چک کرد که پیغام به برنامه ای بدون نام هم فرستاده نشه
به Title پنجره ی Program Manager نمی شه دسترسی داشت ، چون پنجره ای ازش نمایش داده نمیشه ! ، ولی نام کلاسش همونطور که دوستمون گفتن " progman " هست با دادن مقادیر زیر به FindWindow این برنامه پیدا میشه :
FindWindow('progman', nil);
نکته ی اصلی مقدار nil هست که در FindWindow قرار میگیره و باعث میشه که اصلا عنوان مد نظر قرار نگیره ...
با توجه به این که میخواید تمام پنجره ها بسته بشه به غیر از برنامه ی خودتون و Program manager ، بهتره به صورت زیر عمل کنید ( مثال ) :
var
PGHandle , MyHandle : THandle;
begin
PGHandle := FindWindow('progman', nil);
MyHandle := Application.MainForm.Handle;
if (H <> PGHandle) and (H <> MyHandle) then
PostMessage(H, WM_CLOSE, 0, 0);
end;
پنجره هایی هم هستند که عنوان ندارند اما باید بسته شوند ...
موفق باشید ...