จะหา Windows บนจอที่มี ตอนแรกไปเปิด Win32API เจอ EnumWindows
ตอนแรกนึกว่าจะใช้ได้เลย แต่พอใช้จริง ๆ ดันเจออะไรบ้าบอเต็มไปหมด คือเป็น Windows ที่เป็น Top Level แต่มีอะไรบ้า ๆ บอ ๆ เยอะ คือเจอ Windows ที่มันไม่โผล่มาให้เห็นหลายอัน
หลังจากไล่ ๆ search ใน net สักพัก ก็เลยรู้ว่าต้อง Check ดังต่อไปนี้ด้วย
- ต้องเป็น Windows ที่ Visible สามารถ check ได้จาก
IsWindowVisible
- ต้องไม่มีป๊ะป๋า คือเป็นโคตรเตี่ย windows check จาก
GetParent
- ต้อง (have no owner and are not Tool windows) OR (have an owner and are App windows) สามารถดูได้จาก
GetWindowLong(hwnd, GWL_EXSTYLE)
- สุดท้าย มันควรจะมี Caption ดูได้จาก
GetWindowText
source code version delphi จะเป็นยังเงี้ย
if IsWindowVisible(hWnd) then begin
If GetParent(hWnd) = 0 Then begin
hasNoOwner := (GetWindow(hwnd, GW_OWNER) = 0);
lExStyle := GetWindowLong(hwnd, GWL_EXSTYLE);
If (((lExStyle And WS_EX_TOOLWINDOW) = 0) And hasNoOwner) Or
(((lExStyle And WS_EX_APPWINDOW) <> 0) And Not hasNoOwner) Then begin
If GetWindowText(hwnd, TheText, SizeOf(TheText)) > 0 Then begin
st := TheText;
Form1.Memo1.Lines.Add(Format('[%s]',[st]));
End;
End;
End;
end;
- Log in to post comments