Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2011, 14:00   #21
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

2-3 раза в секунду (с помощью таймера) проверяй наличие окон с заголовками названия которых указаны в ListBox

Код:
Button.Enabled := False;
winHandle:= GetActiveWindow (или GetForegroundWindow)
wintext:=getwindowtext(winHandle);
for i:=0 to ListBox.Count-1 do
 if wintext=listbox.items[i] then Button.Enabled := True;
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 14.10.2011, 14:16   #22
KWN, lnc
Delphi 7
Форумчанин
 
Аватар для KWN, lnc
 
Регистрация: 10.02.2009
Сообщений: 354
По умолчанию

прелесть в том что он не должен сбрасываться.
я заметил
Код:
Button.Enabled := False;
winHandle:= GetActiveWindow (или GetForegroundWindow)
wintext:=getwindowtext(winHandle);
for i:=0 to ListBox.Count-1 do
// после снова проверяет и включает
if wintext=listbox.items[i] then Button.Enabled := True;
то есть он сбрасывает а после снова проверяет (((
Дайте мне власть и я переверну ваш мир!...
KWN, lnc вне форума Ответить с цитированием
Старый 14.10.2011, 15:22   #23
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

сброс кнопки вначале нужен для реализации вот этого
Цитата:
Сообщение от KWN, lnc Посмотреть сообщение
после того как мы закрываем указанный заголовок или переклчаем окно - тогда Button.Enabled := False;
т.е. если искомое окно будет активным то кнопка будет доступной, если нет, то условние if wintext=listbox.items[i] then Button.Enabled := True; не будет выполнено и кнопка останется неактивной
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 14.10.2011, 15:49   #24
KWN, lnc
Delphi 7
Форумчанин
 
Аватар для KWN, lnc
 
Регистрация: 10.02.2009
Сообщений: 354
По умолчанию

теперь поправочка..
куда его впаять?
Код:
function EnumWindowsProc(hw:HWND; i:Cardinal):boolean;
var str:array[0..255]of char;
    e:dword;
begin
if IsWindowVisible(hw) then begin
  SendMessage(hw,WM_GETTEXT,length(str),lparam(@str[1]));
Form1.Button.Enabled := False;
winHandle:= GetActiveWindow{ (èëè GetForegroundWindow)}
wintext:=getwindowtext(winHandle);
for i:=0 to Form1.ListBox.Count-1 do
 if wintext=Form1.listbox.items[i] then Form1.Button.Enabled := True;

end;
result:=true;
end;
не то
Дайте мне власть и я переверну ваш мир!...
KWN, lnc вне форума Ответить с цитированием
Старый 14.10.2011, 16:04   #25
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

зачем Вам EnumWindows если нужно только активное окно?
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 14.10.2011, 20:52   #26
KWN, lnc
Delphi 7
Форумчанин
 
Аватар для KWN, lnc
 
Регистрация: 10.02.2009
Сообщений: 354
Восклицание

Код:
var
 winHandle: THandle;
 wintext: String;
begin
Button.Enabled := False;
winHandle:= GetActiveWindow;
wintext:=getwindowtext(winHandle);
for i:=0 to ListBox.Count-1 do
 if wintext=listbox.items[i] then Button.Enabled := True;
end;
что не так?

я сделал так

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
 i: integer;
begin
Button.Enabled := False;
for i:=0 to ListBox1.Count -1 do
 if GetWindow = listbox1.items[i] then Button.Enabled := True;
end;
все работает, вот только мне не нравиться что он сначало выключает а после только включает ((( не должно быть сбоев ((( пожалуста подскажите как исправить ((( вот почему я создал эту тему (((

да и вот еще что, этот пример отслеживает, только строго указанные заголовки.. то есть если указанно "Безымянный - Блокнот" он фиксирует нормально! а если "Блокнот" то он уже не работает (((( а вот предыдушая функия EnumWindowsProc дедала как надо !! выручайте УВАЖАЕМЫЙ ПРОГРАММИСТЫ!!!!
Дайте мне власть и я переверну ваш мир!...

Последний раз редактировалось KWN, lnc; 14.10.2011 в 22:12.
KWN, lnc вне форума Ответить с цитированием
Старый 14.10.2011, 22:26   #27
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

Цитата:
Сообщение от KWN, lnc Посмотреть сообщение
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
 i: integer;
begin
Button.Enabled := False;
for i:=0 to ListBox1.Count -1 do
 if GetWindow = listbox1.items[i] then Button.Enabled := True;
end;
все работает, вот только мне не нравиться что он сначало выключает а после только включает ((( не должно быть сбоев ((( пожалуста подскажите как исправить ((( вот почему я создал эту тему (((
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
 i: integer;
 finded:boolean;
begin
finded:=false;
for i:=0 to ListBox1.Count -1 do
 if GetWindow = listbox1.items[i] then finded := True;
Button.Enabled:=finded;
end;

Цитата:
Сообщение от KWN, lnc Посмотреть сообщение
да и вот еще что, этот пример отслеживает, только строго указанные заголовки.. то есть если указанно "Безымянный - Блокнот" он фиксирует нормально! а если "Блокнот" то он уже не работает (((( а вот предыдушая функия EnumWindowsProc дедала как надо !!
своей головой когда думать будем?
Код:
if pos(AnsiUpperCase(Form1.ListBox1.Items[e]),AnsiUpperCase(<переменная с заголовком окна>))>0 then finded:=true;
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 14.10.2011, 23:03   #28
KWN, lnc
Delphi 7
Форумчанин
 
Аватар для KWN, lnc
 
Регистрация: 10.02.2009
Сообщений: 354
По умолчанию

уважаемый программист haruhi
сделайте пожалуйста исходник примера с
Код:
if pos(AnsiUpperCase(Form1.ListBox1.Items[e]),AnsiUpperCase(<переменная с заголовком окна>))>0 then finded:=true;
Дайте мне власть и я переверну ваш мир!...
KWN, lnc вне форума Ответить с цитированием
Старый 15.10.2011, 09:21   #29
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

если у вас GetWindow это функция для получения заголовка активного окна, то надо так

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
 i: integer;
begin
Button.Enabled := False;
for i:=0 to ListBox1.Count -1 do
 if pos(AnsiUpperCase(Form1.ListBox1.Items[e]),AnsiUpperCase(GetWindow))>0 then finded:=true;
end;
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 15.10.2011, 13:39   #30
KWN, lnc
Delphi 7
Форумчанин
 
Аватар для KWN, lnc
 
Регистрация: 10.02.2009
Сообщений: 354
По умолчанию

haruhi? огромное человеческое спасибо! ДУМАЮ, ТЕМУ МОЖНО ЗАКРЫВАТЬ )))) всем спасибо за участие..
Дайте мне власть и я переверну ваш мир!...
KWN, lnc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
window.document.write и window.alert() Syltan JavaScript, Ajax 0 26.08.2010 21:32
Программирование в X Window TheVampire Общие вопросы C/C++ 1 04.10.2009 19:14
Immediate Window ZORRO2005 Microsoft Office Excel 1 24.05.2008 16:23