PDA

View Full Version : بستن پنجره windows picture and fax viewer



nassim_20
دوشنبه 14 مرداد 1387, 16:22 عصر
چطور می تونم این پنجره رو ببندم چون عنوانش هر بار بر اساس تصویری که باز میکنه متفاوت است

Hsimple11
دوشنبه 14 مرداد 1387, 21:47 عصر
Handle پنچره مورد نظر را پیدا کنید و پیغام WM_ClOSE را به آن بفرستید.

برای پیدا کردن Handle هم میتوانید از متد FindWindow استفاده کنید مثلا :



procedure TForm1.Button1Click(Sender: TObject);
var
PicFaxViewer: HWND;
begin
PicFaxViewer := FindWindow(nil, 'Windows Picture and Fax Viewer');
if PicFaxViewer <> 0 then PostMessage(PicFaxViewer, WM_CLOSE, 0, 0);
end;

nassim_20
سه شنبه 15 مرداد 1387, 17:15 عصر
درسته اما پنجره این برنامه عنوانش ثابت نیست هر بار بسته به نوعش متفاوت است و نمیشه عنوان یکسانی ازش بدست اورد و در task هم در تب prosses هم نامی برایش ذکر نمیشه و جز explorer محسوب میشه و نمیشه بستش

taha
چهارشنبه 16 مرداد 1387, 09:48 صبح
سلام

این تابع هندل پنجره ای را که Title آن شامل یه عبارت خاصی باشه میده:


function FindWindowByTitle(WindowTitle: string): Hwnd;
var
NextHandle: Hwnd;
NextTitle: array[0..260] of char;
begin
NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
while NextHandle > 0 do
begin
GetWindowText(NextHandle, NextTitle, 255);
if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
begin
Result := NextHandle;
Exit;
end
else
NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
end;
Result := 0;
end;بعدش هم می تونی مثل پست قبلی پنجره رو ببندی:


procedure TForm1.Button1Click(Sender: TObject);
var
PicFaxViewer: HWND;
begin
PicFaxViewer := FindWindowByTitle('Windows Picture and Fax Viewer');
if PicFaxViewer <> 0 then
PostMessage(PicFaxViewer, WM_CLOSE, 0, 0);
end;