Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 19:40   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы уверены что указали верное имя класса окна? есть способы и сложнее
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.12.2010, 20:13   #12
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Класс окна я получил следующим образом:
Код:
var
aName: array [0..255] of Char;
BrowserH: HWND;
str:string;
begin
PT.x:=400; PT.Y:=400; //координаты центра flash окна в twebbrowser
Pt := ClientToScreen(Pt);
BrowserH:=windows.WindowFromPoint(PT);
str:=string(GetClassName(BrowserH, aName, 256));//получаем класс по хендлу
{postmessage отправляю команды полученному хендлу, всё работит}
BrowserH:=FindWindowEx(webbrowser1.Handle,0,str,nil);//получаю хендл предложенным вами способом
{postmessage отправляю команды полученному заного полученному хендлу, ноль эмоций}
end;

Последний раз редактировалось stlcrash; 12.12.2010 в 20:15.
stlcrash вне форума Ответить с цитированием
Старый 13.12.2010, 17:26   #13
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Вопрос всё ещё актуален... Программа стоит на месте из за одного дурацкого идентификатора флешки
stlcrash вне форума Ответить с цитированием
Старый 14.12.2010, 05:03   #14
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Переделал код
Код:
Function GetHinstanse(WD:HWND): LongInt;
Begin
  Result:=GetWindowLong(Wd, GWL_HWNDPARENT);
End;


procedure TForm1.GetHWNDClick(Sender: TObject);
var
PT:TPOINT;
PARENT,BrowserH,HWndFromFindWindowEx:hwnd;
Nm:Array[0..255] of Char;  // буфер для имени
Cs: Array[0..255] of Char; // буфер для класса
begin
KEI_LIST.lines.Add(#13);//разделитель
PT.x:=400; PT.Y:=400;
Pt := ClientToScreen(Pt);
BrowserH:=windows.WindowFromPoint(PT);//получаем HWND из координат
GetWindowText(BrowserH,Nm,255);       //заголовок
GetClassName(BrowserH, Cs, 256);      //класс
KEI_LIST.lines.Add('---VG.SWF------');
KEI_LIST.lines.Add(IntToStr(BrowserH));
KEI_LIST.lines.Add(string(Nm)+'|'+string(Cs));
KEI_LIST.lines.Add('----PARENT-----');
PARENT:=GetHinstanse(BrowserH);             //ищим родительское окно
KEI_LIST.lines.Add(IntToStr(PARENT));
GetWindowText(GetHinstanse(PARENT),Nm,255); //заголовок
GetClassName(GetHinstanse(PARENT), Cs, 256);//класс
KEI_LIST.lines.Add(string(Nm)+'|'+string(Cs));
KEI_LIST.lines.Add('---FindWindowEx--');
HWndFromFindWindowEx:=FindWindowEx(FindWindow('Shell DocObject View', ''),0,'MacromediaFlashPlayerActiveX',nil);
GetWindowText(HWndFromFindWindowEx,Nm,255);       //заголовок
GetClassName(HWndFromFindWindowEx, Cs, 256);      //класс
KEI_LIST.lines.Add(IntToStr(HWndFromFindWindowEx));
KEI_LIST.lines.Add(string(Nm)+'|'+string(Cs));
KEI_LIST.lines.Add('-----------------');
end;
Результат:
Цитата:
---VG.SWF------
789740
|MacromediaFlashPlayerActiveX
----PARENT-----
527470
|Shell DocObject View
---FindWindowEx--
0
|Shell DocObject View
-----------------


---VG.SWF------
789740
|MacromediaFlashPlayerActiveX
----PARENT-----
527470
|Shell DocObject View
---FindWindowEx--
0
|Shell DocObject View
-----------------


---VG.SWF------
789740
|MacromediaFlashPlayerActiveX
----PARENT-----
527470
|Shell DocObject View
---FindWindowEx--
0
|Shell DocObject View
-----------------
В чем может быть проблема?

Пробовал и так:
Код:
procedure TForm1.GetHWNDClick(Sender: TObject);
var
PT:TPOINT;
PARENT,HWndFromFindWindowEx:hwnd;
Nm:Array[0..255] of Char;  // буфер для имени
Cs,Cs1: Array[0..255] of Char; // буфер для класса
begin
KEI_LIST.lines.Add(#13);//разделитель
PT.x:=400; PT.Y:=400;
Pt := ClientToScreen(Pt);
BrowserH:=windows.WindowFromPoint(PT);//получаем HWND из координат
GetWindowText(BrowserH,Nm,255);       //заголовок
GetClassName(BrowserH, Cs, 256);      //класс
cs1:=cs;
KEI_LIST.lines.Add('---VG.SWF------');
KEI_LIST.lines.Add(IntToStr(BrowserH));
KEI_LIST.lines.Add(string(Nm)+'|'+string(Cs));
KEI_LIST.lines.Add('----PARENT-----');
PARENT:=GetHinstanse(BrowserH);             //ищим родительское окно
KEI_LIST.lines.Add(IntToStr(PARENT));
GetWindowText(GetHinstanse(PARENT),Nm,255); //заголовок
GetClassName(GetHinstanse(PARENT), Cs, 256);//класс
KEI_LIST.lines.Add(string(Nm)+'|'+string(Cs));
KEI_LIST.lines.Add('---FindWindowEx--');
HWndFromFindWindowEx:=FindWindowEx(FindWindow(Cs, nil),0,cs1,nil);
GetWindowText(HWndFromFindWindowEx,Nm,255);       //заголовок
GetClassName(HWndFromFindWindowEx, Cs, 256);      //класс
KEI_LIST.lines.Add(IntToStr(HWndFromFindWindowEx));
KEI_LIST.lines.Add(string(Nm)+'|'+string(Cs));
KEI_LIST.lines.Add('-----------------');
end;
Тот - же результат...

Последний раз редактировалось stlcrash; 14.12.2010 в 05:09.
stlcrash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести hwnd? GrindeX C++ Builder 2 25.11.2010 01:33
Отличия HWND и THandle Alex Cones Общие вопросы Delphi 5 06.09.2010 15:13
Узнать HWND компонента другого приложения Revenant Mar Sara Общие вопросы Delphi 1 16.07.2010 02:50
Incompatible types: 'Unit1.TWebBrowser' and 'SHDocVw.TWebBrowser' simon15x Общие вопросы Delphi 0 10.04.2010 03:11
Узнать HWND окна Ilshat89 Общие вопросы C/C++ 3 01.09.2009 22:30