Текущий архив: 2004.08.22;
Скачать: CL | DM;
Вниз
как hwnd можно узнать? Найти похожие ветки
← →
sergeii © (2004-07-05 17:55) [0]Может кто знает как узнать hwnd компонента програмы, но не знаю на цхиом написана програма.
Спасибо
← →
clickmaker © (2004-07-05 18:06) [1]FindWindow
← →
Digitman © (2004-07-05 18:10) [2]
> sergeii © (05.07.04 17:55)
в общем случае - никак
в частном случае нужно быть уверенным, что компонент (точнее - контрол) действительно имеет собственное окно, т.е. он не "рисованый" на "чужом" окне, и нужно знать класс этого окна и/или подпись (имя) этого окна .. только тогда есть шансы нахождения окна
← →
sergeii © (2004-07-07 16:00) [3]извените, аказиваетса проблема в том что ето окно зависимо от первого окна, тоесть пока незакроеш первое окно ницхего не мжеш делать со вторым (с нужным окном). Бот етого второго окна hwnd и нужно узнать.
Спасибо
← →
Digitman © (2004-07-07 16:28) [4]
> ницхего не мжеш делать со вторым
а что с ним нужно сделать-то ?
← →
sergeii © (2004-07-07 16:47) [5]window1_hwnd {:HWND} := FindWindow(nil, "Select PLU to Edit");
button1_hwnd {:HWND} := FindWindowEx(window1_hwnd, 0, nil ,"OK");
edit_hwnd {:HWND} := FindWindowEx(window1_hwnd, 0, "TComboBox",nil);
ClipBoard.AsText:="123" ;
SendMessage(edit_hwnd,WM_SETTEXT,0,0);
SendMessage(edit_hwnd,WM_PASTE,0,0);
SendMessage(button1_hwnd, BM_CLICK,0,0);
window2_hwnd:=getnextwindow(window1_hwnd,GW_HWNDNEXT);
button1_hwnd {:HWND} := FindWindowEx(window1_hwnd, 0, nil ,"Cancel");
showmessage(inttostr(window2_hwnd));
showmessage(inttostr(button1_hwnd));
SendMessage(button1_hwnd, BM_CLICK,0,0);
надо на второй форме нажать кнопочку, но повидемому вследствии того что вторая форма становитса активной програма перестает работать и кнопка не жмётса.
← →
Digitman © (2004-07-07 16:59) [6]ну так и пошли первой форме WM_ACTIVATE перед тем как посылать BM_CLICK кнопке
← →
sergeii © (2004-07-07 17:18) [7]всёравно чтото не то, запускаю я програму и потом свою програму, моя програма находит первое окно находит на нём edit и button1 в edit она вводит 123 и жмёт button1, тогда поябляетса второе окошко, которое оказиваетса поверх всех окон и ето окно становитса активным, на етом окне две кнопки OK и Cancel таквот ни одна из етих кнопок не жмчтса. Может изза того что моя програмка не активная у меня такие проблемы. Ошибку нашол может ви не поняли, должно быть так
window2_hwnd:=getnextwindow(window1_hwnd,GW_HWNDNEXT);
button2_hwnd {:HWND} := FindWindowEx(window2_hwnd, 0, nil ,"Cancel");
SendMessage(button2_hwnd, BM_CLICK,0,0);
← →
Digitman © (2004-07-07 17:31) [8]а ты уверен, что button2_hwnd <> 0 перед посылкой BM_CLICK ?
с чего ты взял, что getnextwindow() вернет хэндл именно того окна, кнопка Cancel на котором тебя интересует ?
вместо сомнительного getnextwindow() ищи второе окно точно так же как первое - по FindWindow()
← →
sergeii © (2004-07-07 17:41) [9]по FindWindow()возвращает 0 getnextwindow() возвращает <>0, почему FindWindow()=0 незнаю может окно возникает после того как он ищет а может ещё что, я пытался делать задержки
while(i<100000) do i:=i+1; ето всёравно не помогает найти окно и нажать кнопку. Что можно попытатся сделать????
Спасибо
← →
Digitman © (2004-07-07 17:49) [10]
> по FindWindow()возвращает 0
это значит что либо параметры неверные задаешь (неверное имя окна) либо искомое окно не является верхнеуровневым (создается как дочернее к какому-либо окну)
возьми на вооружение граф.утилиту WinSight32.exe в составе Делфи и посмотри на искомое окно повнимательней - его имя, уровень и т.д., сравни со своими данными, получаемыми программно
для перечисления верхнеуровневых и дочерних окон в поисках нужного так же можно воспользоваться ф-циями EnumWindows и EnumChildWindows, зачастую они дают лучшие результаты чем FindWindow[Ex]
← →
sergeii © (2004-07-08 09:42) [11]Может есть ещё програма которая показивала тоже как и WinSight32.exe только активного окна или тех елемнтов на которые показываеш. Спасибо
← →
Digitman © (2004-07-08 09:47) [12]
> sergeii © (08.07.04 09:42) [11]
есть.
SpyXX.exe - утилита в составе MS VisualStudio
← →
sergeii © (2004-07-08 09:57) [13]Удалено модератором
Примечание: Личная переписка
← →
Digitman © (2004-07-08 11:19) [14]Удалено модератором
Примечание: Личная переписка
← →
sergeii © (2004-07-08 11:33) [15]Так вот ещё сделал фотографии того что у меня получаетса но ни поиму по чему не хорошо. поставил на форму таимер и сделал цикл ожидания появления формы
while(FindWindow(nil, "Select PLU to Edit")=0)do
begin
form1.Timer1.Interval:=5000;
label4.Caption:=label4.caption+" 0";
form1.Timer1.Interval:=0;
end;
с первои формой хорошо она появляетса и из цикла выходит а вот пойавляетса вторая форма как моя програмка подвисает.
С второй формой такая ситуация что пока её не закроеш нельзя перейти ни к первои форме ни к дрыгим програмы модулям.
Имею могу выслать может станет чуть ясно что я имею ввиду
Спасибо
procedure TForm1.Button1Click(Sender: TObject);
var window1_hwnd,window2_hwnd,button1_hwnd,button2_hwnd,edit_hwnd : HWND;
i,k,len : integer;
begin
while(FindWindow(nil, "Select PLU to Edit")=0)do
begin
form1.Timer1.Interval:=5000;
label4.Caption:=label4.caption+" 0";
form1.Timer1.Interval:=0;
end;
window1_hwnd {:HWND} := FindWindow(nil, "Select PLU to Edit");
button1_hwnd {:HWND} := FindWindowEx(window1_hwnd, 0, nil ,"OK");
label4.Caption:=inttostr(window1_hwnd);
label5.Caption:=inttostr(button1_hwnd);
edit_hwnd {:HWND} := FindWindowEx(window1_hwnd, 0, "TComboBox",nil);
label6.Caption:=inttostr(edit_hwnd);
ClipBoard.AsText:="123" ;
SendMessage(edit_hwnd,WM_SETTEXT,0,0);
SendMessage(edit_hwnd,WM_PASTE,0,0);
SendMessage(button1_hwnd, BM_CLICK,0,0);
while(FindWindow("TEditPLU", "Edit PLU")=0)do
begin
form1.Timer1.Interval:=5000;
label9.Caption:=label9.caption+" 0";
form1.Timer1.Interval:=0;
end;
window2_hwnd {:HWND} := FindWindow("TEditPLU", "Edit PLU");
button2_hwnd {:HWND} := FindWindowEx(window2_hwnd, 0, "TBitBtn" ,"Cancel");
SendMessage(button2_hwnd, BM_CLICK,0,0);
showmessage(inttostr(window2_hwnd)+" "+inttostr(button2_hwnd));
showmessage("Конец Програмы");
end;
← →
sergeii © (2004-07-08 12:23) [16]И ещё заметил что моя програмка после запуска второго окна перестаёт работать, когда закрываеш ето злощасное второе окно програмка доканчивает работу, что ето может быть
← →
Digitman © (2004-07-08 12:35) [17]
> а вот пойавляетса вторая форма как моя програмка подвисает.
потому что она крутится в бесконечном цикле
while(FindWindow("TEditPLU", "Edit PLU")=0)do
begin
form1.Timer1.Interval:=5000;
label9.Caption:=label9.caption+" 0";
form1.Timer1.Interval:=0;
end;
условие выхода из цикла - нахождение окна верхнего уровня
значит, окно не найдено, раз цикл бесконечный
Страницы: 1 вся ветка
Текущий архив: 2004.08.22;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.051 c