Честно говоря, не вижу причем тут дельфи, но сменить иконку в ResHacker довольно легко: открываем приложение в ResHAcker, далее Action->Replace icon...->Open file with new icon...->Replace->File->Save as... Кстати, вот пример простенькой программки, которая предназначена только для данного действия - смены иконок других программ, написано на Дельфи, исходный код прилагается.
Подскажите как программно поставить паузу в Windows Media плеере? Если нетрудно напишите кодом, буду вам очень блогодарен И как сделать так чтобы при сворачивании програма улитала в трей ?
WinApi!Или это не в моде?Тебе надо послать сообщение окну! Вот: Code: Описание: function SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint; Посылает сообщение оконной функции указанного окна. Возвpат из функции осуществляется только после обpаботки сообщения. Параметры: Wnd: Окно, пpинимающее сообщение или $FFFF для посылки всем всплывающим окнам в системе. Msg: Тип сообщения. wParam: дополнительная инфоpмация о сообщении. lParam: дополнительная инфоpмация о сообщении. Возвpащаемое значение: Значение, возвpащенное пpинимающей оконной функцией. С кодом не помогу, юзай сам, а то ничему не научишься
De-visible извеняюсь конечно, но я некогда неработал с WinApi и незнаю не одной функции. Ты не мог бы написать код? плиз
НTL файлы типа ico представляют собой не только 1 рисунок. в таком файле их может содержаться несколько, 16/24/32 например. поищи среду разработки таких файлов
Я выдел сатые значки лижали там в виде комплекта, 48*48, 32*32, 24*24, 16*16, но как так сделать? можно ли это сделать при помощи проги SngIt? Поскал ниче не нашол..... begin_end: такой вопрос относится к разделу софт-виндовс, там бы быстрее посоветовали нужное ПО, а вообще используй поиск по форуму, вот например нужная тебе программка.
Для загрузки библиотеки можно использовать функцию LdrLoadDll из ntdll.dll. Code: function LdrLoadDll(szcwPath: PWideChar; pdwLdrErr: dword; pUniModuleName: PUnicodeString; pResultInstance: PDWORD): NTSTATUS; stdcall; external 'ntdll.dll'; Нас интересует параметр pUniModuleName представляющий из себя указатель на строку типа UnicodeString в которой передается имя загружаемой DLL. По указателю pResultInstance будет сохранен адрес MZ заголовка загруженной DLL (параметр hInstance). Следующий код загружает DLL аналогично функции kernel32 LoadLibraryW: Code: Function MyLoadLibrary(lpLibFileName: PWideChar): HMODULE; var uName: TUnicodeString; begin RtlInitUnicodeString(@uName, lpLibFileName); if (LdrLoadDll(nil, 0, @uName, @Result) > 0) then Result := 0; RtlFreeUnicodeString(@uName); end; Для получения адреса функции cледует использовать LdrGetProcedureAddress. Code: function LdrGetProcedureAddress(hModule: dword; dOrdinal: DWORD; psName: PAnsiString; ppProcedure: ppointer): NTStatus; stdcall; external 'ntdll.dll'; Если необходимо обеспечить максимальную скрытность перехвата, то вообще лучше использовать во внедряемом коде только функции Native API. Процедура копирования участка памяти в процесс: Code: function InjectMemory(Process: dword; Memory: pointer; Size: dword): pointer; var BytesWritten: dword; begin Result := VirtualAllocEx(Process, nil, Size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE); WriteProcessMemory(Process, Result, Memory, Size, BytesWritten); end; Эта процедура предельно проста, она принимает хэндл открытого процесса, указатель на данные в текущем процессе и размер данных, а возвращает указатель на данные в целевом процессе. Внедрение процедуры в целевой процесс: Code: program InjectCode; uses Windows, advApiHook; type TRemoteInfo = record LoadLibrary: function(lpLibFileName: PChar): HMODULE; stdcall; GetProcAddress: function(hModule: HMODULE; lpProcName: LPCSTR): FARPROC; stdcall; Kernel32 : array[0..16] of Char; User32 : array[0..16] of Char; MessageBoxA : array[0..16] of Char; nExitThread : array[0..16] of Char; Text : array[0..16] of Char; Title : array[0..16] of Char; end; { Процедура внедряемая в процесс } procedure RemoteThread(RemoteInfo: pointer); stdcall; var MessageBox: function(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall; ExitThread: procedure(uExitCode: UINT); stdcall; begin with TRemoteInfo(RemoteInfo^) do begin @MessageBox := GetProcAddress(LoadLibrary(User32), MessageBoxA); @ExitThread := GetProcAddress(LoadLibrary(Kernel32), nExitThread); MessageBox(0, Text, Title, 0); ExitThread(0); end; end; procedure RemoteThreadEnd; begin end; //метка конца кода var RemoteInfo: TRemoteInfo; pInfo, CodeAdr: pointer; TID: dword; Process: dword; StartInfo: TStartupInfo; ProcInfo: TProcessInformation; begin //Запускаем процесс ZeroMemory(@StartInfo, SizeOf(TStartupInfo)); StartInfo.cb := SizeOf(TStartupInfo); CreateProcess(nil, 'notepad.exe', nil, nil, False, 0, nil, nil, StartInfo, ProcInfo); Process := ProcInfo.hProcess; //Заполняем структуру передаваемую внедряемому коду lstrcpy(RemoteInfo.User32, 'user32.dll'); lstrcpy(RemoteInfo.Kernel32, 'kernel32.dll'); lstrcpy(RemoteInfo.MessageBoxA, 'MessageBoxA'); lstrcpy(RemoteInfo.nExitThread, 'ExitThread'); lstrcpy(RemoteInfo.Text, 'Hello World!'); lstrcpy(RemoteInfo.Title, 'Injected MessageBox'); //получаем адреса используемых API @RemoteInfo.LoadLibrary := GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA'); @RemoteInfo.GetProcAddress := GetProcAddress(GetModuleHandle('kernel32.dll'), 'GetProcAddress'); //копируем в процесс структуру с данными pInfo := InjectMemory(Process, @RemoteInfo, SizeOf(TRemoteInfo)); //копируем в процесс внедряемый код CodeAdr := InjectMemory(Process, @RemoteThread, dword(@RemoteThreadEnd) - dword(@RemoteThread)); //запускаем внедренный код CreateRemoteThread(Process, nil, 0, CodeAdr, pInfo, 0, TID); end. Перед внедрением кода процедуры, необходимо скопировать в память целевого процесса структуру с данными используемыми внедряемым кодом. В этой структуре необходимо передать адреса функций LoadLibary и GetProcAddress, через которые внедряемый код будет загружать используемые библиотеки и получать адреса используемых функций. введем еще одну процедуру: Code: function InjectThread(Process: dword; Thread: pointer; Info: pointer; InfoLen: dword; Results: boolean): THandle; var pThread, pInfo: pointer; BytesRead, TID: dword; begin pInfo := InjectMemory(Process, Info, InfoLen); pThread := InjectMemory(Process, Thread, SizeOfProc(Thread)); Result := CreateRemoteThread(Process, nil, 0, pThread, pInfo, 0, TID); if Results then begin WaitForSingleObject(Result, INFINITE); ReadProcessMemory(Process, pInfo, Info, InfoLen, BytesRead); end; end; Эта процедура копирует в целевой процесс внедряемый код и структуру с данными для него, после чего запускает внедренный код. Принимаемые параметры: Process - хэндл открытого процесса. Thread - указатель на внедряемый код в текущем процессе. Info - указатель на структуру с данными. InfoLen - размер структуры с данными. Results - необходимость возврата результата. (если true, то функция ожидает завершения удаленного потока и копирует обратно структуру с данными) .
для cash$$$ спасибо за столь подробный ответ!! правда, я уже давно знаю, как создавать ресурсы посредством brcc32.exe и файлов *.rc меня именно шрифты интересовали. Спасибо большое еще раз, буду пробовать! ------------ теперь другой вопрос.. я использую компонент TntRichEdit можно ли в нем сделать текст по ширине? если да, то как? если нет, то вопрос отпал..
https://forum.antichat.ru/showpost.php?p=507050&postcount=746 (https://forum.antichat.ru/thread64446.html)
Nightmarе Вообще юзай компонент динамикскинформ( в нем вообще редактор есть для создания собственных скинов) или SUIPack и не заморачивайся.