Если прога запускается под отладчиком (или из IDE делфового ), то полюбому будет выскакивать(потому как отладчик ловит эксепшены в первую очередь) Ты запускай отдельно прогу лучше. Или если в отладчике, то просто продолжай выполнение
Получаю скрин активного окна таким образом: А как получить скрин конкретного элемента этого активного окна? Допустим координаты мне известны, и размер элемента тоже (координаты размещения элемента именно на форме):
НTL, Code: try body:=IdHTTP1.Get('http://site.com/script.php'); except on EIdHTTPProtocolException do begin //Твой код end; end;
Закомментируй в IdHTTP.pas строчку, которая выделяется в дельфи при эксепшене. Code: raise что-то там...
Знаеш скока там таких? Давай так, если у тебя не выдает такую ошибку то ты мне скинешь свой idhttp.pas
Вы идиоты!(с) Dr. House Нихрена там ниче коментить не надо!, Всего лишь надо try,except и все, ошибка вылетает в среде делфи(под отладчиком), просто скомпилируй запусти и не будет вылетать эксепшена...
[n]-c0der, я ему это говорил, но, видать, что-то не получается у него. Когда в дельфи открываешь прогу, отсылаешь запрос, дельфя при эксепшене октрывает IdHTTP.pas и выделяет строчку, которая генерит ошибку, вот ты и закомментируй её. У меня не выдает, использую метод, выложенный мною выше. Версии инди у нас могут быть разные.
Думаеш самый умный? Читай тему У меня выделяет строчке в Unit1 которая отсылает ( RichEdit1.Lines.Text := UTF8ToAnsi(IdHTTP1.Get(Хост)) В этом и дело что версии разные... вот я и заиспользую IdHTTP от другой версии... А еще лучше если скинеш всю папку Indy...
мне нужно использовать в качестве RandSeed строку. тоесть надо какойнибудь алгоритм переделывания строки в Longint, ну и что бы совпадений небыло. есть идеи?
как вариант - Code: var s:string d:dword; begin d:= dword(pointer(@s[1])^); end; т.е. цифровое представление первых 4- байт как 1 двойного слова. диапазон начала может быть от 1 до length(s)-3 Ну или про суммируй все такие 4-ки байт.
привеит всем возник такой вопрос как узнать по букве визическое имя диска? вчастности флеш =) пробовал так Code: QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR); в lpQuery будет строка типа Code: '\Device\Harddisk1\DP(1)0-0+9' чтозначат чимволы после Harddisk1? да и прав ли я в том что '\\.\PHYSICALDRIVE1' = '\Device\Harddisk1\DP(1)0-0+9'? если да то почему бывает такая ошибка когда начинаю извлекать безопасно диск пиши F а он извлекает к примеру диск E все эти диски флеш да и потом через прогу немогу извлечить диск F! вот код модуля где я извелкаю диски (USBFLASH) Code: 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. ткните носом в мои ошибки! если можно то с примерами исправления!
slesh, по посту 4030 поможешь? Так и не осилил PrintWindow, чтобы получить скрин интересующего меня элемента на форме (координаты и размер известны)