Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Получение иконки из 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.05 c
2-1138980752
Змей
2006-02-03 18:32
2006.02.19
движение Image


2-1138725144
Neo Trinitron
2006-01-31 19:32
2006.02.19
сортировка в TListViev


1-1137737999
Amentah
2006-01-20 09:19
2006.02.19
Округление и другие операции над числами


2-1139080529
ПОМОГИТЕ
2006-02-04 22:15
2006.02.19
нету темы


15-1138594840
vidiv
2006-01-30 07:20
2006.02.19
Вопрос по MySQL: LEFT JOIN и RIGHT JOIN