Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Как узнать 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 вся ветка

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
1-1094463431
Gear
2004-09-06 13:37
2004.09.26
Как отобразить ListBox в уже прокрученном вниз виде?


14-1094460092
Ё
2004-09-06 12:41
2004.09.26
зайти и на лево


1-1094710146
denis24
2004-09-09 10:09
2004.09.26
Раскраска строк в listview


14-1094237837
Soft
2004-09-03 22:57
2004.09.26
Microsoft запантетовала человеческое тело.


3-1093867309
Senator
2004-08-30 16:01
2004.09.26
index