Форум программистов
Реклама:
Гарантия безопасности сети с UTM-системой ИКС.
Защита ПД, межсетевой экран, контроль доступа, фильтрация трафика, система предотвращения вторжений.
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 16.10.2009, 19:21   #1
W0LF
Участник клуба
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Адрес: UA
Сообщений: 940
Репутация: 353

icq: 941593
skype: feralfrost
Восклицание Как узнать путь к файлу по хэндлу?

Вопрос находиться в самой теме више ^
W0LF вне форума   Ответить с цитированием
Старый 16.10.2009, 20:06   #2
Alex Cones
Trust no one.
Профессионал
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Адрес: In the middle of nowhere.
Сообщений: 6,529
Репутация: 1426
По умолчанию

Раз
Код:

Uses
   TLHelp32;
Function HandleToFullPath(H: HWND): String;
Var
Pid:Cardinal;
M: TModuleEntry32;
HSnapshot: THandle;
Begin
Result:='';
GetWindowThreadProcessId(H,@Pid);
HSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,Pid);
If HSnapshot=-1 Then
Exit;
M.DwSize:=SizeOf(TModuleEntry32);
If Module32First(HSnapshot,M) Then
Result:=M.SzExePath;
CloseHandle(HSnapshot);
End;
Procedure TForm1.Button1Click(Sender: TObject);
Var
H: HWND;
Begin
H:=FindWindow(Nil,'Program manager');
Label1.Caption:=HandleToFullPath(H);
End;

Два
Код:

var
  GCL,DW,StrAddr,NumWriteRead:Cardinal;
  OFPCommandLineA:string;
  ProcessId, HandleWindow : DWord;
begin
GetWindowThreadProcessId(FindWindow(nil, 'Unit1.pas'), @ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
                                    If HandleWindow<>0 then
                                        begin
                                            GCL:=Cardinal(GetProcAddress(GetModuleHandle('kernel32.dll'),'GetCommandLineA'));
                                            if GCL<>0 then
                                                begin
                                                    if ReadProcessMemory(HandleWindow,Pointer(GCL+1),@DW,4,NumWriteRead)and(NumWriteRead=4)and
                                                    ReadProcessMemory(HandleWindow,Pointer(DW),@StrAddr,4,NumWriteRead)and(NumWriteRead=4) then
                                                        begin
                                                            SetString(OFPCommandLineA, nil, MAX_PATH);
                                                                if ReadProcessMemory(HandleWindow, Pointer(StrAddr), 
                                                                                             @OFPCommandLineA[1],
                                                                                             Length(OFPCommandLineA),NumWriteRead) 
                                                                then
                                                                    SetLength(OFPCommandLineA,Pos(#0,OFPCommandLineA)-1)
                                                                else
                                                                    OFPCommandLineA:='';
                                                        end;
                                                end;
                                            CloseHandle(HandleWindow);
                                        end;
  ShowMessage(OFPCommandLineA);

Три
(укажи хендл чужого окна)
Код:

GetModuleName(GetClassLong(handle,GCL_HMODULE));

Все просто как Раз-Два-Три.
__________________
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось rpy3uH; 16.10.2009 в 20:26.
Alex Cones вне форума   Ответить с цитированием
Старый 16.10.2009, 20:25   #3
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Адрес: Солнечное Тбилиси
Сообщений: 4,763
Репутация: 1896
По умолчанию

Если необходимо узнать путь к файлу по хендлу файла (который получен через CreateFile), то это можно сделать через пресловутый файловый мэпинг.
CreateFileMapping
MapViewOfFile
GetMappedFileName
MSDN всё знает! вот ссылка с кодом на С++:
http://msdn.microsoft.com/en-us/libr...89(VS.85).aspx
Если в голове есть в наличии мозги, то на Delphi перевести будет не трудно.

Последний раз редактировалось rpy3uH; 16.10.2009 в 20:28.
rpy3uH вне форума   Ответить с цитированием
Старый 16.10.2009, 20:40   #4
raxp
Профессионал
 
Регистрация: 29.09.2009
Сообщений: 9,734
Репутация: 3006
По умолчанию

дык, четыре
http://www.programmersforum.ru/showp...41&postcount=2
__________________
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума   Ответить с цитированием
Старый 16.10.2009, 22:17   #5
W0LF
Участник клуба
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Адрес: UA
Сообщений: 940
Репутация: 353

icq: 941593
skype: feralfrost
По умолчанию

Вот и пять =) :
Код:

function AddressEXE(window:hwnd):string;
var
  ProcessID : Cardinal;
  ProcessHandle : Cardinal;
  ModuleHandles : array[0..256] of DWORD;
  nBytes : Cardinal;
  ModuleName :array[0..259] of Char;
begin
  GetWindowThreadProcessId(Window, @ProcessID);
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
  EnumProcessModules(ProcessHandle, @ModuleHandles, 256 * 4, nBytes);
  GetModuleFileNameEx(ProcessHandle, ModuleHandles[0], ModuleName, 256);
  result := string(ModuleName);
end;

W0LF вне форума   Ответить с цитированием
Старый 16.10.2009, 22:26   #6
raxp
Профессионал
 
Регистрация: 29.09.2009
Сообщений: 9,734
Репутация: 3006
По умолчанию

даешь еще!
__________________
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума   Ответить с цитированием
Старый 01.01.2017, 14:54   #7
NetSpace
Профессионал
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Адрес: п.Путеец, Печорский р-н
Сообщений: 1,104
Репутация: 318
По умолчанию

Wolf, спасибо, помогло. работает не только для хэндла формы, но и для любго элемента на этой форме.
__________________
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить путь к файлу Manya Общие вопросы Delphi 5 22.05.2012 16:12
Путь к файлу по хэндлу окна Veiron Общие вопросы Delphi 10 22.05.2009 20:47
Как найти путь к файлу? Gawwws Microsoft Office Excel 6 05.12.2008 15:01
Как узнать полный путь к *.ехе файлу SeЯgey Помощь студентам 3 27.05.2008 09:46
Как вытащить путь к файлу UnD)eaD)Snake Общие вопросы Delphi 13 20.08.2007 22:09




01:49.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru