WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  помогите разобраться, плиз

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   помогите разобраться, плиз
sleeps опубликован 07-02-2002 09:23 MSK   Click Here to See the Profile for sleeps   Click Here to Email sleeps  
ситуация такая, я конечно извиняюсь, что засоряю топик такими нелепостями, но когда я учился ентого не было, а мои знакомые профессиональные программисты не смогли ответить полно на мой вопрос. Что такое Handle, это диапазон памяти или адрес, или еще что-то? Единственное, я уже начитался по ентому вопросу на "родном" языке, и не особо понял, термины облегчают фразу на слова, но прячут смысл от непосвященных. Проблема у меня следующая, я никак не могу понять, это статическая вещь или динамическая, почему если попросить прогу выдать список запущенных программ по алгоритму ниже, то результат сильно зависит от наличия/отсутствия комментариев перед строкой минимизации? Поясните мне, плиз, если не сложно, я понимаю, что вопрос слишком примитивный чтобы засорять топик, поэтому не обижусь если получу письмо :)
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i;
HWND winhandle;
char buff[127];
winhandle = GetWindow(Handle,GW_HWNDFIRST);
for(i=1;winhandle!=0;i++)
{if ((winhandle!=Application->Handle)&&(IsWindowVisible(winhandle))&&(GetWindow(winhandle,GW_OWNER) == 0)&&(GetWindowText(winhandle,buff, sizeof(buff))))
{
GetWindowText(winhandle, buff, sizeof(buff));
ListBox1->Items->Add(StrPas(buff));

// ShowWindow(minihandle,SW_MINIMIZE);} */
}
winhandle = GetWindow(winhandle,GW_HWNDNEXT);
}
Label1->Caption=IntToStr(i);
}

ADK опубликован 07-02-2002 10:39 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
В основном хэндлы это указатели на структуры ядра системы, но могут быть чем угодно. Да и не нужно, чтобы они что-то означали. Программист должен воспринимать их как абстракции.
server_mouse опубликован 07-02-2002 10:45 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
HANDLE-ы -- объекты ядра. В общем случае всё сводится на void*.
IMHO они являют собой ещё и ресурс системы, т.е. их количество ограничено, потому мелкомягкий и рекомендует не забывать CloseHandle();
sleeps опубликован 07-02-2002 11:17 MSK     Click Here to See the Profile for sleeps  Click Here to Email sleeps     
спасибо, не совсем понятно, но если это не суть важно, то ладно, просто я второй день бьюсь над тем, что у меня поностью игнорируется условие:
winhandle == Application->Handle

то есть я хочу свернуть все окна кроме моего, в цикле получаю следующий хандл, проверяю его на видимость, свернутость и не моё ли это окно и минимизирую... моё минимизируется вместе со всеми и на мольбы стать вновь активным реагировать отказывается...

sleeps опубликован 07-02-2002 11:20 MSK     Click Here to See the Profile for sleeps  Click Here to Email sleeps     
да, и там ошибка - minihandle это winhandle, только там шла временная переменная, ну почему список задач зависит от того, сворачиваю я окна или нет, только из-за того, что SW_MINIMIZE возвращает мне следующий хандл?
ADK опубликован 07-02-2002 11:30 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
А ты в курсе, что в VCL Applicatioin->Handle вовсе не то окно, которое ты видишь?
sleeps опубликован 07-02-2002 11:45 MSK     Click Here to See the Profile for sleeps  Click Here to Email sleeps     
нет... я же говорю, с хенделами я еще совсем почти не дружу... но я уже нагляделся вчера на интреснейший эффект.
если по таймеру на свернутом окне пройдет команда:
ShowWindow(Application->Handle,SW_MAXSIMIZE),
то мое окно остается свернутым, а то, что разворачивается даже имени не имеет...
One опубликован 07-02-2002 14:12 MSK     Click Here to See the Profile for One  Click Here to Email One     
Это надо знать - в Билдере все окна, с которыми ты работаеш имеют хендлы: Form1->Handle, Form2->Handle... Application - это родительское окно для всех окон (форм).
В твоем случае надо вместо if((winhandle!=Application->Handle)... писать if((winhandle!=Handle)...

А вообще лучше забей на GetWindow и используй EnumWindows.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.