Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Внизчужое окно Найти похожие ветки
← →
m0l0doy (2005-01-10 23:20) [0]Уважаемые! Поясните, пожалуйста, как мне узнать путь к файлу породившему окно :)
я ловлю окно такh:=findwindow(nil, "заголовок");
и мне необходимо узнать, где находится exe файл
заранее спасибо
← →
code_ (2005-01-11 00:01) [1]GetWindowModuleFileName(h, ...)
← →
m0l0doy (2005-01-11 00:13) [2]на пашет чего-то..
делаю так
h:=findwindow(nil, "заголовок");
if h=0 then exit;
nsize := 128;
SetLength(fName, nsize);
SetLength(fName,GetWindowModuleFileName(h,pchar(fName),nsize));
showmessage(fName);
он выдает мне адрес к файлу МОЕЙ программы Ж)
хотя окно 100% не мое
← →
GanibalLector © (2005-01-11 01:07) [3]>nsize := 128;
Это не так.
← →
m0l0doy (2005-01-11 03:47) [4]а как?
← →
Fay © (2005-01-11 06:33) [5]Весь код в [2] - бред.
← →
Kerk © (2005-01-11 06:41) [6]m0l0doy (11.01.05 0:13) [2]
LOL
← →
m0l0doy (2005-01-11 11:23) [7]заебись
спасибо ребята
посмеялись? весело?
я в шоке.. человек просит помощи, а вы рж0те
← →
Kerk © (2005-01-11 11:28) [8]m0l0doy (11.01.05 11:23) [7]
сейчас здесь будет написано "Удалено модератором" :)
← →
sniknik © (2005-01-11 11:41) [9]GetWindowModuleFileName работает но только в 95-ом (насколько смутно помню)
в других нужно по GetWindowModuleFileNameEx получать и не по хендлу окна а по хендлу процесса (найти по оконному, открыть, получить, закрыть). неохота разбиратся (готовый код дома есть), если не дадут раньше положу вечером (может быть, если ветку не удалят, к тому идет).
> посмеялись? весело?
> я в шоке.. человек просит помощи, а вы рж0те
а ты повода не давай, у людей может единственное развлечение сдесь посмеятся над безграмотным кодом... не ассоциируй с собой.
← →
Fay © (2005-01-11 11:48) [10]>> GetWindowModuleFileName работает но только в 95-ом (насколько смутно помню)
Нет
← →
sniknik © (2005-01-11 12:00) [11]Fay © (11.01.05 11:48) [10]
может быть может быть, но деление на 95 vs остальные там делалось зачемто (или NT - остальные), да ладно в обшем. черт с ним, даже думать неохота на эту тему.
← →
TUser © (2005-01-11 12:11) [12]Вот в ХР
procedure TForm1.Button1Click(Sender: TObject);
var h: hWND;
p: PAnsiChar;
i: integer;
k: integer;
begin
AllocConsole;
if (Edit1.Text <> "") or
(Edit2.Text <> "") then begin
writeln("Starting");
if Edit2.Text = "" then
h:=FindWindow(nil,PAnsiChar(Edit1.Text))
else
if Edit1.Text = "" then
h:=FindWindow(PAnsiChar(Edit2.Text),nil)
else
h:=FindWindow(PAnsiChar(Edit2.Text),PAnsiChar(Edit1.Text));
Label1.Caption:="handle = "+inttostr(h);
writeln("handle is "+inttostr(h));
if h <> 0 then begin
k:=32;
repeat
k:=k*2;
GetMem(p,k);
try
i:=GetWindowModuleFileName(h,p,k);
if i < k then begin
writeln("length = "+inttostr(i));
Label2.Caption:=copy(p,1,i);
writeln(" name is "+Label2.Caption);
end;
finally
FreeMem(p);
end;
until i < k;
end;
end else
writeln("Both nil");
writeln("");
end;
PS. Совершенно не понимаю, почему FindWindow не работает в FP/Лазаре. Я там сначала это написАл, долго удивлялся, что h = 0. Потом перенем с D7, и с теми же параметрами - все заработало. Кто-нибудь знает в чем дело?
← →
TUser © (2005-01-11 12:12) [13]
> sniknik
msdn пишет, что 95 и NT, начиная с 4.0 SP3
← →
m0l0doy (2005-01-11 18:32) [14]sniknik,TUser, спасибо!
ночью буду с этим разбираться, отпишусь как и чего
← →
sniknik © (2005-01-11 20:45) [15]вот что было у меня (это я уже типа дома ;о)))
uses psapi;
function IsWinNT4Plus: Boolean;
var VI: TOSVersionInfo;
begin
FillChar(VI, SizeOf(TOSVersionInfo), 0);
VI.dwOSVersionInfoSize:= SizeOf(TOSVersionInfo);
GetVersionEx(VI);
with VI do
Result:= (dwPlatformId = VER_PLATFORM_WIN32_NT) and (dwMajorVersion >= 4);
end;
function GetWindowFileName(const hWin: HWND): string;
var
lpBuff: PChar;
nCount: Integer;
dwProcessId: Cardinal;
hInst: Cardinal;
hProcess: Cardinal;
begin
Result:= "";
nCount:= 1024;
GetMem(lpBuff, nCount);
try
if IsWinNT4Plus then begin
hInst:= GetWindowLong(hWin, GWL_HINSTANCE);
GetWindowThreadProcessId(hWin, dwProcessId);
hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, dwProcessId);
if hProcess > 0 then
try
GetModuleFileNameEx(hProcess, hInst, lpBuff, nCount);
finally
CloseHandle(hProcess);
end;
end else
GetWindowModuleFileName(hWin, lpBuff, nCount);
Result:= string(lpBuff);
finally
FreeMem(lpBuff);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:= GetWindowFileName(FindWindow("SHELL_TRAYWND", nil));
end;
работает, но вот как насчет "во всех виндах" х.з. не проверял (только в w2k).
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c