Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
8-1090389409
Игорь Н.
2004-07-21 09:56
2004.10.17
Как засунуть .bmp внутрь .exe шника?


1-1096707265
zStas
2004-10-02 12:54
2004.10.17
idBase64Encoder


1-1096628964
It06
2004-10-01 15:09
2004.10.17
Формат даты


1-1096646043
Homa_Programer
2004-10-01 19:54
2004.10.17
Перенос текста на новую страницу...


1-1096652804
UserUserov
2004-10-01 21:46
2004.10.17
Поиск файлов




   Наверх