Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

как узнать полный путь   Найти похожие ветки 

 
serguar   (2006-06-01 10:42) [0]

Здравствуйте.
Подскажите как из моего приложения определить полный путь к чужему запущеному приложению. Далаю так:

function GetMyFullPath: String;
var
 Wnd: HWnd;
 WinInstance: THandle;
 ModuleName: array[0..MAX_PATH - 1] of Char;
begin
 Result := "";
 Wnd := FindWindow(PChar("AppClassName"), nil);
 if Wnd <> 0 then begin
   WinInstance := GetWindowLong(Wnd, GWL_HINSTANCE);
   if GetModuleFileName(WinInstance, ModuleName, Length(ModuleName)) > 0 then
     Result := StrPAs(ModuleName);
 end;
end;

функция GetModuleFileName() возвращает ноль.
Че делать?


 
Игорь Шевченко ©   (2006-06-01 10:54) [1]

http://www.schevchenko.net.ru/SRC/EnumFunctions_60.zip


 
serguar   (2006-06-01 14:51) [2]

Спасибо. Попробовал. Вот результат:

System Error. Code: 299
Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично.

Вылетает на втором вызове ReadProcessMemory()

У меня только на Winamp не ругается... :)


 
Игорь Шевченко ©   (2006-06-01 15:39) [3]

serguar   (01.06.06 14:51) [2]

XP SP2 или Windows 2003 ? Тогда увы.


 
BiN ©   (2006-06-01 16:00) [4]

а чем  GetModuleFileNameEx или GetProcessImageFileName не устраивают?


 
serguar   (2006-06-01 16:02) [5]


> Игорь Шевченко


Вот именно, будем над этим работать...


 
serguar   (2006-06-01 16:06) [6]

Я вообще все это затеял для того что бы узнать путь к локальной БД на которую нет ни алиасов ни чего другого в реестре. Просто база лежит в том же каталоге что и исполняемый файл, который ее заполняет. Может есть какие нибудь другие предложения. Путь нужен для динамического формирования свойства ADOConnection.ConnectionString.


 
umbra ©   (2006-06-01 16:37) [7]


> Просто база лежит в том же каталоге что и исполняемый файл,
>  который ее заполняет

ExtractFilePath(Application.ExeName) + basename


 
tesseract ©   (2006-06-01 16:45) [8]


> ExtractFilePath(Application.ExeName) + basename

Это вроде для своего, а ему для чужого надо.


 
umbra ©   (2006-06-01 16:47) [9]

2 tesseract ©   (01.06.06 16:45) [8]

да, вспылил я :\
читал невнимательно


 
DVM ©   (2006-06-01 17:01) [10]

uses   Tlhelp32, PSAPI;

function _GetProcessFileNameByWindowHandle(Wnd: HWND): string;
var
 hProcess: THandle;
 PID: Cardinal;
 FileName: array [1..MAX_PATH] of char;
 PE: TProcessEntry32;
 Snap: Cardinal;
 OsVerInfo: TOSVersionInfo;
begin
 Result := "";
 GetWindowThreadProcessId(Wnd, @PID);
 hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
 OsVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
 if GetVersionEx(osVerInfo) then
   begin
     if OsVerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
       begin
         ZeroMemory(@Filename[1], SizeOf(Filename));
         GetModuleFileNameEx(hProcess, 0, @Filename[1], SizeOf(Filename));
         Result := FileName;
       end
     else
       begin
         Snap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
         if Snap <> -1 then
           begin
             PE.dwSize:=SizeOf(PE);
             if Process32First(Snap, PE) then
               repeat
                 if PE.th32ProcessID = PID then Result := PE.szExeFile;
               until not Process32Next(Snap, PE);
           end;
       end;
   end;
 CloseHandle(hProcess);
end;


 
serguar   (2006-06-01 19:35) [11]


> DVM

Спасибо большое! Все получилось.



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

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.103 c
15-1159249195
Новичоккк
2006-09-26 09:39
2006.10.15
Вопрос по FastScript


15-1158500782
databaser
2006-09-17 17:46
2006.10.15
Какую single user / local side / freeware ;) DB посоветуете?


3-1155639526
2ded
2006-08-15 14:58
2006.10.15
Сохранение результата запроса на др. машине


15-1158772637
Новый_Юзер
2006-09-20 21:17
2006.10.15
Как убрать "приветствие" при загрузке виндовса?


1-1157523050
DmiSb
2006-09-06 10:10
2006.10.15
Как программно открыть календарь у TDateTimePicker ?