HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 29.05.2008, 22:29
xaker-boss
Участник форума
Регистрация: 06.03.2007
Сообщений: 283
С нами: 10096166

Репутация: 120
По умолчанию

Подскажите как программно поставить паузу в Windows Media плеере?
Если нетрудно напишите кодом, буду вам очень блогодарен
И как сделать так чтобы при сворачивании програма улитала в трей ?

Последний раз редактировалось xaker-boss; 29.05.2008 в 22:33..
 
Ответить с цитированием

  #2  
Старый 29.05.2008, 22:34
De-visible
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..
 
Ответить с цитированием

  #3  
Старый 29.05.2008, 23:17
НTL
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
С нами: 9626394

Репутация: 357


По умолчанию

Как поменять иконку 16*16? Эта иконка отабражается в меню пуск
 
Ответить с цитированием

  #4  
Старый 29.05.2008, 23:34
xaker-boss
Участник форума
Регистрация: 06.03.2007
Сообщений: 283
С нами: 10096166

Репутация: 120
По умолчанию

De-visible извеняюсь конечно, но я некогда неработал с WinApi и незнаю не одной функции.
Ты не мог бы написать код? плиз
 
Ответить с цитированием

  #5  
Старый 30.05.2008, 09:57
dos999
Познающий
Регистрация: 15.02.2008
Сообщений: 98
С нами: 9598011

Репутация: 50
По умолчанию

НTL файлы типа ico представляют собой не только 1 рисунок. в таком файле их может содержаться несколько, 16/24/32 например. поищи среду разработки таких файлов
 
Ответить с цитированием

  #6  
Старый 30.05.2008, 10:19
НTL
Постоянный
Регистрация: 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..
 
Ответить с цитированием

  #7  
Старый 30.05.2008, 20:52
ntldr
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
С нами: 9702986

Репутация: 479
По умолчанию

как можно защитить программу от внедрения библиотеки методом CreateRemoteThread? на Delphi
 
Ответить с цитированием

  #8  
Старый 30.05.2008, 21:03
cash$$$
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, то функция ожидает завершения удаленного потока и копирует обратно структуру с данными) .
 
Ответить с цитированием

  #9  
Старый 30.05.2008, 21:09
ntldr
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
С нами: 9702986

Репутация: 479
По умолчанию

не внедрение библиотеки, а защита от внедрения. интересует именно от createremotethread
 
Ответить с цитированием

  #10  
Старый 30.05.2008, 21:49
Nick_Rimer
Новичок
Регистрация: 12.05.2008
Сообщений: 19
С нами: 9472418

Репутация: 2
По умолчанию

для cash$$$
спасибо за столь подробный ответ!! правда, я уже давно знаю, как создавать ресурсы посредством brcc32.exe и файлов *.rc
меня именно шрифты интересовали. Спасибо большое еще раз, буду пробовать!

------------

теперь другой вопрос.. я использую компонент TntRichEdit
можно ли в нем сделать текст по ширине? если да, то как? если нет, то вопрос отпал..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Wi-Fi, BT] Задай вопрос - получи ответ! Alexsize Беспроводные технологии/Wi-Fi/Wardriving 2569 10.05.2026 13:27
[jQuery] - Задай вопрос, получи ответ Isis PHP 62 25.12.2009 03:25



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.