Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
ВнизКак узнать Handle всех окон данного приложения? Найти похожие ветки
← →
WondeRu © (2004-08-18 15:49) [0]Здравствуйте!
Возникла проблема: на работе стоит Миранда, по которой я постоянно "общаюсь"! Но охота сделать так, чтобы окна чатов были прозрачные! Написал прогу, которая делает прозрачными все окна с типом #32770, но под этот тип подпадает добрая половина диалоговых окон ВИнды(Диспетчер задач тоже прозрачный)))!
Как "просветить" все окна Миранды (и только ее)?
Спасибо!
← →
Игорь Шевченко © (2004-08-18 16:29) [1]
> Как "просветить" все окна Миранды (и только ее)?
Для каждого найденного окна узнать GetWindowThreadProcessId и сравнить с PID нужного процесса ?
← →
WondeRu © (2004-08-18 16:54) [2]Игорь Шевченко © (18.08.04 16:29) [1]
GetWindowThreadProcessId
не работает
if GetWindowThreadProcessId(HWND1) = mir then
Form1.SetTransparent(HWND1);//никогда не срабатывает!function Miranda: Cardinal;
var
Process32 : TProcessEntry32;
H : THandle;
Next : BOOL;
begin
Result := 0;
Process32.dwSize := SizeOf(TProcessEntry32);
H := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(h, Process32)
then
begin
if AnsiLowerCase(Process32.szExeFile) = "miranda32.exe" then Result := Process32.th32ProcessID;
repeat
Next := Process32Next(H, Process32);
if Next then if AnsiLowerCase(Process32.szExeFile) = "miranda32.exe" then
Result := Process32.th32ProcessID;
until not Next;
end;
CloseHandle(h);
end;
procedure TForm1.SetTransparent(Handle1: THandle);
const
cUseAlpha: array [Boolean] of Integer = (0, LWA_ALPHA);
cUseColorKey: array [Boolean] of Integer = (0, LWA_COLORKEY);
var
AStyle: Integer;
begin
AStyle := GetWindowLong(Handle1, GWL_EXSTYLE);
if (AStyle and WS_EX_LAYERED) = 0 then
SetWindowLong(Handle1, GWL_EXSTYLE, AStyle or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle1, 0, form1.TrackBar1.Position,
cUseAlpha[True] or cUseColorKey[False]);
end;
procedure EnumProc(HWND1: hwnd; LPARAM: lParam);
var
h : Integer;
begin
if mir <> 0 then
if GetWindowThreadProcessId(HWND1) = mir then
Form1.SetTransparent(HWND1);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumProc,0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
mir := miranda;
end;
← →
WondeRu © (2004-08-18 17:29) [3]заработало
function EnumWindowsProc(hWindow : hWnd;
lParam : LongInt) : Bool; stdcall;
var
h : Cardinal;
begin
if mir = 0 then exit;
GetWindowThreadProcessId(hWindow, @h);
if h = mir then
form1.SetTransparent(hWindow);
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c