Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];

Вниз

Имя EXE-файла по хэндлу окна   Найти похожие ветки 

 
Nuhim   (2002-02-14 09:40) [0]

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


 
Alx2   (2002-02-14 10:02) [1]

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;

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


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

А вот гораздо проще, но токмо не для 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.


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

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


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

Давай!


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

И мне, plz :)


 
skywalker   (2002-02-14 14:30) [6]

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


 
Alx2   (2002-02-14 14:38) [7]

В Delphi 5.0 - tlhelp32


 
skywalker   (2002-02-14 14:58) [8]

Я вставил эту функцию после первого 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 15:07) [9]

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

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


 
skywalker   (2002-02-14 15:13) [10]

здеся...

program Map;

...
begin
if CheckOutExe("map.exe") then Exit;
Application.Initialize;
...
end;


 
skywalker   (2002-02-14 15:17) [11]

GetLastError сразу после CreateToolhelp32Snapshot получает ERROR_PROC_NOT_FOUND :(


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

А она заходит в цикл repeat/until?


 
Alx2   (2002-02-14 15:25) [13]

Сорри. Запостил раньше, чем прочитал про GetLastError...


 
skywalker   (2002-02-14 15:28) [14]

Нет, не заходит... Может эта функция не поддерживается в NT Server?


 
Alx2   (2002-02-14 15:33) [15]

Так у меня Win2000 sever и все работает.
Правда, я с правами администратора работаю. Сейчас попробую без прав зайти...


 
Alx2   (2002-02-14 15:39) [16]

Нет. Тоже работает. Не знаю где искать причину твоего трабла.
Спроси VuDZ, он, кажется, собаку съел на WinAPI


 
skywalker   (2002-02-14 15:52) [17]

Я проследил вызов CreateToolhelp32Snapshot до GetProcAddress, так вот моя прога не может получить адрес этой функции из kernel32.dll!!


 
Alx2   (2002-02-14 15:57) [18]

У меня в kernel32.dll эта функция есть.
Посмотри у себя...


 
skywalker   (2002-02-14 16:00) [19]

Нету ее там...


 
Nuhim   (2002-02-15 05:08) [20]

Кто просил Process Viewer, всем выслал мылом. А как по второму вопросу ?


 
panov (M)   (2002-02-15 06:49) [21]

Кто может пояснить использование CreateToolhelp32Snapshot под WINNT4? Откликнитесь, плиз...
На Win98 все прекрасно работает, а под NT - увы...


 
Raptor   (2002-02-17 19:34) [22]

А что там обяснять. CreateToolhelp32Snapshot под WINNT4 не работает. MSDN надо хоть иногда читать. Вот выдержка из оной:

QuickInfo
Windows NT: Requires version 5.0 or later.
Windows: Requires Windows 95 or later.
Windows CE: Unsupported.





 
MBo   (2002-02-17 19:45) [23]

>использование CreateToolhelp32Snapshot под WINNT4
в статьях Тексейра 14 глава PSAPI


 
panov   (2002-02-17 20:30) [24]

>Raptor © (17.02.02 19:34)
Увы, не все имеют возможность использовать MSDN.

>MBo © (17.02.02 19:45)

Где есть эти статьи?


 
Raptor   (2002-02-17 21:08) [25]

А что, разве сайт мелкософта закрыли?! ;-))
www.msdn.microsoft.com


 
MBo   (2002-02-17 21:51) [26]

http://delphi.mastak.ru/articles/book/index.html


 
Raptor   (2002-02-17 23:18) [27]

Да, интересно где здесь 14 глава? :-))


 
Mbo   (2002-02-18 06:31) [28]

И правда что ;(
Я с Королевства скачивал.


 
MBo   (2002-02-18 07:29) [29]

http://www.doreworld.com/library/pascal/delphi4ug.shtml



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.006 c
4-70068
Fredy
2002-02-16 23:22
2002.04.22
Как запустить ScreenSaver ?


3-69681
tovSuhov
2002-03-29 11:19
2002.04.22
Вопрос по DBMS_PIPE


14-69977
Алексей Петров
2002-03-12 14:28
2002.04.22
Можно ли быть профессионалом - программистом, не имея высшего образования?


14-69975
Van
2002-03-11 11:40
2002.04.22
как определить- закончена перекачка файла или нет?


3-69685
Kuzmich
2002-03-29 14:14
2002.04.22
Подключение к СУБД из Веб-сервиса





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский