WinAPI: FindWindow、FindWindowEx - 查找窗口

FindWindow(
  lpClassName,        {窗口的類名}
  lpWindowName: PChar {窗口的標題}
): HWND;              {返回窗口的句柄; 失敗返回 0}

//FindWindowEx 比 FindWindow 多出兩個句柄參數:
FindWindowEx(
  Parent: HWND;     {要查找子窗口的父窗口句柄}
  Child: HWND;      {子窗口句柄}
  ClassName: PChar; {}
  WindowName: PChar {}
): HWND;
{
如果 Parent 是 0, 則函數以桌面窗口爲父窗口, 查找桌面窗口的所有子窗口;
如果  是 HWND_MESSAGE, 函數僅查找所有消息窗口;
子窗口必須是 Parent 窗口的直接子窗口;
如果 Child 是 0, 查找從 Parent 的第一個子窗口開始;
如果 Parent 和 Child 同時是 0, 則函數查找所有的頂層窗口及消息窗口.
}




//測試1: 試着找找新建程序主窗口的句柄
var
  h: HWND;
begin
  {現在我們知道窗口的標題是: Form1、窗口的類名是: TForm1}
  h := FindWindow('TForm1', 'Form1');
  ShowMessage(IntToStr(h));      {656180; 這是隨機, 每次啓動窗口肯定不一樣}

  {假如不知道類名}
  h := FindWindow(nil, 'Form1');
  ShowMessage(IntToStr(h));      {656180}

  {假如不知道標題名}
  h := FindWindow('TForm1', nil);
  ShowMessage(IntToStr(h));      {656180}

  {其實這個窗口的句柄不就是 Self.Handle 嗎}
  ShowMessage(IntToStr(Handle)); {656180}
end;



//測試2: 找計算器窗口的句柄(先打開計算器)
var
  h: HWND;
begin
  {如果不是簡體中文系統, 這樣可能不靈}
  h := FindWindow(nil, '計算器');
  ShowMessage(IntToStr(h)); {1508334}

  {最好這樣, 但你得提前知道計算器窗口的類名是: SciCalc}
  h := FindWindow('SciCalc', nil);
  ShowMessage(IntToStr(h)); {1508334}
end;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章