Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.46 MB
Время: 0.034 c
8-1090686879
fess
2004-07-24 20:34
2004.10.17
Компоненты для работы с графикой


1-1096545408
Kost
2004-09-30 15:56
2004.10.17
Проблема белеющей формы


14-1096344369
КаПиБаРа
2004-09-28 08:06
2004.10.17
Настройка оперы


1-1096898854
redlord
2004-10-04 18:07
2004.10.17
запись в начало файла


3-1095764757
stud
2004-09-21 15:05
2004.10.17
вопрос по событиям в interbase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский