Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
10-1082010459
Сергей Бушин
2004-04-15 10:27
2005.01.23
Как узнать имеются ли у сервера клиентские подключения


6-1099557535
AngelOKES
2004-11-04 11:38
2005.01.23
Socket и отправка файла в обе стороны


1-1104922884
vario
2005-01-05 14:01
2005.01.23
В GroupBox надо отследить переполнение Caption


4-1098777176
Sirus
2004-10-26 11:52
2005.01.23
Как отловить запсук процессов под Win9x/NT/2000/XP


1-1105011356
Viola
2005-01-06 14:35
2005.01.23
Получить текст от символа < до ... над котрым находиться курсор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский