Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизПоднять окно excel. Найти похожие ветки
← →
samalex (2004-10-05 17:36) [0]Уважаемые знатоки!!! Помогите решить проблему.
Есть оболочка, программа, написанная другими людьми, которая создает окна-документы, видимо, посредством VBA. Так вот, эти окна прячутся под саму оболочку. Я посмотрел, в процессах они называютя Excel.exe.
Вопрос, как эти окна искать и выталкивать на передний план. Написать резидентную программу. В принципе это возможно?
← →
olookin © (2004-10-05 17:43) [1]Возможно. Можно определять их по содержимому имени окна - окна Excel содержат текст Microsoft Excel. Определять handle такого окна и работать с ним...
← →
Роман Снегирев (2004-10-05 17:59) [2]Excel.Visible:=True
← →
samalex (2004-10-05 18:32) [3]Я не сам создаю Excel-объект, а ищу уже готовый и мне нужно вывести его наверх.
← →
programania © (2004-10-05 18:40) [4]FindWindow+F1
SetForegroundWindow+F1
← →
olookin © (2004-10-05 18:41) [5]Вот этот пример (при небольшом видоизменении) делает именно отображение исходно скрытого окна Excel
procedure TForm1.Activateapplication1Click(Sender: TObject);
var tl: string;
begin
tl:=selecteditem.Caption; h:=Form1.Handle; h1:=h; no:=false;
while no=false do begin h:=GetNextWindow(h,GW_HWNDNEXT);
if h=0 then no:=true; GetWindowText(h,p,255); s:=StrPas(p);
if s=tl then begin ShowWindow(h,SW_RESTORE); SetForegroundWindow(h);
RedrawWindow(h,0,0,RDW_VALIDATE and RDW_UPDATENOW and RDW_ALLCHILDREN);
no:=true; break; end; end;
if no=false then begin h:=h1;
while no=false do begin h:=GetNextWindow(h,GW_HWNDPREV);
if h=0 then no:=true; GetWindowText(h,p,255); s:=StrPas(p);
if s=tl then begin ShowWindow(h,SW_RESTORE); SetForegroundWindow(h);
RedrawWindow(h,0,0,RDW_VALIDATE and RDW_UPDATENOW and RDW_ALLCHILDREN);
no:=true; break; end; end; end;
end;
← →
samalex (2004-10-06 10:06) [6]programania
procedure TF_Menu00.Button1Click(Sender: TObject);
var
Wnd, Wnd1 : integer;
buff : ARRAY[0.. 127] OF Char;
_Handle : HWND;
begin
Wnd := GetWindow(Application.Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO
BEGIN
GetWindowText (Wnd, buff, sizeof (buff ));
If (Trim(StrPas(buff))="График") then
begin
SetForegroundWindow(Wnd);
Exit;
end;
Wnd := GetWindow (Wnd, gw_hWndNext);
END;
По нажатию этой кнопки окно с Title "График" находится и выводится на передний план. Но мне нужна автоматическая работа - без нажатия кнопки. Я поставил таймер с интервалом 1 сек и обработчиком поставил эту функцию. Проблема - программа работает, если окно этой программы активно, если нет, то "График" не поднимается. Пробовал ставить
SetActiveWindow(Application.Handle);
не помогает.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.159 c