Текущий архив: 2006.10.08;
Скачать: CL | DM;
ВнизПоиск 3-х одинаковых объектов в чужом окне Найти похожие ветки
← →
Sesh (2006-08-30 18:16) [0]Подскажите пож-ста, нашел чужое окно, в нем объект, в том обекте есть 3 одинаковых TPanel, как мне перейти ко 2-й панели, всегда находит только 1-ю
s:=FindWindow("TForm1",nil);
x:=FindWindowEx(s,0,"TPageControl" ,nil);
a:=FindWindowEx(x,0,"TPanel" ,nil);
f:=FindWindowEx(x,0,"TPanel" ,nil);
← →
begin...end © (2006-08-30 18:19) [1]FindWindowEx(x, a, "TPanel", nil)
← →
Sesh (2006-08-31 09:44) [2]написал так, помогло, теперь на ней ищу объект TPageControl и почему-то не находит хотя знаю точно что есть, и именно такой объект (проверил window scanner"om), а как мне можно получить список всех объектов, находящихся на TPanel?
← →
Handle © (2006-08-31 11:53) [3]
> а как мне можно получить список всех объектов, находящихся
> на TPanel?
Можно вот таким вот извращённым способом придуманным мной в прошлом году, только сильно не бейте.uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
ComCtrls, Buttons, StdCtrls, ShellAPI, ExtCtrls;
const
WH_Mouse_LL = 14;
type
TForm1 = class(TForm)
ListView1: TListView;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
private
public
end;
var
Form1: TForm1;
Mouse_SysHook: HHOOK;
Wnd: hWnd;
ChWnd: hWnd;
WndText: string;
WndClassName: array [0..MAX_PATH] of CHar;
implementation
{$R *.dfm}
function Mouse_SysMsgProc(code: integer;
wParam: longint; lParam : longint):longint; stdcall;
var
HWndParents: Longint;
begin
if (Code=HC_ACTION) then
if (wParam = WM_MOUSEMOVE) then
begin
// Parents -------------------------------------------------------------------
ChWnd:= WindowFromPoint(Mouse.CursorPos);
if ChWnd <> Wnd then
begin
Wnd:= WindowFromPoint(Mouse.CursorPos);
Form1.ListView1.Clear;
GetClassName(Wnd, WndClassName, SizeOf(WndClassName));
SetLength(WndText, SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0)+1);
SendMessage(Wnd, WM_GETTEXT, length(WndText), Integer(PChar(WndText)));
with Form1.ListView1.Items.Add do
begin
Data := Pointer(clGray);
Caption:= "000";
SubItems.Add(IntToStr(Wnd));
SubItems.Add(WndClassName);
SubItems.Add(WndText);
end;
while Wnd <> 0 do
begin
HWndParents:= GetWindowLong(Wnd,GWL_HWNDPARENT);
Wnd:= GetParent(Wnd);
GetClassName(HWndParents, WndClassName, SizeOf(WndClassName));
SetLength(WndText, SendMessage(HWndParents, WM_GETTEXTLENGTH, 0, 0)+1);
SendMessage(HWndParents, WM_GETTEXT, length(WndText), Integer(PChar(WndText)));
if HWndParents <> 0 then
with Form1.ListView1.Items.Add do
begin
Caption:= "00" + IntToStr(Form1.ListView1.Items.Count - 1);
SubItems.Add(IntToStr(HWndParents));
SubItems.Add(WndClassName);
SubItems.Add(WndText);
end;
end;
end;
end;
Wnd:= WindowFromPoint(Mouse.CursorPos);
Result := CallNextHookEx(Mouse_SysHook, Code, wParam, LParam);
end; // End of function Mouse_SysMsgProc
procedure TForm1.FormCreate(Sender: TObject);
begin
Mouse_SysHook := SetWindowsHookEx(WH_Mouse_LL, @Mouse_SysMsgProc, HInstance, 0);
end; // End of procedure TfrmWinInfo.FormCreate
procedure TForm1.FormDestroy(Sender: TObject);
begin
if Mouse_SysHook <> 0 then
UnhookWindowsHookEx(Mouse_SysHook);
end; // End of procedure TfrmWinInfo.FormDestroy
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
Sender.Canvas.Font.Color := TColor(Item.Data);
end; // End of procedure TfrmWinInfo.ParentsListViewCustomDrawItem
← →
Handle © (2006-08-31 11:56) [4]ListView1.ViewStyle:= vsReport;
Страницы: 1 вся ветка
Текущий архив: 2006.10.08;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.046 c