線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1881
推到 Plurk!
推到 Facebook!

執行SendMessage and 同時關閉MessageBox

尚未結案
mingbrother
一般會員


發表:1
回覆:1
積分:0
註冊:2005-04-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-11 10:35:56 IP:202.153.xxx.xxx 未訂閱
各位前輩: 我用SendMessage嘗試關閉某個應用程式, 不過該程式都會再彈出一個MessageBox詢問是否確定關閉. 請教該如何解決? 請不吝賜教, 感謝!
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-11 11:12:03 IP:61.70.xxx.xxx 未訂閱
殺了他
function TerminateProcessByTitle(ATitle: string): boolean;
var
  hWindow: HWND;
begin
  Result := false;      hWindow := FindWindow(nil, PChar(ATitle));      if hWindow <> 0 then
    Result := TerminateProcessByHWND(hWindow);    end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  TerminateProcessByTitle('未命名 - 記事本');
end;
73506
一般會員


發表:2
回覆:1
積分:0
註冊:2002-07-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-11 22:18:40 IP:61.230.xxx.xxx 未訂閱
感謝supman賜教, 不過執行結果還是會如圖彈出MessageBox, 是否有其他方法可以關閉該應用程式時同時送出關閉MessageBox的訊息呢??
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-12 01:40:08 IP:218.167.xxx.xxx 未訂閱
   AppHandle := findwindow(nil, Pchar('未命名 - 記事本')); //找aPP
   if AppHandle>0 then
   begin
      SetForegroundWindow(AppHandle);
      Postmessage(AppHandle, WM_CLOSE, 0 ,0); //改用postmessage不等待回應才能關閉下面messagebox
      repeat
         AppHandle:=findwindow(nil, Pchar('記事本'));//找messagebox
         Sleep(10);
         Application.ProcessMessages;
      until AppHandle>0;
      SetForegroundWindow(AppHandle);
      keybd_event(Ord('N'),MapVirtualKey(Ord('N'),0),0,0);
      keybd_event(Ord('N'),MapVirtualKey(Ord('N'),0),KEYEVENTF_KEYUP,0); //送出N不存檔關閉
   end;
@瞭解越多.懂得越少@
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-12 10:33:06 IP:61.70.xxx.xxx 未訂閱
抱歉 有兩個函數我沒貼到,之前我有測試過,是可以Run的,不過之前貼的您怎麼可以Run呢,有點好奇@@
function KillProcessByID(APID: THandle): boolean;
var
 AhProcess: THandle;
begin
object.
 AhProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, APID);
 Result := TerminateProcess(AhProcess, 0);
end;    function TerminateProcessByHWND(AhWND: HWND): boolean;
var
  AProcessID: DWORD;
begin
Result := false;
if AhWND <> 0 then
 begin
  GetWindowThreadProcessId(AhWND, @AProcessID);
  Result := KillProcessByID(AProcessID);
 end;
end;    function TerminateProcessByTitle(ATitle: string): boolean;
var
  hWindow: HWND;
begin
Result := false;
hWindow := FindWindow(nil, PChar(ATitle));
if hWindow <> 0 then
 Result := TerminateProcessByHWND(hWindow);
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
 if TerminateProcessByTitle('未命名 - 記事本') then
end;
mingbrother
一般會員


發表:1
回覆:1
積分:0
註冊:2005-04-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-12 12:09:57 IP:202.153.xxx.xxx 未訂閱
感謝supman 和chris_shieh的賜教, 兩位的方法都可以執行成功.
系統時間:2024-05-05 15:42:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!