Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Имя EXE-файла по хэндлу окна [D5, Win95/98]


Страницы:   1 2

Nuhim ©   (2002-02-14 09:40:00) 

Здравствуйте знатоки! Собственно 2 вопроса.
1 - как, зная хэндл окна верхнего уровня получить имя исполняемого файла, породившего это окно;
2 - как без помощи DLL или таймера узнать, что курсор мыши достиг правого края десктопа.
Спасибо заранее.


Alx2   (2002-02-14 15:07:00) [21]

Проверил твою функцию - работает. (у меня Win2k)

Вообще-то, в случае ошибки, CreateToolhelp32Snapshot возвращает -1.
>Я вставил эту функцию после первого begin модуля
Это где?


skywalker   (2002-02-14 14:58:00) [22]

Я вставил эту функцию после первого begin модуля, но hProccessSnap после выполнения ToolHelp32SnapShot у меня равен 0?! Где я обшибся? Вот код:

function CheckOutExe(Exename:string):boolean;
var
hProcessSnap: THandle;
pe32: PROCESSENTRY32;
begin
Result:=false;
//Take a snapshot of all processes currently in the system
hProcessSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,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
repeat
if string(pchar(@pe32.szExeFile))=Exename then
begin
Result:=true;
break
end;
until not Process32Next(hProcessSnap, pe32)
//Do not forget to clean up the snapshot object
CloseHandle(hProcessSnap)
end;


Alx2   (2002-02-14 14:38:00) [23]

В Delphi 5.0 - tlhelp32


skywalker   (2002-02-14 14:30:00) [24]

А в каком юните описана структура PROCESSENTRY32?


md_test   (2002-02-14 13:03:00) [25]

И мне, plz :)


Alx2   (2002-02-14 13:00:00) [26]

Давай!


Nuhim   (2002-02-14 12:56:00) [27]

Спасибо. Но я нашел Unit, при подключении которого к своему проекту можно получить не только имя модуля, но и многое другое.
Если интересно, могу намылить. Весит немного.


Alx2   (2002-02-14 10:49:00) [28]

А вот гораздо проще, но токмо не для NT:
To find the filename of the program that created a given window under
Windows, you would use GetWindowLong(hWnd, GWL_HINSTANCE) to find the
module handle and then GetModuleFileName() to find the filename. This
method cannot be used under Windows NT because instance handles are not
global, but are unique to the address space in which the application is
running.


Alx2   (2002-02-14 10:02:00) [29]

1.

function GetExeNameByWindowHandle(wHandle : THandle):String;
Var wProcessID : DWORD;
begin
GetWindowThreadProcessId(wHandle, @wProcessID);
Result := GetExename(wProcessID);
End;

Function GetExeName(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;

Да не прибьют меня мастера за такой код :)))


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо