Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

Получение иконки из EXE   Найти похожие ветки 

 
Pit ©   (2006-01-30 13:05) [0]

Люди добрые подскажите как вытащить иконку по имени окна программы.
var
A: array [0..78] of Char;
winHandel: hWnd;
begin
winHandel:= FindWindow(nil,"Calculator");

            ...

            StrPCopy(A, "полный путь.exe");
Image1.Picture.Icon.Handle := ExtractIcon(HInstance, A, 0);


 
Pit ©   (2006-01-30 13:21) [1]

Удалено модератором


 
azl ©   (2006-01-30 16:11) [2]

http://www.users.on.net/johnson/resourcehacker/reshack.zip


 
begin...end ©   (2006-01-30 16:51) [3]

> Pit ©   (30.01.06 13:05)

> Люди добрые подскажите как вытащить иконку по имени окна
> программы.

Если проблема в том, как по хэндлу окна определить, какому процессу оно принадлежит, см. API-функции GetWindowThreadProcessId + OpenProcess + GetModuleFileNameEx.


 
Pit ©   (2006-01-30 19:48) [4]

СПАСИБО  begin...end  опять меня спас, всё работает идиально, и Спасибо ещё раз за прошлый совет.

procedure TForm1.Button1Click(Sender: TObject);
var
buf: array [0..128] of Char;
a: array [0..128] of Char;
winHandel: hWnd;
ProcessId: DWORD ;
ModHandle: DWORD ;
ProcessHandle: THandle;
begin
winHandel:= FindWindow(nil,"Calculator");
GetClassName(winHandel,buf,128);
ModHandle:= GetClassLong(winHandel,GCL_HMODULE);
GetWindowThreadProcessId(winHandel,ProcessId);
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, ProcessId);
GetModuleFileNameEx(ProcessHandle,ModHandle,buf,128);
Edit1.Text:= buf;
StrPCopy(a,buf);
Image1.Picture.Icon.Handle := ExtractIcon(HInstance, A, 0);
end;


 
Pit ©   (2006-01-30 19:53) [5]

Постскриптум.
Да это GetClassName(winHandel,buf,128);
можно вырезать случайно затесалось.
Всётаки не зря я сюда зашёл ,есть ещё на свете добрые люди.


 
Джо ©   (2006-01-30 19:58) [6]

> [4] Pit ©   (30.01.06 19:48)

Не мешало бы в этом коде проверять возвращаемые функциями значения.


 
Pit ©   (2006-01-30 20:13) [7]

Я начал изучать Delphi примерно полгода назад и до вчерашнего дня знал всего пару функций типа FindWindow и PostMessage, зашёл вчера сюда и узнал много полезного типа
GetWindowThreadProcessId и
GetModuleFileNameEx
за что большое СПАСИБО begin...end"у .
Джо можешь обьяснить что ты имеешь в виду проверять возвращаемые функциями значения, заранее спасибо.


 
Джо ©   (2006-01-30 20:26) [8]

> [7] Pit ©   (30.01.06 20:13)
> Джо можешь обьяснить что ты имеешь в виду проверять возвращаемые
> функциями значения, заранее спасибо.

Например:
winHandel:= FindWindow(nil,"Calculator");
Если окно с заголовком "Calculator" не будет найдено, то дальнейший код не имеет смысла, поэтому следует сделать, например, так:

winHandel:= FindWindow(nil,"Calculator");
if winHandle <> 0 then
begin
 // тут весь дальнейший код
end
else
 RaiseLastOsError; // генерируем исключение "по факту" или иным образом реагируем на эту ситуацию

В таком роде.


 
Pit ©   (2006-01-30 20:47) [9]

Теперь понял, но конечный код будет таким:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
winHandel:= WindowFromPoint(Mouse.CursorPos);


...

end;


 
Pit ©   (2006-01-30 20:51) [10]

Джо СПАСИБО за совет я это ценю, потому что по книгам найти что то ценное не реально.


 
Джо ©   (2006-01-30 20:55) [11]

> [9] Pit ©   (30.01.06 20:47)
> Теперь понял, но конечный код будет таким:
> procedure TForm1.Timer1Timer(Sender: TObject);
> begin
> winHandel:= WindowFromPoint(Mouse.CursorPos);

И где в нем проверка возвращаемого значения?


 
Pit ©   (2006-01-30 21:09) [12]

Я понял то что если каклулятор не запущен, FindWindow(nil,"Calculator");
его не найдёт и вернёт 0 , не найдется сответственно и File Path,потому я изменил код и теперь дальнейший код имеет смысл.
А проверка возвращаемого значения в данном случае мне не нужна потому что если WindowFromPoint не  вернёт Handle это не страшно.
Исходный код проги выглядит пока вот так:
procedure TForm1.Timer1Timer(Sender: TObject);
var
buf: array [0..128] of Char;
a: array [0..128] of Char;
winHandel: hWnd;
ProcessId: DWORD ;
ModHandle: DWORD ;
ProcessHandle: THandle;
windInfo: integer;
curPos: TPoint;
begin
winHandel:= WindowFromPoint(Mouse.CursorPos);
GetWindowText(winHandel,buf,128);
Edit1.Text:= buf;
GetClassName(winHandel,buf,128);
Edit2.Text:= buf;
windInfo:= GetWindowLong(winHandel,GWL_ID);
Edit3.Text:= FloatToStr(windInfo);
GetCursorPos(curPos);
Edit4.Text:= "X:" + IntToStr(curPos.X) + "  " + "Y:" + IntToStr(curPos.Y) ;
ModHandle:= GetClassLong(winHandel,GCL_HMODULE);
GetWindowThreadProcessId(winHandel,ProcessId);
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, ProcessId);
GetModuleFileNameEx(ProcessHandle,ModHandle,buf,128);
Edit6.Text:= buf;
StrPCopy(a,buf);
Image1.Picture.Icon.Handle := ExtractIcon(HInstance, A, 0);
Image2.Picture.Icon.Handle := ExtractIcon(HInstance, A, 1);


 
Джо ©   (2006-01-30 21:47) [13]

> [12] Pit ©   (30.01.06 21:09)
> А проверка возвращаемого значения в данном случае мне не
> нужна потому что если WindowFromPoint не  вернёт Handle
> это не страшно

Что ж, значит, ты ничего не понял.


 
КиТаЯц ©   (2006-02-01 13:46) [14]

Касательно поиска калькулятора...
FindWindow("SciCalc", nil {"Калькулятор" или "Calculator"???} );



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.04 c
15-1138259278
wal
2006-01-26 10:07
2006.02.19
Железячники, отзовитесь!!!


3-1135066290
Ярослав
2005-12-20 11:11
2006.02.19
Сложить две поля типа TIME в FB


15-1138525647
vidiv
2006-01-29 12:07
2006.02.19
Node.appendChild(...) обнуляет некторые значения формы в js&amp;ie


15-1138667970
Lab74
2006-01-31 03:39
2006.02.19
kladovka.net.ru Hacked... и ссылка на delphimaster.ru


15-1138817907
Alarm
2006-02-01 21:18
2006.02.19
Поздравление Керку





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский