請教各位高手有關sendmessagetimeout的問題 |
尚未結案
|
nonokoko
一般會員 發表:10 回覆:10 積分:4 註冊:2003-11-03 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 我想要關閉無回應的應用程式,我撰寫了以下的程式,但是我發現無論無回應的視窗是否存在,lr的值都是傳1,這是為什麼呢??我是不是那裡有寫錯呢?? 麻煩各位高手,幫小女子....感恩不盡!! > >>< face="Verdana, Arial, Helvetica">monokoko 你好: (1)請問你用來模擬「無回應」的 Application 裡面的程式碼是怎麼寫的?? 一般來說,只需要在 > > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
nonokoko
一般會員 發表:10 回覆:10 積分:4 註冊:2003-11-03 發送簡訊給我 |
引言:引言: 我想要關閉無回應的應用程式,我撰寫了以下的程式,但是我發現無論無回應的視窗是否存在,lr的值都是傳1,這是為什麼呢??我是不是那裡有寫錯呢?? 麻煩各位高手,幫小女子....感恩不盡!! > >>< face="Verdana, Arial, Helvetica">monokoko 你好: (1)請問你用來模擬「無回應」的 Application 裡面的程式碼是怎麼寫的?? 一般來說,只需要在 > > -- >>< face="Verdana, Arial, Helvetica"> RaynorPao你好,謝謝你的回答~~我已經用一個無迴圈的Form了!按ctrl alt del查看工作狀態也是沒有回應,但是lr的值卻沒抓到,想請教你一下,HWndCalculator := FindWindow(nil, '無回應')這一行裡的無回應是指視窗名稱嗎??還是要打noresponse呢??對不起~~第一次接觸api,很多函數都不熟!謝謝你~~~^^ |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao你好,謝謝你的回答~~我已經用一個無迴圈的Form了!按ctrl alt del查看工作狀態也是沒有回應,但是lr的值卻沒抓到,想請教你一下,HWndCalculator := FindWindow(nil, '無回應')這一行裡的無回應是指視窗名稱嗎??還是要打noresponse呢??對不起~~第一次接觸api,很多函數都不熟!謝謝你~~~^^monokoko 你好: 當然是指「視窗的名稱」啊 (例如: 'Form1', 'Form2',....) --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
nonokoko
一般會員 發表:10 回覆:10 積分:4 註冊:2003-11-03 發送簡訊給我 |
引言:引言: RaynorPao你好,謝謝你的回答~~我已經用一個無迴圈的Form了!按ctrl alt del查看工作狀態也是沒有回應,但是lr的值卻沒抓到,想請教你一下,HWndCalculator := FindWindow(nil, '無回應')這一行裡的無回應是指視窗名稱嗎??還是要打noresponse呢??對不起~~第一次接觸api,很多函數都不熟!謝謝你~~~^^monokoko 你好: 當然是指「視窗的名稱」啊 (例如: 'Form1', 'Form2',....) -- >>< face="Verdana, Arial, Helvetica"> Dear 版主大人: 我已經將視窗名稱改好了!但是lr的值仍然是1~~嗚嗚~我是那裡有下錯了嗎?? |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: Dear 版主大人: 我已經將視窗名稱改好了!但是lr的值仍然是1~~嗚嗚~我是那裡有下錯了嗎?? nonokoko 你好: (1)我想,有可能是因為在你的 Windows 作業系統裡面,還有相同名稱的視窗, 因此才會導致抓到的視窗 Handle 並不是無回應的視窗;所以建議你為你的 Form1 取一個特別、唯一的 Caption (例如: '唯一的視窗名字'),並且在 FormCreate 的時候,動態指定給它 Form1.Caption:='唯一的視窗名字'; 當然,你在 FindWindow 的時候,也應該找這個特別、唯一的 Caption (2)另外,在你的無窮迴圈裡面,是不可以加 Application.ProcessMessages; 的,不然,還是會被判定「有回應」的 (3)如果還是不行的話,建議你把所有相關的程式碼貼上來,幫你看看-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
nonokoko
一般會員 發表:10 回覆:10 積分:4 註冊:2003-11-03 發送簡訊給我 |
Dear 版主大人:
以下是我的程式碼
unit Unit1; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,ShellApi, ExtCtrls; type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject);
var
HWndCalculator : HWnd;
lr : Integer;
aResult : Cardinal;
begin
HWndCalculator := FindWindow(nil,'沒有回應');
if HWndCalculator <> 0 then //如果此視窗已存在
begin
lr:=SendMessageTimeout(HWndCalculator,WM_SETFOCUS,0,0,SMTO_NORMAL,5000,aResult);//無回應
edit1.text:=inttostr(lr);
if lr=0 then //若無回應,關閉視窗,重新執行
begin
Sleep(5000);
keybd_event(69,0,0,0);
Sleep(5000);
keybd_event(68,0,0,0);
//SendMessage(HWndCalculator, WM_CLOSE, 0, 0);
ShellExecute(handle,'open','notepad.exe',nil,nil,SW_ShowNormal);
end;
end;
end;
end.
而經過我的測試發現當出現以下的圖片時,才會是0
可是我想在以下的圖片時,就能馬上終止程式,並且重新執行檔案,是不是我的SendMessageTimeout的語法有錯呢??非常感激您~一直回答我的問題~~因為工作的關係~~這個程式對我非常重要~~謝謝~~您~~~小女子感恩不盡!!
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: Dear 版主大人: 以下是我的程式碼 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ShellApi, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var HWndCalculator : HWnd; lr : Integer; aResult : Cardinal; begin HWndCalculator := FindWindow(nil,'沒有回應'); if HWndCalculator <> 0 then //如果此視窗已存在 begin lr:=SendMessageTimeout(HWndCalculator,WM_SETFOCUS,0,0,SMTO_NORMAL,5000,aResult);//無回應 edit1.text:=inttostr(lr); if lr=0 then //若無回應,關閉視窗,重新執行 begin Sleep(5000); keybd_event(69,0,0,0); Sleep(5000); keybd_event(68,0,0,0); //SendMessage(HWndCalculator, WM_CLOSE, 0, 0); ShellExecute(handle,'open','notepad.exe',nil,nil,SW_ShowNormal); end; end; end; end. 而經過我的測試發現當出現以下的圖片時,才會是0 可是我想在以下的圖片時,就能馬上終止程式,並且重新執行檔案,是不是我的SendMessageTimeout的語法有錯呢??非常感激您~一直回答我的問題~~因為工作的關係~~這個程式對我非常重要~~謝謝~~您~~~小女子感恩不盡!!nonokoko 你好: 請先參考這篇文章中的做法,看是否能夠解決問題??
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |