Текущий архив: 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.47 MB
Время: 0.043 c