![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Окна , процесссы, потоки...
GarryFV © (2002-09-11 13:39:00)Никак не могу свести в кучу сии объекты :(.
В общем хочу "пообщаться" сообщениями с чужой программой, зная только название exe модуля.
При этом могу получить ModuleHandle=GetModuleHandle(<ExeName>),
но не знаю как получить Handle главного окна или потока :(.
Или могу взять список всех окон в системе(EnumWindows), но не могу узнать какому модулю принадлежит данное окно.
Полностью лопатить Win32 reference желания нет.
Может подскажет кто какие-нибудь функции?
GarryFV (2002-09-12 09:59:00) [1]Всем спасибо - все работает :)
Alx2 (2002-09-11 14:53:00) [2]Сорри, по поводу определения модуля по процессу можно гораздо проще :)
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;
Alx2 (2002-09-11 14:44:00) [3]>Или могу взять список всех окон в системе(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;
Song (2002-09-11 14:21:00) [4]Ok, NTQuerySystemInformation()
Игорь Шевченко (2002-09-11 14:07:00) [5]Song © (11.09.02 14:03)
> GetWindowModuleFileName()
Для окон своего процесса
Song (2002-09-11 14:03:00) [6]Можно ещё попробовать находить GetWindowModuleFileName() для каждого окна, какое совпадёт, значит оно.
Виктор Щербаков (2002-09-11 13:58:00) [7]
> Как, например, через имя winword.exe, найти окна принадлежащие
> MSWord?
Только учти, что Вордов может быть много запущено...
Виктор Щербаков (2002-09-11 13:55:00) [8]
> Или могу взять список всех окон в системе(EnumWindows),
> но не могу узнать какому модулю принадлежит данное окно.
GetWindowThreadProcessId. Узнаешь ID процесса. Далее, например с помощью ToolHelp-функций можно узнать имя exe этого процесса. Если имя exe совпадает с нужным, то можешь общаться с этим окном.
GarryFV (2002-09-11 13:53:00) [9]Я не знаю имени ни окна ни его класса, только имя exe модуля.
Как, например, через имя winword.exe, найти окна принадлежащие MSWord?
Song (2002-09-11 13:45:00) [10]FindWindow()