![]() |
|
ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 (/showthread.php?tid=6628) |
ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - hamou1982 - 12-12-2014 السلام عليكم ورحمة الله تعالى هذا الكود يعمل على الويندوز xp ولكن لا يعمل على الويندوز 7 وكأن البرنامج المستعمل فيه ليس به كود الحماية كود : function GetIdeSerialNumber():string;
const IDENTIFY_BUFFER_SIZE = 512;
type
TIDERegs = packed record
bFeaturesReg : BYTE; // Used for specifying SMART "commands".
bSectorCountReg : BYTE; // IDE sector count register
bSectorNumberReg : BYTE; // IDE sector number register
bCylLowReg : BYTE; // IDE low order cylinder value
bCylHighReg : BYTE; // IDE high order cylinder value
bDriveHeadReg : BYTE; // IDE drive/head register
bCommandReg : BYTE; // Actual IDE command.
bReserved : BYTE; // reserved for future use. Must be zero.
end;
TSendCmdInParams = packed record
cBufferSize : DWORD;
irDriveRegs : TIDERegs;
bDriveNumber : BYTE;
bReserved : Array[0..2] of Byte;
dwReserved : Array[0..3] of DWORD;
bBuffer : Array[0..0] of Byte; // Input buffer.
end;
TIdSector = packed record
wGenConfig : Word;
wNumCyls : Word;
wReserved : Word;
wNumHeads : Word;
wBytesPerTrack : Word;
wBytesPerSector : Word;
wSectorsPerTrack : Word;
wVendorUnique : Array[0..2] of Word;
sSerialNumber : Array[0..19] of CHAR;
wBufferType : Word;
wBufferSize : Word;
wECCSize : Word;
sFirmwareRev : Array[0..7] of Char;
sModelNumber : Array[0..39] of Char;
wMoreVendorUnique : Word;
wDoubleWordIO : Word;
wCapabilities : Word;
wReserved1 : Word;
wPIOTiming : Word;
wDMATiming : Word;
wBS : Word;
wNumCurrentCyls : Word;
wNumCurrentHeads : Word;
wNumCurrentSectorsPerTrack : Word;
ulCurrentSectorCapacity : DWORD;
wMultSectorStuff : Word;
ulTotalAddressableSectors : DWORD;
wSingleWordDMA : Word;
wMultiWordDMA : Word;
bReserved : Array[0..127] of BYTE;
end;
PIdSector = ^TIdSector;
TDriverStatus = packed record
bDriverError : Byte;
bIDEStatus : Byte;
bReserved : Array[0..1] of Byte;
dwReserved : Array[0..1] of DWORD;
end;
TSendCmdOutParams = packed record
cBufferSize : DWORD;
DriverStatus : TDriverStatus;
bBuffer : Array[0..0] of BYTE;
end;
var
hDevice : THandle;
cbBytesReturned : DWORD;
// ptr : PChar;
SCIP : TSendCmdInParams;
aIdOutCmd : Array [0..(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1] of Byte;
IdOutCmd : TSendCmdOutParams absolute aIdOutCmd;
procedure ChangeByteOrder(var Data; Size : Integer );
var
ptr : PChar;
i : Integer;
c : Char;
begin
ptr := @Data;
for i := 0 to (Size shr 1)-1 do
begin
c := ptr^;
ptr^ := (ptr+1)^;
(ptr+1)^ := c;
Inc(ptr,2);
end;
end;
begin
Result := ''; // return empty string on error
if SysUtils.Win32Platform=VER_PLATFORM_WIN32_NT then // Windows NT, Windows 2000
begin
//íãßä ÊÛíÑ PhysicalDrive0 Çáì PhysicalDrive1 Çæ PhysicalDrive2
hDevice := CreateFile( '\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
end
else // Version Windows 95 OSR2, Windows 98
hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
FillChar(SCIP,SizeOf(TSendCmdInParams)-1,#0);
FillChar(aIdOutCmd,SizeOf(aIdOutCmd),#0);
cbBytesReturned := 0;
with SCIP do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bSectorCountReg := 1;
bSectorNumberReg := 1;
bDriveHeadReg := $A0;
bCommandReg := $EC;
end;
end;
if not DeviceIoControl( hDevice, $0007c088, @SCIP, SizeOf(TSendCmdInParams)-1,
@aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
with PIdSector(@IdOutCmd.bBuffer)^ do
begin
ChangeByteOrder( sSerialNumber, SizeOf(sSerialNumber) );
(PChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0;
Result := PChar(@sSerialNumber);
end;
end;
function get_password(a: string): string;
var
b: string;
c: char;
i,n: integer;
begin
b:='';
for i := 1 to length(a) do
begin
c:= a[i];
n:= ord(c);
n:=n+(2*i);
b:=b+chr(n);
end;
Result:=b;
end;ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - Anew - 13-12-2014 بارك الله بيك اخي ما الذي يفعلة هذا الكود توضيح اكثر ممكن ما هوه الشي الذي لا يعمل فيه ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - hamou1982 - 13-12-2014 Anew كتب :بارك الله بيك اخي ما الذي يفعلة هذا الكود السلام عليكم وؤحمة الله تعالى وبركاته في الويندوز xp يظهر رقم الهارد ديسك في Edit حتى يتم جلب رمز التشفير وفي الويندوز 7 لا يظهر رقم الهارد ديسك يعني تظهر edit فارغة وبناء على وجود edit فارغة بمجرد الضغط على زر الدخول الى البرنامج يدخل عادي بدون طلب رمز التشفير ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - hamou1982 - 13-12-2014 اليك المرفق اخي حتى تتضح الامور اكثر ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - khalmoh1971 - 19-12-2014 نفس الكود صالح و لكن فى وجود الادمن جرب ان شاء الله يعمل انا استخدم هذا الكود ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - bassem_43 - 20-12-2014 السلام عليكم انصحك اخي باستعمال الوحدة hddinfo الموجودة في هدا الموضوع احسن، استعملها شخصيا مع win7 ولا مشاكل http://www.delphi4arab.net/forum/showthread.php?tid=5831&highlight=serial وهدا ايضا سيفيدك http://www.delphi4arab.net/forum/showthread.php?tid=7967&highlight=serial بالتوفيق ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - أبو معاذ - 20-12-2014 [INDENT] السلام عليكم ، وأيضا يمكنك الاستفادة من هذا الموضوع : مثال كامل لمعرفة الرقم التسلسلي للقرص الصلب + معلومات اخرى [/INDENT] ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - hamou1982 - 26-12-2014 khalmoh1971 كتب :نفس الكود صالح و لكن فى وجود الادمن جرب ان شاء الله يعمل انا استخدم هذا الكودمرحبا فعلا كما قلت عند اشغل البرنامج يالادمين يظهر رقم الهارد لكن كيف يمكنني اضافة الادمين داخل البرنامج ليعمل تلقائيا بالادمين لأن المشكلة انه اذا لم اشغل البرنامج بالادمين يشتغل البرنامج بدون طلب كلمة المرور |