ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #4031  
Старый 01.08.2009, 22:48
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

м, лучше уж что-нть типа md5 и (если длинновато) - разбить на куски и, например, похорить
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 

  #4032  
Старый 01.08.2009, 22:50
zeppe1in
Постоянный
Регистрация: 12.07.2006
Сообщений: 327
Провел на форуме:
1654818

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

slesh
спасибо так и сделаю.
 

  #4033  
Старый 02.08.2009, 14:26
transserg
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме:
1035284

Репутация: 52
Отправить сообщение для transserg с помощью ICQ
По умолчанию

привеит всем возник такой вопрос
как узнать по букве визическое имя диска? вчастности флеш =)
пробовал так
Код:
QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR);
в lpQuery будет строка типа
Код:
'\Device\Harddisk1\DP(1)0-0+9'
чтозначат чимволы после Harddisk1? да и прав ли я в том что '\\.\PHYSICALDRIVE1' = '\Device\Harddisk1\DP(1)0-0+9'? если да то почему бывает такая ошибка когда начинаю извлекать безопасно диск пиши F а он извлекает к примеру диск E все эти диски флеш да и потом через прогу немогу извлечить диск F!
вот код модуля где я извелкаю диски (USBFLASH)
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,setupapi;
type  
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    Button2: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure OnDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

function IsUSBDevice(DevInst: DWORD): boolean;  
var
  IDLen: DWORD;
  ID: PChar;
  s:string;
begin
  {'USBSTOR\DISK&VEN_&PROD_USB_FLASH_DRIVE&REV_34CH\196B09014EC7&0'}
  result := false;
  if (CM_Get_Device_ID_Size(IDLen, DevInst, 0) <> 0) or (IDLen = 0) then
  begin
  // exit;
  end;

  inc(IDLen);
  ID := GetMemory(IDLen);
  if ID = nil then
    exit;
  if (CM_Get_Device_ID(DevInst, PAnsichar(ID), IDLen, 0) <> 0) or (not CompareMem(ID, PChar('USBSTOR'), 7)) then
   begin
   s:=ID;
    form1.memo1.Lines.Add(String(ID));
    FreeMemory(ID);
    exit;
   end;
   s:=ID;
   form1.memo1.Lines.Add(String(ID));
  FreeMemory(ID);
  result := true;
end;

function GetDeviceName(PnPHandle: HDEVINFO; const DevData: TSPDevInfoData): string;
var
  BytesReturned: DWORD;
  RegDataType: DWORD;
  Buffer: array [0..256] of CHAR;
begin
  BytesReturned := 0;
  RegDataType := 0;
  Buffer[0] := #0;
  SetupDiGetDeviceRegistryProperty(PnPHandle, DevData, SPDRP_FRIENDLYNAME,
RegDataType, PByte(@Buffer[0]), SizeOf(Buffer), BytesReturned);
  Result := Buffer;
  if Result<>'' then exit;
  BytesReturned := 0;
  RegDataType := 0;
  Buffer[0] := #0;
  SetupDiGetDeviceRegistryProperty(PnPHandle, DevData, SPDRP_DEVICEDESC,
RegDataType, PByte(@Buffer[0]), SizeOf(Buffer), BytesReturned);
  Result:=Buffer;
end;

function DWORDtoDiskNames(val:DWORD):string;
var
  _i: integer;
begin
  Result:='';
  for _i := 0 to 25 do
   begin
    if ((val mod 2)=1) then Result:=result+ chr(_i + 65);
    val:=val shr 1;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
VAR
  lpQuery: array [0..MAXCHAR - 1] of Char;
  Volume,s:STRING;

begin
   {'\\.\PHYSICALDRIVE1'}
   Volume:=Edit1.text+':';
   Volume[3] := #0;
   QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR);
   s:=lpQuery;
   Volume:='';
   Edit2.Text:=s;
   {'\Device\Harddisk1\DP(1)0-0+9'}
end;
procedure TForm1.OnDeviceChange(var Msg: TMessage);
var
  MSGSTR:String;
begin
  if Msg.WParam=DBT_DEVICEARRIVAL then
   begin
    case PDEV_BROADCAST_HDR(Msg.LParam)^.dbch_devicetype of
    DBT_DEVTYP_VOLUME:
     begin
      MSGSTR:='новый диск'+MSGSTR;
      Edit1.Text:=(MSGSTR+' '+DWORDtoDiskNames(PDEV_BROADCAST_VOLUME(Msg.LParam)^.dbcv_unitmask)+':');
     end;
    end;
   end;
if Msg.WParam=DBT_DEVICEREMOVECOMPLETE then
   begin
    case PDEV_BROADCAST_HDR(Msg.LParam)^.dbch_devicetype of
     DBT_DEVTYP_VOLUME:
      begin
       MSGSTR:='извлечён диск'+MSGSTR;
       Edit1.Text:=(MSGSTR+' '+DWORDtoDiskNames(PDEV_BROADCAST_VOLUME(Msg.LParam)^.dbcv_unitmask)+':');
      end;
    end;
   end;
   end;


procedure RemoveDrive(index:integer);
var
  DrivesPnPHandle: HDEVINFO;
  DevInfo: TSPDevInfoData;
  Parent: DWORD;
  s:string;
  VetoName:array[0..MAX_PATH] of char;
begin
  DevInfo.cbSize := sizeof(SP_DEVINFO_DATA);
  DrivesPnPHandle := SetupDiGetClassDevsA(@GUID_DEVCLASS_DISKDRIVE, nil, 0, 2);
  if DrivesPnPHandle = INVALID_HANDLE_VALUE then
    exit;
  if SetupDiEnumDeviceInfo(DrivesPnPHandle, index,DevInfo) then
   begin
    s:=GetDeviceName(DrivesPnPHandle,DevInfo);
    if (IsUSBDevice(DevInfo.DevInst)) and (CM_Get_Parent(Parent, DevInfo.DevInst, 0) = CR_SUCCESS)
     then
      begin
       CM_Request_Device_Eject(Parent, nil, nil{@VetoName}, {MAX_PATH}0, 0);
      end
     else
      ShowMessage('Это не USB устройство');
   end;
  SetupDiDestroyDeviceInfoList(DrivesPnPHandle);
end;


procedure TForm1.Button1Click(Sender: TObject);
VAR
  lpQuery: array [0..MAXCHAR - 1] of Char;
  Volume,s:STRING;
begin
   Volume:=Edit1.text+':';
   Volume[3] := #0;
   QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR);
   s:=lpQuery;
   Volume:='';
   Memo1.Lines.add(s);
   {'\Device\Harddisk1\DP(1)0-0+9'}
    RemoveDrive(StrToInt(lpQuery[16]));
end;
end.
ткните носом в мои ошибки! если можно то с примерами исправления!
 

  #4034  
Старый 02.08.2009, 14:56
ex3me
Участник форума
Регистрация: 07.01.2009
Сообщений: 186
Провел на форуме:
1247273

Репутация: 166
Отправить сообщение для ex3me с помощью ICQ
По умолчанию

slesh, по посту 4030 поможешь? Так и не осилил PrintWindow, чтобы получить скрин интересующего меня элемента на форме (координаты и размер известны)
 

  #4035  
Старый 02.08.2009, 15:25
Nullsleep
Познающий
Регистрация: 02.06.2009
Сообщений: 67
Провел на форуме:
237284

Репутация: 54
Отправить сообщение для Nullsleep с помощью ICQ
По умолчанию

Код:
const
  x = 225;
  y = 132;
  w = 102;
  h = 41;
var
  rc: TRect;
  bmp: TBitmap;
  dc: HDC;
  wnd: HWND;
begin
  bmp := TBitmap.Create;
  bmp.Width := w;
  bmp.Height := h;
  wnd := GetForegroundWindow;
  dc := GetDC(wnd);
  BitBlt(bmp.Canvas.Handle, 0, 0, w, h, dc, x, y, SRCCOPY);
  ReleaseDC(wnd, dc);
  bmp.SaveToFile('screen.bmp');
  bmp.Free;
end;
x,y - координаты элемента
w,h - ширина и высота

Последний раз редактировалось Nullsleep; 02.08.2009 в 16:01..
 

  #4036  
Старый 02.08.2009, 19:27
.::[КОСТЕТ]::.
Новичок
Регистрация: 21.05.2009
Сообщений: 3
Провел на форуме:
3289

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

Вводят 7е число нужно посчитать сумму двух последних цифр и если она бут равна 1й цифре то выдать труе.
 

  #4037  
Старый 02.08.2009, 19:38
Nullsleep
Познающий
Регистрация: 02.06.2009
Сообщений: 67
Провел на форуме:
237284

Репутация: 54
Отправить сообщение для Nullsleep с помощью ICQ
По умолчанию

Код:
function Aga(num: Integer): Boolean;
var
  s: string;
  l: Integer;
begin
  Result := False;
  s := IntToStr(num);
  l := Length(s);
  if StrToInt(s[l])+StrToInt(s[l-1]) = StrToInt(s[1]) then
    Result := True;
end;
 

  #4038  
Старый 02.08.2009, 20:29
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


Отправить сообщение для Nightmarе с помощью ICQ
По умолчанию

Цитата:
Сообщение от slesh  
2 Nightmarе Код под загрузке бинарника в буфер - это просто ужас.
1) Читает по 1 байту.
2) EOF - это эля текстовых файлов.

более правильнее былобы
такая последовательность функций
CreateFile (... GENERIC_READ ....)
size := GetFileSize(...)
setlength(buf, size);
ReadFile(... @buf[1], size, ....)
CloseFile();

т.е. ты открываешь файл на чтение. Получаешь его размер.
Под этот размер расширяешь строку, и сразу весь файл считываешь в неё.
Если возможно то приведи плиз полный пример кода, а то хз как это юзать ;(

И ещё, эта функция тоже пихает весь файл в оперативку? если к примеру файл 100 метров
 

  #4039  
Старый 02.08.2009, 20:33
.::[КОСТЕТ]::.
Новичок
Регистрация: 21.05.2009
Сообщений: 3
Провел на форуме:
3289

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

СПАСИБО!
 

  #4040  
Старый 02.08.2009, 22:24
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

1 Nightmarе для больших файлов тебе нужно переписывать сам алгоритм отправки.
т.е. подгрузку реализовывать внутри самой функции отправки.
Но вообще лучше проверить размер файлов и если размер больше 64 кила.
ТО выделить буфер на 64 кила и читать пока читается и сразу отсылать.
 
 





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


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




ANTICHAT.XYZ