Главная страница
    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.45 MB
Время: 0.037 c
1-1096799916
vint45
2004-10-03 14:38
2004.10.17
Выделенные ячейки в Excel


1-1096479986
xman
2004-09-29 21:46
2004.10.17
TreeView


9-1087116065
Жора
2004-06-13 12:41
2004.10.17
Проблемы с клавиатурой


4-1095111547
Jetus
2004-09-14 01:39
2004.10.17
Набор тел.номера модемом


1-1096647667
quickblack
2004-10-01 20:21
2004.10.17
pchar





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский