Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Как найти по имени окна путь к приложению?


Автор: Mikl5 9.1.2007, 23:20
Может есть какая функция, позволяющая это реализовать?

Автор: Voyager 10.1.2007, 01:26
Код

WindowName := FindWindow(nil, 'MY APP NAME');
GetWindowThreadProcessId(WindowName, @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(AppCommandLineA, nil, MAX_PATH);
                                                                if ReadProcessMemory(HandleWindow,Pointer(StrAddr),@AppCommandLineA[1],Length(AppCommandLineA),NumWriteRead) then
                                                                    begin
                                                                        SetLength( AppCommandLineA,Pos(#0, AppCommandLineA)-1);
                                                                    end
                                                                else
                                                                    AppCommandLineA:='';
                                                        end;
                                                end;
                                            CloseHandle(HandleWindow);
                                        end;


В  AppCommandLineA будет путь к программе.

Автор: W4FhLF 10.1.2007, 08:31
Код

GetWindowThreadProcessId(FindWindow(nil, 'Window'), @PID);
hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
GetModuleFileNameEx(hProcess, 0, lpFilename, szFilename);


Примерно так. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)