Delphi如何關(guān)閉外部程序
在Delphi中,要實現(xiàn)關(guān)閉外部程序的功能,可以使用兩個API函數(shù):FindWindow和PostMessage(或SendMessage)。 使用FindWindow函數(shù)獲取窗口句柄 FindW
在Delphi中,要實現(xiàn)關(guān)閉外部程序的功能,可以使用兩個API函數(shù):FindWindow和PostMessage(或SendMessage)。
使用FindWindow函數(shù)獲取窗口句柄
FindWindow函數(shù)主要用來通過窗口類或窗口標(biāo)題來獲取一個窗口的句柄。一般情況下,通過窗口標(biāo)題來獲取窗口句柄更為常用。
例如,下面的代碼可以用來獲取標(biāo)題為“無標(biāo)題 - 記事本”的窗口句柄:
var
hWnd: HWND;
begin
hWnd : FindWindow(nil, '無標(biāo)題 - 記事本');
end;
使用PostMessage函數(shù)發(fā)送消息
PostMessage函數(shù)可以向指定句柄的窗口發(fā)送消息。在Windows系統(tǒng)中,操作是通過消息機(jī)制來執(zhí)行的。例如,如果要最小化一個窗口,需要先向該窗口發(fā)送一個最小化的消息,窗口才會根據(jù)消息執(zhí)行相應(yīng)的操作。
因此,我們可以使用PostMessage函數(shù)手動向窗口發(fā)送消息來實現(xiàn)關(guān)閉程序的功能。例如,下面的代碼可以向前面獲取到的窗口句柄發(fā)送一個關(guān)閉消息(WM_CLOSE),從而關(guān)閉程序:
var
hWnd: HWND;
begin
// 獲取窗口句柄
hWnd : FindWindow(nil, '無標(biāo)題 - 記事本');
// 向窗口發(fā)送關(guān)閉消息
PostMessage(hWnd, WM_CLOSE, 0, 0);
end;
需要注意的是,SendMessage函數(shù)也可以實現(xiàn)相同的效果,但與PostMessage不同的是,SendMessage發(fā)送消息后會等待消息執(zhí)行的結(jié)果。如果消息執(zhí)行不成功,程序可能會掛起。因此,我們更推薦使用PostMessage函數(shù)來關(guān)閉外部程序。
以上就是使用Delphi關(guān)閉外部程序的方法介紹。通過使用FindWindow函數(shù)獲取窗口句柄,并使用PostMessage函數(shù)向窗口發(fā)送關(guān)閉消息,我們可以實現(xiàn)關(guān)閉外部程序的功能。
下面是代碼的優(yōu)化版:
var
hWnd: HWND;
begin
// 獲取窗口句柄
hWnd : FindWindow(nil, '無標(biāo)題 - 記事本');
// 如果找到了窗口,則向窗口發(fā)送關(guān)閉消息
if hWnd <> 0 then
PostMessage(hWnd, WM_CLOSE, 0, 0)
else
ShowMessage('未找到指定標(biāo)題的窗口!');
end;
運(yùn)行后,可以看到效果圖中展示了找到指定標(biāo)題窗口和未找到指定標(biāo)題窗口的情況。