Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
esaul123
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 4
1

обьясните что к чему winapi

06.08.2011, 20:34. Просмотров 1336. Ответов 12
Метки нет (Все метки)

исходник найден в интернете. почему окно становится активным, только если программа выполняющая этот код сама активна. если все это поместить в таймер, то пока программа активна, то всё норм, а если я делаю активным другое окно, то ничего не происходит.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN {Не показываем:}
  IF (Wnd <> Application.Handle) AND {-Собственное окно}
  IsWindowVisible(Wnd) AND {-Невидимые окна}
  (GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
  (GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
  THEN BEGIN
  GetWindowText(Wnd, buff, sizeof(buff));
  ListBox1.Items.Add(StrPas(buff));
  END;
  Wnd := GetWindow(Wnd, gw_hWndNext);
END;
ListBox1.ItemIndex := 0;
 
for i:=0 to ListBox1.Count-1 do
//if Pos('Калькулятор',ListBox1.Items[i])<>0 then begin
if Pos('Калькулятор',ListBox1.Items[i])<>0 then begin
h:=FindWindow(0,PAnsiChar(ListBox1.Items[i]));
 
BringWindowToTop(h);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2011, 20:34
Ответы с готовыми решениями:

Как увидеть то, что вернула функция WinApi?
например вот такая процедура procedure TForm1.btnSysDirClick(Sender: TObject);...

Обьясните
Народ вот браузер, может кто обьяснить как там организована история?

Обьясните схемку новичку не пойму что к чему.
Привет народ. Не пойму как сигнал от LC контура на базу поподает диод...

Вычесление простейшего выражения. народ если несложно обьясните что я зделал здесь неправильно и наглядным образом чтобы я понял как что делать.
Нужно вычислить выражения 2*17/7-1708/17*1992. Пожалуйста, зарание благодарен....

Объясните подробно данный код программы. Знаю что это фильтр а пошагово что к чему не понимаю
void __fastcall TForm1::suiButton7Click(TObject *Sender) { tdiag -&gt; Filtered...

12
anonimus
2154 / 1244 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
06.08.2011, 21:03 2
если тебе надо найти окно в заголовке которого есть "Калькулятор" и сделать его по верх остальных, то можно проще, зачем так усложнять
0
esaul123
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 4
06.08.2011, 21:30  [ТС] 3
это да, можно без listbox и всё короче сделать, я пробывал по другому, но проблема та же.
0
anonimus
2154 / 1244 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
06.08.2011, 22:19 4
хм... да странно, но тут проблема с функцией BringWindowToTop почему-то не переходит найденое окно поверх остальных, кстате SetForegroundWindow тоже
0
DenNik
Непрофессионал
1801 / 1410 / 307
Регистрация: 26.07.2011
Сообщений: 7,890
08.08.2011, 16:12 5
Вот. Работает. Фишка в том, что заголовок окна нужно полностью писать.

Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Button2Click(Sender: TObject);
var
  h: HWND;
begin
  h:= FindWindow(nil,'Калькулятор');
  if h <> 0 then
    SetForegroundWindow(h) else ShowMessage('Calc Not Found!');
end;
работает даже если окно не активно. А если чужое окно свернуто на панель задач, поможет код

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.Button2Click(Sender: TObject);
var
  h: HWND;
begin
  h:= FindWindow(nil,'Калькулятор');
  if h <> 0 then
  begin
    ShowWindow(h,SW_RESTORE);
    SetForegroundWindow(h);
  end else ShowMessage('Calc Not Found!');
end;
0
anonimus
2154 / 1244 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
08.08.2011, 16:40 6
Цитата Сообщение от DenNik Посмотреть сообщение
Фишка в том, что заголовок окна нужно полностью писать.
я так же пробовал, не становилось окно активно если окно моей программы не активно, начинала мигать на панели задач, но поверх остальных не переходило, пробовал на висте.
0
DenNik
Непрофессионал
1801 / 1410 / 307
Регистрация: 26.07.2011
Сообщений: 7,890
08.08.2011, 16:43 7
Цитата Сообщение от anonimus Посмотреть сообщение
я так же пробовал, не становилось окно активно если окно моей программы не активно, начинала мигать на панели задач, но поверх остальных не переходило, пробовал на висте.
я работаю на хрюшке. насчет висты не знаю. а по поводу мигания смотри мой второй код
0
anonimus
2154 / 1244 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
08.08.2011, 17:01 8
))) и так я делал
посылал SW_RESTORE окну. Работало если окно до этого было свернуто, но если окно перекрывало другое окно и скрыто окно моей формы, то не работало
0
DenNik
Непрофессионал
1801 / 1410 / 307
Регистрация: 26.07.2011
Сообщений: 7,890
08.08.2011, 17:13 9
вот, попробуй в таймере. запусти программу, сверни ее и погляди что получится. Интервал я выставил 5000.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Timer1Timer(Sender: TObject);
var
  h: HWND;
begin
  h:= FindWindow(nil,'Калькулятор Плюс');
  if h <> 0 then
  begin
    ShowWindow(h,SW_RESTORE);
    SetForegroundWindow(h);
  end else ShowMessage('Calc Not Found!');
  Timer1.Enabled:= false;
end;
я делал так. запускаю калькулятор, запускаю свою прогу, перекрываю калькулятор другим окном, жду. Работает
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
08.08.2011, 17:28 10
anonimus, верно говорит - при тех условиях окно не выдвинется вперёд. Я в своё время искал сведения в инете, как переместить окно на передний план, если оно перекрыто окнами других приложений. Оказалось, что это непростая задача. По крайней мере, в WinXP и более старших версиях принято правило, что только пользователь должен решать, какое приложение должно показать своё окно впереди.
0
anonimus
2154 / 1244 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
08.08.2011, 17:39 11
Цитата Сообщение от DenNik Посмотреть сообщение
Работает
может вся соль в ShowWindow(h,SW_RESTORE);
я пробовал посылать сообщение окну через sendmessage, ShowWindow не пробовал.
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
08.08.2011, 17:42 12
Не работает. anonimus, ты верно пишешь, что если окно перекрыто окнами других приложений, то на передний план тот код его не переместит. Я об этом уже в предыдущем посте упомянул.
0
anonimus
2154 / 1244 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
08.08.2011, 17:45 13
Цитата Сообщение от Mawrat Посмотреть сообщение
Не работает.
ок. А то счас не могу проверить
0
08.08.2011, 17:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2011, 17:45

Нужно описание исходного кода скринсейвера, т.е. где что происходит, что чему и для чего присваивается и т.д
unit unitMain; interface uses Windows, Classes, Graphics, Forms,...

си ++обьясните, что написать в конце, чтобы я мог ввести формат и написать на что его поменять и оно менялось н\
#include&lt;iostream&gt; #include&lt;string&gt; #include &lt;cstring&gt; using namespace std;...

обьясните что такое xml
Я особо не увлекался xml, но когда рылся в коде myspace.com, нашел такую вещь:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru