
29.05.2008, 22:29
|
|
Участник форума
Регистрация: 06.03.2007
Сообщений: 283
С нами:
10096166
Репутация:
120
|
|
Подскажите как программно поставить паузу в Windows Media плеере?
Если нетрудно напишите кодом, буду вам очень блогодарен
И как сделать так чтобы при сворачивании програма улитала в трей ?
Последний раз редактировалось xaker-boss; 29.05.2008 в 22:33..
|
|
|

29.05.2008, 22:34
|
|
Banned
Регистрация: 06.01.2008
Сообщений: 904
С нами:
9655526
Репутация:
1821
|
|
Сообщение от xaker-boss
Подскажите как программно поставить паузу в Windows Media плеере?
Если нетрудно напишите кодом, буду вам очень блогодарен
WinApi!Или это не в моде?Тебе надо послать сообщение окну!
Вот:
Код:
Описание:
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; 29.05.2008 в 22:37..
|
|
|

29.05.2008, 23:17
|
|
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
С нами:
9626394
Репутация:
357
|
|
Как поменять иконку 16*16? Эта иконка отабражается в меню пуск
|
|
|

29.05.2008, 23:34
|
|
Участник форума
Регистрация: 06.03.2007
Сообщений: 283
С нами:
10096166
Репутация:
120
|
|
De-visible извеняюсь конечно, но я некогда неработал с WinApi и незнаю не одной функции.
Ты не мог бы написать код? плиз
|
|
|

30.05.2008, 09:57
|
|
Познающий
Регистрация: 15.02.2008
Сообщений: 98
С нами:
9598011
Репутация:
50
|
|
НTL файлы типа ico представляют собой не только 1 рисунок. в таком файле их может содержаться несколько, 16/24/32 например. поищи среду разработки таких файлов
|
|
|

30.05.2008, 10:19
|
|
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
С нами:
9626394
Репутация:
357
|
|
O_o
Я выдел сатые значки лижали там в виде комплекта, 48*48, 32*32, 24*24, 16*16, но как так сделать? можно ли это сделать при помощи проги SngIt?
Поскал ниче не нашол.....
begin_end: такой вопрос относится к разделу софт-виндовс, там бы быстрее посоветовали нужное ПО, а вообще используй поиск по форуму, вот например нужная тебе программка.
Последний раз редактировалось begin_end; 30.05.2008 в 20:10..
|
|
|

30.05.2008, 20:52
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
С нами:
9702986
Репутация:
479
|
|
как можно защитить программу от внедрения библиотеки методом CreateRemoteThread? на Delphi
|
|
|

30.05.2008, 21:03
|
|
Banned
Регистрация: 06.01.2008
Сообщений: 413
С нами:
9655526
Репутация:
1334
|
|
Для загрузки библиотеки можно использовать функцию LdrLoadDll из ntdll.dll.
Код:
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:
Код:
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.
Код:
function LdrGetProcedureAddress(hModule: dword;
dOrdinal: DWORD;
psName: PAnsiString;
ppProcedure: ppointer): NTStatus;
stdcall; external 'ntdll.dll';
Если необходимо обеспечить максимальную скрытность перехвата, то вообще лучше использовать во внедряемом коде только функции Native API.
Процедура копирования участка памяти в процесс:
Код:
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;
Эта процедура предельно проста, она принимает хэндл открытого процесса, указатель на данные в текущем процессе и размер данных, а возвращает указатель на данные в целевом процессе.
Внедрение процедуры в целевой процесс:
Код:
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, через которые внедряемый код будет загружать используемые библиотеки и получать адреса используемых функций.
введем еще одну процедуру:
Код:
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, то функция ожидает завершения удаленного потока и копирует обратно структуру с данными) .
|
|
|

30.05.2008, 21:09
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
С нами:
9702986
Репутация:
479
|
|
не внедрение библиотеки, а защита от внедрения. интересует именно от createremotethread
|
|
|

30.05.2008, 21:49
|
|
Новичок
Регистрация: 12.05.2008
Сообщений: 19
С нами:
9472418
Репутация:
2
|
|
для cash$$$
спасибо за столь подробный ответ!! правда, я уже давно знаю, как создавать ресурсы посредством brcc32.exe и файлов *.rc
меня именно шрифты интересовали. Спасибо большое еще раз, буду пробовать!
------------
теперь другой вопрос.. я использую компонент TntRichEdit
можно ли в нем сделать текст по ширине? если да, то как? если нет, то вопрос отпал..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|