Перенесите окно оперы на передний план!

Не могли бы вы помочь мне понять, как вывести окно Opera на передний план, используя имя класса?! Я использую следующую процедуру, чтобы вывести другие приложения на передний план, и она работает нормально. Мне нужно использовать только имя класса, а не заголовок окна. Если вместо этого я использую заголовок окна, процедура работает. Вот процедура:

procedure SwitchToThisWindow(h1: hWnd; x: bool); stdcall;
external user32 Name 'SwitchToThisWindow';

procedure Opera;
var
Wnd:HWND;
begin
Wnd:= FindWindow(PChar('OpWindow'),nil);
 if (Wnd <> 0) then SwitchToThisWindow(Wnd, True) ;
////////////////////////////////////////////////////

person serhiyiv    schedule 25.04.2010    source источник
comment
SwitchToThisWindow — это зло, вы должны уважать пользователя и использовать SetForegroundWindow   -  person Anders    schedule 25.04.2010


Ответы (1)


Глядя на Opera 10.50, вы видите более одного окна с классом OpWindow, другие окна кажутся скрытыми, поэтому вы должны запустить FindWindow(Ex) в цикле или использовать EnumWindows и искать, пока не найдете видимое окно OpWindow. (Это, вероятно, вызовет проблемы, когда Opera находится в трее)

Итак, без фактического тестирования, я предполагаю, что вам придется искать видимое окно OpWindow или окно OpWindow с непустым заголовком (или, возможно, искать OpWindow с определенным стилем (WS_OVERLAPPEDWINDOW или WS_EX_WINDOWEDGE))

Следует также отметить, что все это является внутренними деталями Opera и может измениться в следующей версии и т. д.

person Anders    schedule 25.04.2010