Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Other WindowS

1.8K
17 апреля 2006 года
LastSoul
279 / / 28.12.2005
Знаю такую функцию:
var h:HWND;
h:=FindWindow(nil,'Мой компУтер');
но она относится только к одному окну :(
а как можно найти другие окна у которых неизвестны
названия окна :x , может какойнить цикл или еще ченить вроде етого...
и еще какой функцией можно к этим окнам присвоить AlphaBlendValue :???: :???: :???:
Сам чето пытался намудрить но никаких положительных результатов не получалось

Подскажите пожалуста если кто знает :roll:
P.S.: охота все окна в винде немного прозрачными сделать:P :P :P
_
5
17 апреля 2006 года
hardcase
4.5K / / 09.08.2005
Перечислит все топ-левел окна на указанном десктопе.
 
Код:
BOOL EnumDesktopWindows(

    HDESK hDesktop, // handle to desktop to enumerate
    WNDENUMPROC lpfn,   // points to application's callback function
    LPARAM lParam   // 32-bit value to pass to the callback function
   );

Передаст их все в функцию вида
 
Код:
function EnumProc(Handle: THandle; Param: pointer): BOOL; stdcall;
  begin
    Result:=true; // продолжить перечисление
    Result:=false; // остановить перечисление
  end;

Да, получить хэндл десктопа можно так:
 
Код:
GetThreadDesktop(GetCurrentThreadId)


С полученным хэндлом окошка мы можем делать многое, например перечислить все дочерние окна
 
Код:
BOOL EnumChildWindows(

    HWND hWndParent,    // handle to parent window
    WNDENUMPROC lpEnumFunc, // pointer to callback function
    LPARAM lParam   // application-defined value
   );

или сделать окошко прозрачным с помощью
 
Код:
BOOL SetLayeredWindowAttributes(      
    HWND hwnd,
    COLORREF crKey,
    BYTE bAlpha,
    DWORD dwFlags
);


P.S. В да найдёшь ты ответы на все вопросы здесь
5.3K
17 апреля 2006 года
r000n_m
177 / / 26.02.2006
А если перебирать все дескрипторы начиная с нуля и смотреть, существует окно с таким дескриптором? Долго, конечно, зато надежно
5
17 апреля 2006 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by r000n_m
А если перебирать все дескрипторы начиная с нуля и смотреть, существует окно с таким дескриптором? Долго, конечно, зато надежно

Ты понял что сказал-то? HWND - это 32 разрядное беззнаковое целое!!!
их, да будет тебе известно 4294967296 штук. Твой комп будет пару дней их перебирать!

5.3K
17 апреля 2006 года
r000n_m
177 / / 26.02.2006
Согласен, глупость сморозил
1.8K
18 апреля 2006 года
LastSoul
279 / / 28.12.2005
Спасибо за помощь...
с AlphaBlend разобрался, но только через FindWindow, а вот чтобы другие окна искать чет покачто не врубаюсь
>
5
18 апреля 2006 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by LastSoul
Спасибо за помощь...
с AlphaBlend разобрался, но только через FindWindow, а вот чтобы другие окна искать чет покачто не врубаюсь
>


Ты читал описание функций?
Ладно. Вот пример перечисления всех топ-левел окон на текущем десктопе:

Код:
procedure EnumProc(Wnd: THandle; Param: integer): BOOL; stdcall;
begin
// делаешь с хэндлом Wnd всё что захочешь.
Result:=true;
end;

....
begin
// винда САМА перечислит все окна указанного рабочего стола
//  и передаст их хэндлы в EnumProc, которыю ты сам должен определить
 
EnumDesktopWindows( GetThreadDesktop(GetCurrentThreadId),  @EnumProc, 0);
end;
1.8K
18 апреля 2006 года
LastSoul
279 / / 28.12.2005
Спасибо...

твой код очень помог - все окна становяться прозрачными,
но тут возникает проблема, фон рабочего стола становиться прозрачным,
вернее картинка рабочего стола (за ней черный фон) короче AlphaBlend у нее
примерно на 100 ставиться, и даже если потом в проге поставить 255
у картинки AlphaBlend не меняется (остается около 100)
Может это у меня винда гонит!?...

У меня другой вариант возник - в таймер затолкать код который будет менять
AlphaBlend у окон когда они будут активным
(ведь при открытии окна оно всегда становиться активным),
 
Код:
h:=GetForegroundWindow;
 SetWindowLong(h, GWL_EXSTYLE, GetWindowLong(h, GWL_EXSTYLE) Or WS_EX_LAYERED);
 SetLayeredWindowAttributes(h, 0, 220, LWA_ALPHA);

при этом никаких проблем с картинкой рабочего стола небыло...
>
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог