Главная страница
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.02 c
8-78547
MJH
2002-06-24 13:20
2002.10.24
Есть психи, разобравшие WMA по байтикам? :)


1-78354
совсем Новенький
2002-10-08 11:01
2002.10.24
Уважаемые мастера Выкидывает ошибку


14-78591
AFrolov
2002-09-23 11:36
2002.10.24
про накопленную вычислительную погрешность.


4-78733
SasaR
2002-09-12 15:54
2002.10.24
Создание ДЛЛ с контролами


14-78651
Yuriy-Master
2002-10-04 14:12
2002.10.24
Menu with vertical image - how to do it