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
);
Other WindowS
var h:HWND;
h:=FindWindow(nil,'Мой компУтер');
но она относится только к одному окну :(
а как можно найти другие окна у которых неизвестны
названия окна :x , может какойнить цикл или еще ченить вроде етого...
и еще какой функцией можно к этим окнам присвоить AlphaBlendValue :???: :???: :???:
Сам чето пытался намудрить но никаких положительных результатов не получалось
Подскажите пожалуста если кто знает :roll:
P.S.: охота все окна в винде немного прозрачными сделать:P :P :P
_
Код:
Передаст их все в функцию вида
Код:
function EnumProc(Handle: THandle; Param: pointer): BOOL; stdcall;
begin
Result:=true; // продолжить перечисление
Result:=false; // остановить перечисление
end;
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
);
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
);
HWND hwnd,
COLORREF crKey,
BYTE bAlpha,
DWORD dwFlags
);
P.S. В да найдёшь ты ответы на все вопросы здесь
А если перебирать все дескрипторы начиная с нуля и смотреть, существует окно с таким дескриптором? Долго, конечно, зато надежно
Цитата:
Originally posted by r000n_m
А если перебирать все дескрипторы начиная с нуля и смотреть, существует окно с таким дескриптором? Долго, конечно, зато надежно
А если перебирать все дескрипторы начиная с нуля и смотреть, существует окно с таким дескриптором? Долго, конечно, зато надежно
Ты понял что сказал-то? HWND - это 32 разрядное беззнаковое целое!!!
их, да будет тебе известно 4294967296 штук. Твой комп будет пару дней их перебирать!
Согласен, глупость сморозил
с AlphaBlend разобрался, но только через FindWindow, а вот чтобы другие окна искать чет покачто не врубаюсь
>
Цитата:
Originally posted by LastSoul
Спасибо за помощь...
с AlphaBlend разобрался, но только через FindWindow, а вот чтобы другие окна искать чет покачто не врубаюсь
>
Спасибо за помощь...
с AlphaBlend разобрался, но только через FindWindow, а вот чтобы другие окна искать чет покачто не врубаюсь
>
Ты читал описание функций?
Ладно. Вот пример перечисления всех топ-левел окон на текущем десктопе:
Код:
procedure EnumProc(Wnd: THandle; Param: integer): BOOL; stdcall;
begin
// делаешь с хэндлом Wnd всё что захочешь.
Result:=true;
end;
....
begin
// винда САМА перечислит все окна указанного рабочего стола
// и передаст их хэндлы в EnumProc, которыю ты сам должен определить
EnumDesktopWindows( GetThreadDesktop(GetCurrentThreadId), @EnumProc, 0);
end;
begin
// делаешь с хэндлом Wnd всё что захочешь.
Result:=true;
end;
....
begin
// винда САМА перечислит все окна указанного рабочего стола
// и передаст их хэндлы в EnumProc, которыю ты сам должен определить
EnumDesktopWindows( GetThreadDesktop(GetCurrentThreadId), @EnumProc, 0);
end;
твой код очень помог - все окна становяться прозрачными,
но тут возникает проблема, фон рабочего стола становиться прозрачным,
вернее картинка рабочего стола (за ней черный фон) короче 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);
SetWindowLong(h, GWL_EXSTYLE, GetWindowLong(h, GWL_EXSTYLE) Or WS_EX_LAYERED);
SetLayeredWindowAttributes(h, 0, 220, LWA_ALPHA);
при этом никаких проблем с картинкой рабочего стола небыло...
>