Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Поднять окно 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
14-1096282330
Vlad Oshin
2004-09-27 14:52
2004.10.17
Опять написал :)... Стих.


14-1096265624
TUser
2004-09-27 10:13
2004.10.17
Нейронные сети


1-1096802636
sdw_syscoder
2004-10-03 15:23
2004.10.17
TListView и TTreeView - виндовс испортил


4-1095152969
-SeM-
2004-09-14 13:09
2004.10.17
LoadLibrary


1-1096913802
Igor_
2004-10-04 22:16
2004.10.17
StringGrid и CheckBox