【Delphi】【問題】如何偵測Windows MessageBox |
尚未結案
|
chiaseng
一般會員 發表:2 回覆:11 積分:2 註冊:2003-02-24 發送簡訊給我 |
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
|
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
|
chiaseng
一般會員 發表:2 回覆:11 積分:2 註冊:2003-02-24 發送簡訊給我 |
|
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
windows單元在
delphi5
C:\Program Files\Borland\Delphi5\Source\Rtl\Win\Windows.pas
delphi6
C:\Program Files\Borland\Delphi6\Source\Rtl\Win\Windows.pas
delphi7
C:\Program Files\Borland\Delphi7\Source\Rtl\Win\Windows.pas
定義delphi如何windows api
help可查詢
delphi之help下之MS SDK Help Files 如何查詢可以在delphi內Open windows.pas以CTRL F鍵打入關鍵字查詢
windows api之用途可以參考一些windows api之書籍,delphi也有此方面的書可到天瓏書局找
|
chiaseng
一般會員 發表:2 回覆:11 積分:2 註冊:2003-02-24 發送簡訊給我 |
|
chiaseng
一般會員 發表:2 回覆:11 積分:2 註冊:2003-02-24 發送簡訊給我 |
|
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
外部程式會出現視窗,視窗中會有edit,button等元件,可以delphi程式送message
去按button或填字在edit內.
1.取得視窗handle
var h:integer;
begin
h:=FindWindow(PChar(0),pchar(Edit2.Text)); //edit2.Text為視窗Caption
end;
//*以下由handle取得caption*****************
function Get_WinCaption(WinHandle:Word):String;
var s100:array[0..100] of char;
begin
GetWindowText(WinHandle,S100,100);
Result:=String(s100);
end;
//***以下取得Button之Handle
function Get_ButtonHandle(ParentWinHandle:Word;Caption:string):Word;
var WHS:string;
i:integer;
WH:word;
begin
WHS:=Get_ChildWinHandleString(ParentWinHandle,'Button');
WH:=0;
i:=1;
while i<=length(WHS) do
begin
WH:=FNto10( copy(WHS,i,4),16);
if Get_WinCaption(WH)=Caption then Break;
WH:=0;
inc(i,4)
end;
Result:=WH;
end; //***以下取得Edit之Handle
function Get_EditHandle(ParentWinHandle:Word;Index:integer):Word;
var WHS:string;
begin
WHS:=Get_ChildWinHandleString(ParentWinHandle,'Edit');
Result:=FnTo10(Copy(WHS,Index*4-3,4),16)
end; //***以下供上二個函數呼叫
function Get_ChildWinHandleString(ParentWinHandle:Word;ChildType:String):String;
//childType='Button' , 'Edit' , 'Static' ....
type TEnum_Childwin=record
ChildType:String;
WinHandleString:string; //²Å¦Xchildtype¤§µøµ¡¤§HEX¦r¦ê4byte¤@²Õ
end;
//-------------------------------------------------------------------
function Enum_Get_ChildWinHandleString(H:Word;var Child:TEnum_ChildWIn):Bool; StdCall; {32}
var ClassNS:array[0..32] of char;
begin
GetClassName(h,ClassNS,32);
if pos(Uppercase(Child.ChildType),Uppercase(String(ClassNS)))>0 then
begin
Child.WinHandleString:=Child.WinHandleString F10toN(h,4,16);
end;
Result:=TRUE;
end;
//------------------------------------------------------------------
var Child:TEnum_ChildWin;
begin
Child.ChildType:=ChildType;
Child.WinHandleString:='';
EnumChildWindows(ParentWinHandle,@Enum_Get_ChildWinHandleString,longint(@Child));
Result:=Child.WinHandleString;
end; //////////////////////////////
由以上函數取得要控制handle再配合SendMessage函數達到控制目的
函數用法可以參考windows SDK方面書籍,Delphi help File
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |