Главная страница
    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.033 c
14-1104695408
juice
2005-01-02 22:50
2005.01.23
Фоновый скрипт


14-1104479081
Vlad Oshin
2004-12-31 10:44
2005.01.23
Мир ПК номинировал в 2004г. сайты:


14-1104876175
Просто Джо
2005-01-05 01:02
2005.01.23
"Выравнивание вправо" в главном меню


14-1104968574
InTr
2005-01-06 02:42
2005.01.23
Внедрение своего кода в другой бинарник


14-1104841832
by
2005-01-04 15:30
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский