![]() |
|
الدالة : CreateFile - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : الدالة : CreateFile (/showthread.php?tid=1018) |
الدالة : CreateFile - TF6M - 04-07-2009 السلام عليكم و رحمة الله و بركاته ,, ممكن شرح الباراماتر الرابع للدالة : كود : Function [color=Red]CreateFile[/color](lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD;
lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD;
hTemplateFile: THandle): THandle; stdcall;lpSecurityAttributes : لم أفهم منه غير أنه عبارة على مؤشر نحو SECURITY_ATTRIBUTES ??:mad: . و جازاكم الله كل خير . الدالة : CreateFile - me_delphi - 04-07-2009 طبعا أخي الكريم فهو مؤشر نحو SECURITY_ATTRIBUTES structure الدي بدوره يحدد المقبض العائد(returned) هل سيتم وراتثه من طرف processes الابناء ادا كان lpSecurityAttributes يؤشر على nil فان المقبض لن تتم وراتثه الدالة : CreateFile - TF6M - 04-07-2009 me&delphi' كتب :طبعا أخي الكريم فهو مؤشر نحو SECURITY_ATTRIBUTES structure الدي بدوره يحدد المقبض العائد(returned) 1- تقصد مقبض الملف انو المنفذ في حالة نجاح الدالة ’’ + ما هي طبيعة التحديد . 2- ممكن توضح أكثر (المقبض لن تتم وراتثه) يعني لن نستطيع تمريره لـ SetFilePointer/Read&WriteFile بارك الله فيك . الدالة : CreateFile - me_delphi - 05-07-2009 هدا البارامتر أخي الكريم اختياري ولست ملزم به وأحسن شرح وهو لمبرمج الدالة http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx الدالة : CreateFile - TF6M - 05-07-2009 نعم كنت على دراية به لكن **** توضيح مقنع فقط ... بارك الله فيك . الدالة : CreateFile - TF6M - 05-07-2009 بالرغم من أن الـ lpSecurityAttributes = Nil لكنه يمرر الناتج (مقبض Hwnd) للدالة : SetFilePointer ???. هذا باتشر بسيط برمجته فقط للتجربة : كود : Program Test;
{$R Res.res}
{$HINTS Off}
{$OPTIMIZATION On}
{$WARNINGS Off}
Uses
Windows;
Const
ID_Bmp = 100;
Var CrFileResult: Hwnd;
Buf: Byte;
BytesR: Dword;
Function Int2Hex(DecValue: Integer): string;
Const HexV = '0123456789ABCDEF';
begin
Repeat
case DecValue mod 16 of
0..15: Result := HexV[DecValue mod 16 + 1] + Result;
End;
DecValue := DecValue div 16;
Until DecValue = 0;
End;
Function WindowProc(hWnd: hWnd; uMSG: DWord; wParam: wParam; lParam: lParam): Bool; stdcall;
Begin
Result := True;
Case uMSG of
$0010: //WM_CLOSE
EndDialog(hWnd, GetLastError);
$0002: //WM_DESTROY
PostQuitMessage(GetLastError);
$0111: //WM_COMMAND:
Case wParam and $FFFF of
10: ExitProcess(0);
11:
Begin
CrFileResult := CreateFile('000.Exe', GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
If CrFileResult <> INVALID_HANDLE_VALUE then
Begin
SetFilePointer(CrFileResult, 2, nil, 0);
ReadFile(CrFileResult, Buf, 1, BytesR, nil);
MessageBox(0, PChar('$' + Int2Hex(Buf)), '', $40 + $2000 + $00);
CloseHandle(CrFileResult);
End;
End;
End;
Else Result := False;
End;
End;
Begin
DialogBoxParam(HInstance,
PChar(666), 0, @WindowProc, 0);
End.المهم أيمكن أن يكون Buffer يعني متغير ليس له نمط محدد لأنه يمكن أن يأخذ قيمة Boolean و Pointer ؟؟؟ في نفس الوقت ؟؟. |