程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Delphi完成獲取句柄並發送音訊的辦法

Delphi完成獲取句柄並發送音訊的辦法

編輯:更多關於編程

Delphi完成獲取句柄並發送音訊的辦法。本站提示廣大學習愛好者:(Delphi完成獲取句柄並發送音訊的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Delphi完成獲取句柄並發送音訊的辦法正文


本文以實例方式詳細闡明了Delphi獲取句柄並發送音訊的辦法,詳細用法闡明如下:

查找另外一個窗口的句柄:

handle := FindWindow(nil,PChar('窗口的標題'));//查到窗體句柄

查找子窗體:

childHandle := FindWindowEx(handle,0,'子窗體類','子窗體標題'); 

另外有個枚舉子窗體的API,

EnumChildWindows(主創體句柄,@回調函數,用戶參數);

用這個函數需求自己寫一個回調的函數,比方:

function EnumChildProc(ahWND:HWND; param:LPARAM):boolean; stdcall;
sendmessage(handle,message,wl,rl)
unit Unit1; 

interface 

uses Windows,Messages,Tlhelp32,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;

type
 TForm1=class(TForm)
procedure FormCreate(Sender: TObject);

 private
 {
Private declarations
} 
 public 
 {
Public declarations
}
 end; 
var Form1: TForm1;
implementation
{ 
$R *.DFM
}

procedure TForm1.FormCreate(Sender: TObject);
var a,b:PAnsiChar;
h:HWND;
begin
h:= FindWindow(nil,'abc.txt - 記事本');
h:= FindWindowEx(h,0,'edit',nil);
SendMessage(h,WM_SETTEXT,255,Integer(PChar('我來測度了')));
ShowMessage( IntToStr(h));
end;

SendMessage(TreeView.Handle,TVM_SETBKCOLOR,0,RGB(255,0,0)); 設置TV背景顏色
SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0);  鼠標左鍵按下
SendMessage(Button.Handle,WM_LBUTTONUP,0,0);   鼠標左鍵抬起
SendMessage(Edit.Handle,WM_SETTEXT,255,Integer(PChar('abc'))); 傳遞文本
SendMessage(Edit.Handle,WM_Char,Wparam('Q'),2);  傳遞字符
SendMessage(Button.Handle,BM_SETSTYLE,BS_RADIOBUTTON,1);  改動Button作風
SendMessage(ComboBox.Handle,CB_SETDropPEDWIDTH,300,0);  改動CBDownWidth

WM_CUT、WM_COPY和WM_PASTE  剪切,復制,粘帖

完成恣意組合鍵:

keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), 0, 0);
keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);

SendMessageA闡明: 調用一個窗口的窗口函數,將一條音訊發給那個窗口。除非音訊處置終了,否則該函數不會前往

SendMessage所包括4個參數:   
1. hwnd 32位的窗口句柄窗口可以是任何類型的屏幕對象,由於Win32可以維護大少數可視對象的句柄
2. wMsg 用於區別其他音訊的常量值,這些常量可以是Windows單元中預定義的常量,也可以是自定義的常量
3. wParam 通常是一個與音訊有關的常量值,也能夠是窗口或控件的句柄
4. lParam 通常是一個指向內存中數據的指針。由於WParm、lParam和Pointer都是32位的,因而,它們之間可以互相轉換

wMsg函數詳細闡明: 

★WM_Create 創立一個窗口
★WM_DESTROY 當一個窗口被毀壞時發送
★WM_MOVE 挪動一個窗口
★WM_SIZE 改動一個窗口的大小
★WM_ACTIVATE 一個窗口被激活或得到激活形態
★WM_SETFOCUS 一個窗口取得焦點
★WM_KILLFOCUS 一個窗口得到焦點
★WM_ENABLE 一個窗口改動成Enable形態
★WM_SETREDRAW 設置窗口能否能重畫
★WM_SETTEXT 使用順序發送此音訊來設置一個窗口的文本
★WM_GETTEXT 使用順序發送此音訊來復制對應窗口的文本到緩沖區
★WM_GETTEXTLENGTH 失掉與一個窗口有關的文本的長度(不包括空字符)
★WM_PAINT 要求一個窗口重畫自己
★WM_CLOSE 當一個窗口或使用順序要封閉時發送一個信號
★WM_QUERYENDSESSION 用戶選擇完畢對話框或順序自己調用ExitWindows函數
★WM_QUIT 用來完畢順序運轉
★WM_QUERYOPEN 用戶窗口恢復以前的大小地位時,把此音訊發送給某個圖標
★WM_ERASEBKGND 當窗口背景必需被擦除時(例在窗口改動大小時)
★WM_SYSCOLORCHANGE 當零碎顏色改動時,發送此音訊給一切頂級窗口
★WM_QUERYENDSESSION 音訊後,此音訊發送給使用順序,告訴它對話能否完畢
★WM_SHOWWINDOW 當隱藏或顯示窗口是發送此音訊給這個窗口
★WM_ACTIVATEAPP 發此音訊給使用順序哪個窗口是激活的,哪個是非激活的   
★WM_FONTCHANGE 當零碎的字體資源庫變化時發送此音訊給一切頂級窗口
★WM_TIMECHANGE 當零碎的時間變化時發送此音訊給一切頂級窗口
★WM_CANCELMODE 發送此音訊來取消某種正在停止的摸態(操作)
★WM_SETCURSOR 假如鼠標惹起光標在某個窗口中挪動
★WM_ENDSESSION 當零碎進程收回且鼠標輸出沒有被捕捉時,就發音訊給某個窗口
★WM_MOUSEACTIVATE 當光標在某個非激活的窗口中而用戶正按著鼠標的某個鍵發送此音訊給以後窗口
★WM_CHILDACTIVATE 送此音訊給MDI子窗口當用戶點擊此窗口的標題欄,或當窗口被激活,挪動,改動大小
★WM_QUEUESYNC 此音訊由基於計算機的訓練順序發送,經過 WH_JOURNALPALYBACK的hook順序別離出用戶輸出音訊
★WM_GETMINMAXINFO 此音訊發送給窗口當它將要改動大小或地位   
★WM_PAINTICON 發送給最小化窗口當它圖標將要被重畫
★WM_ICONERASEBKGND 此音訊發送給某個最小化窗口,僅當它在畫圖標前它的背景必需被重畫
★WM_NEXTDLGCT★發送此音訊給一個對話框順序去更改焦點地位
★WM_SPOOLERSTATUS 每當打印管理列隊添加或增加一條作業時收回此音訊   
★WM_DRAWITEM 當button,combobox,listbox,menu的可視外觀改動時發送
★WM_MEASUREITEM 當button, combobox, listbox, listview control, or menuitem 被創立時
★WM_VKEYTOITEM 此音訊有一個LBS_WANTKEYBOARDINPUT作風的收回給它的一切者來呼應WM_KEYDOWN音訊   
★WM_CHARTOITEM 此音訊由一個LBS_WANTKEYBOARDINPUT作風的列表框發送給他的一切者來呼應WM_CHAR音訊   
★WM_SETFONT 當繪制文本時順序發送此音訊失掉控件要用的顏色
★WM_GETFONT 使用順序發送此音訊失掉以後控件繪制文本的字體
★WM_SETHOTKEY 使用順序發送此音訊讓一個窗口與一個熱鍵相關連
★WM_GETHOTKEY 使用順序發送此音訊來判別熱鍵與某個窗口能否有關聯
★WM_QUERYDRAGICON 此音訊發送給最小化窗口,當此窗口將要被拖放而它的類中沒有定義圖標,使用順序能前往一個圖標或光標的句柄,當用戶拖放圖標時零碎顯示這個圖標或光標
★WM_COMPAREITEM 發送此音訊來斷定combobox或listbox新添加的項的絕對地位
★WM_COMPACTING 顯示內存曾經很少了
★WM_WINDOWPOSCHANGING 發送此音訊給那個窗口的大小和地位將要被改動時,來調用setwindowpos函數或其它窗口管理函數
★WM_WINDOWPOSCHANGED 發送此音訊給那個窗口的大小和地位曾經被改動時,來調用setwindowpos函數或其它窗口管理函數
★WM_POWER 當零碎將要進入暫停形態時發送此音訊
★WM_COPYDATA 當一個使用順序傳遞數據給另一個使用順序時發送此音訊
★WM_CANCELJOURNA 當某個用戶取消順序日志激活形態,提交此音訊給順序
★WM_NOTIFY 當某個控件的某個事情曾經發作或這個控件需求失掉一些信息時,發送此音訊給它的父窗口   
★WM_INPUTLANGCHANGEREQUEST 當用戶選擇某種輸出言語,或輸出言語的熱鍵改動
★WM_INPUTLANGCHANGE 當平台現場曾經被改動後發送此音訊給受影響的最頂級窗口
★WM_TCARD 當順序曾經初始化windows協助例程時發送此音訊給使用順序
★WM_HELP 此音訊顯示用戶按下了F1,假如某個菜單是激活的,就發送此音訊個此窗口關聯的菜單,否則就發送給有焦點的窗口,假如以後都沒有焦點,就把此音訊發送給以後激活的窗口
★WM_USERCHANGED 當用戶曾經登入或加入後發送此音訊給一切的窗口,當用戶登入或加入時零碎更新用戶的詳細設相信息,在用戶更新設置時零碎馬上發送此音訊
★WM_NOTIFYFORMAT 公用控件,自定義控件和他們的父窗口經過此音訊來判別控件是運用ANSI還是UNICODE構造

function EnumChildWindowsProc(hwnd, lparam: Integer): Boolean;  
  var  
 buffer: array[0..255] of char;  
  begin  
 Result := True;  
 GetClassName(hwnd,buffer,256);  
 if StrPas(Buffer)='Edit' then  
 begin  
 SendMessage(hwnd,WM_GETTEXT,256,lparam);  
 Result:=False;  
 end;  
  end;  
  
  procedure TForm1.Button1Click(Sender: TObject);  
  var  
 hwnd: Integer;  
 buffer: array[0..255] of char;  
  Begin  
 hwnd := FindWindow('CabinetWClass',nil);  
 if hwnd<> 0 then  
 begin  
 EnumChildWindows(hwnd,@EnumChildWindowsProc,Longint(@buffer[0]));  
 Caption := StrPas(buffer);  
 end;  
  end;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved