Форум: "WinAPI";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
ВнизОкна , процесссы, потоки... Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c