Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.007 c
4-78729
Dark Hunter
2002-09-12 15:51
2002.10.24
Как запустить прогу с правами админа?


1-78391
Asderg
2002-10-15 10:59
2002.10.24
как сделать из даты и времени одно TDateTime?


3-78229
ДенМат
2002-10-01 14:05
2002.10.24
Да как же, блин, делать обновления..


14-78652
Николай Быков
2002-10-04 16:48
2002.10.24
I hate the third companies components


14-78670
AL2002
2002-10-05 01:03
2002.10.24
Всё. Пора спать, а то





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский