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

Вниз

Окна , процесссы, потоки...   Найти похожие ветки 

 
GarryFV   (2002-09-11 13:39) [0]

Никак не могу свести в кучу сии объекты :(.
В общем хочу "пообщаться" сообщениями с чужой программой, зная только название exe модуля.

При этом могу получить ModuleHandle=GetModuleHandle(<ExeName>),
но не знаю как получить Handle главного окна или потока :(.

Или могу взять список всех окон в системе(EnumWindows), но не могу узнать какому модулю принадлежит данное окно.

Полностью лопатить Win32 reference желания нет.
Может подскажет кто какие-нибудь функции?


 
Song ©   (2002-09-11 13:45) [1]

FindWindow()


 
GarryFV   (2002-09-11 13:53) [2]

Я не знаю имени ни окна ни его класса, только имя exe модуля.

Как, например, через имя winword.exe, найти окна принадлежащие MSWord?


 
Виктор Щербаков ©   (2002-09-11 13:55) [3]


> Или могу взять список всех окон в системе(EnumWindows),
> но не могу узнать какому модулю принадлежит данное окно.

GetWindowThreadProcessId. Узнаешь ID процесса. Далее, например с помощью ToolHelp-функций можно узнать имя exe этого процесса. Если имя exe совпадает с нужным, то можешь общаться с этим окном.


 
Виктор Щербаков ©   (2002-09-11 13:58) [4]


> Как, например, через имя winword.exe, найти окна принадлежащие
> MSWord?

Только учти, что Вордов может быть много запущено...


 
Song ©   (2002-09-11 14:03) [5]

Можно ещё попробовать находить GetWindowModuleFileName() для каждого окна, какое совпадёт, значит оно.


 
Игорь Шевченко ©   (2002-09-11 14:07) [6]

Song © (11.09.02 14:03)

> GetWindowModuleFileName()


Для окон своего процесса


 
Song ©   (2002-09-11 14:21) [7]

Ok, NTQuerySystemInformation()


 
Alx2 ©   (2002-09-11 14:44) [8]

>Или могу взять список всех окон в системе(EnumWindows), но не
>могу узнать какому модулю принадлежит данное окно.

Узнаешь процесс и поток с помощью
GetWindowThreadProcessId

Модули конкретного процесса можно получить так:

Function GetProcessModule(dwPID, dwModuleID: DWORD;
lpMe32: LPMODULEENTRY32; cbMe32: DWORD): Boolean;
Const
bRet: BOOL = False;
bFound: BOOL = False;
hModuleSnap: THandle = 0;
Var
me32: MODULEENTRY32;

Begin
fillchar(me32, sizeof(me32), 0);
// Take a snapshot of all modules in the specified process.
hModuleSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
If hModuleSnap = THandle(-1) Then
Begin
Result := False;
Exit;
End;
// Fill the size of the structure before using it.
me32.dwSize := sizeof(MODULEENTRY32);

// Walk the module list of the process, and find the module of
// interest. Then copy the information to the buffer pointed
// to by lpMe32 so that it can be returned to the caller.
If (Module32First(hModuleSnap, me32)) Then
Begin
Repeat
If (me32.th32ModuleID = dwModuleID) Then
Begin
CopyMemory(lpMe32, @me32, cbMe32);
bFound := True;
End;
Until bFound Or Not Module32Next(hModuleSnap, me32);

bRet := bFound; // if this sets bRet to FALSE, dwModuleID
// no longer exists in specified process
End
Else
bRet := False; // could not walk module list

// Do not forget to clean up the snapshot object.
CloseHandle(hModuleSnap);

Result := bRet;
End;



 
Alx2 ©   (2002-09-11 14:53) [9]

Сорри, по поводу определения модуля по процессу можно гораздо проще :)

Function GetModuleName(wProcessID: DWORD): String;
Const
hProcessSnap: THandle = 0;
bRet: Boolean = False;
Var
pe32: PROCESSENTRY32;
me32: MODULEENTRY32;
Begin
Result := "";
// Take a snapshot of all processes currently in the system.
hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
If hProcessSnap = THandle(-1) Then
Exit;
// Fill in the size of the structure before using it.
pe32.dwSize := sizeof(PROCESSENTRY32);

// Walk the snapshot of the processes, and for each process, get

// information to display.
If (Process32First(hProcessSnap, pe32)) Then
Begin
fillchar(me32, sizeof(me32), 0);
Repeat
If pe32.th32ProcessID = wProcessID Then
Result := PChar(@pe32.szExeFile);
Until (Result <> "") Or (Not Process32Next(hProcessSnap, pe32));
End;

// Do not forget to clean up the snapshot object.
CloseHandle(hProcessSnap);
End;


 
GarryFV   (2002-09-12 09:59) [10]

Всем спасибо - все работает :)



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.023 c
8-78540
Mixan
2002-06-29 21:42
2002.10.24
Как проиграть несколько wav файлов один за одним?


1-78420
saxon
2002-10-15 17:24
2002.10.24
Memory leak


1-78511
Dendra
2002-10-13 15:14
2002.10.24
packed record


1-78395
Жорик
2002-10-14 10:37
2002.10.24
Работа со шрифтами


14-78619
VictorT
2002-10-03 13:07
2002.10.24
Прикол. Но он меня задолбал.