تبليغاتX
آموزش ، برنامه نویسی
طراحی و اجرای انواع پروژه های برنامه نویسی (شبکه ، بانک اطلاعات ، سیستمی ، کاربردی)
با اين برنامه مي توان صدا ها را از طريق ميكروفون و لاين اين و... در يك فايل با پسوند wav ذخیره کرد.

از این کد می توان در تروجان استفاده کرد و صدای victim را شنید.

نظر یادتون نره



اين كدها را در يك مودال قرار داده و از توابع آن در برنامه ها استفاده كنيد.

Private FName As String
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Public Enum MyState
Idle
Recording
Paused
End Enum
Private xState As MyState
Public Property Get FileName() As String
FileName = FName
End Property

Public Property Let FileName(ByVal sFileName As String)
FName = sFileName
End Property

Public Function StartRecord() As Boolean
On Error GoTo ER:
If FName = "|" Then GoTo ER:
Dim RS As String, cb As Long, I As Long
RS = Space$(128)
I = mciSendString("open new type waveaudio alias capture", RS, 128, cb)
I = mciSendString("record capture", RS, 128, cb)
xState = Recording
StartRecord = True
Exit Function
ER:
StartRecord = False
End Function

Public Function StopRecord() As Boolean
On Error GoTo ER:
If FName = "|" Then GoTo ER:
Dim RS As String, cb As Long, I As Long
RS = Space$(128)
I = mciSendString("save capture " & FName, RS, 128, cb)
I = mciSendString("close capture", RS, 128, cb)
xState = Idle
StopRecord = True
Exit Function
ER:
I = mciSendString("close capture", RS, 128, cb)
StopRecord = False
End Function

Private Sub Class_Initialize()
xState = Idle
End Sub

Private Sub Class_Terminate()
StopRecord
End Sub



Public Function PauseRecord() As Boolean
On Error GoTo ER:
If FName = "|" Then GoTo ER:
Dim RS As String, cb As Long, I As Long
RS = Space$(128)
If xState = Paused Then
I = mciSendString("record capture", RS, 128, cb)
xState = Recording
ElseIf xState = Recording Then
I = mciSendString("pause capture", RS, 128, cb)
xState = Paused
End If
PauseRecord = True
Exit Function
ER:
PauseRecord = False
End Function


Public Property Get State() As MyState
State = xState
End Property

 

قبل از استفاده با يك فايل با پسوند wav ایجاد کرده و به متغییر filename نسبت دهید.

از متودهای pouserecord و startrecord و stoprecord استفاده کنید.

  شما رو به خدا اگه استفاده كردين نظر بدن..............................

+ نوشته شده در  جمعه 16 تیر1385ساعت 10:58 قبل از ظهر  توسط محمد امیری  | 

يكي از مشكلاتي كه بسياري از تازه كاران در دلفي با آن مواجه مي شوند اجراي فايلهاي ديگر يا اجراي دستورات shell است.

در اين مقاله سعي ما بر اين است كه شما را با اجراي فايلهاي ديگر از درون دلفي و كنترل آنها آشنا كنيم. شما پس از خواندن اين مقاله خواهيد توانست به راحتي فايلهاي ديگر -و نه تنها exe- را از درون دلفي اجرا كنيد و حتي دستورات shell را نيز صادر كنيد. به عنوان مثال ممكن است بخواهيد يك فايل html را با Editor پيش فرض كاربر باز كنيد. يا يك فايل html را با Browser پيش فرض كاربر باز كنيد. يا شايد بخواهيد يك فايل BMP را با اديتور پيش فرض كاربر باز نماييد و يا اين كه يك فايل INF را نصب نماييد.

با خواندن اين مقاله شما مي توانيد به راحتي به تمامي اين اهداف برسيد.
تابع APIي وجود دارد به نام WinExec. شكل كلي اين تابع از اين قرار است:

 
WinExec(lpCmdLine: PAnsiChar; uCmdShow: Cardinal);
كه lpCmdLine خط دستور مورد نظر شما براي اجراي فايل و uCmdShow بايد يكي از مقادير زير را داشته باشد:
SW_HIDE SW_MAXIMIZE SW_MINIMIZE
SW_RESTORE SW_SHOW SW_SHOWDEFAULT
SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE
SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL


براي توضيحات بيشتر راجع به هر كدام از اين ثابت ها به راهنماي Windows SDK دلفي يا MSDN مراجعه كنيد.

تابع WinExec تابع بسيار قديمي و محدودي است و ما قصد نداريم در اين مقاله بيشتر از اين راجع به اين تابع صحبت كنيم.

تابع ديگري وجود دارد به نام ShellExecute. اين تابع در يونيت ShellAPI تعريف شده است. بنابر اين لازم است يونيت ShellAPI را در ليست uses يونيت خود وارد كنيد. اين يكي از توابع بسيار قدرتمند براي اجراي فايل است.
نگاهي به شكل كلي اين تابع بياندازيد:

 
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall;

hWnd Handle پنجره اي كه اين دستور را فراخوانده است.
Operation نوع دستوري مورد نظر جهت اجرا
FileName نام فايل يا شاخه
Parameters پارامترهاي مورد نظر در هنگام اجراي فايل exe
Directory شاخه پيش فرض در هنگام اجراي فايل
ShowCmd مشخص كننده چگوني نمايش فايل در هنگام اجرا

پارامتر اول يك متغيير از نوع HWND است.
لازم است براي كساني كه با مفهوم Handle در ويندوز آشنا نيستند توضيحاتي راجع به Handle بدهم. هر پنجره يا آبجكتي در ويندوز داراي يك Handle است كه براي دسترسي به آن پنجره يا آبجكت شما بايد از اين Handle استفاده كنيد. در واقع يك Handle يك عدد در مبناي 16 است. Handle يك عدد unique يا همتا است كه ويندوز آن را مقداردهي مي كند. اگر از يك پنجره دو Instance اجرا شده باشد (مثلا يك برنامه دو بار اجرا شده باشد) هر كدام از اين Instanceها يك Handle جداگانه دارند.
با اين تفاصيل پارامتر اول Handle پنجره اي است كه اين دستور را صادر كرده است. شما براي اين پارامتر مي توانيد از Application.Handle استفاده كنيد و يا آن را برابر 0 قرار دهيد. به علاوه مي توانيد Handle يك برنامه ديگر را بدهيد.

در صورتي كه شما مي خواهيد پيغام هاي اخطار آن فايل را دريافت كنيد يا آن را كنترل نماييد و يا تا اجراي كامل آن اجراي برنامه را متوقف كنيد با Handle برنامه خود را با استفاده از Application.Handle به اين پارامتر بدهيد.

پارامتر دوم مشخص كننده وظيفه اي است كه قرار است انجام شود. اين پارامتر مقادير پيش فرضي ندارد و بستگي به خصوصيات فايل اجرايي دارد. روي يك فايل از نوع Text كليد سمت راست ماوس را بزنيد. احتمالا موارد بالاي ليست "open"، "Edit with ..." , "print" است. هر كدام از اين رشته هاي مي توانند يك عمليات يا Operation باشند. به عنوان مثال شما مي خواهيد يك فايل Text را چاپ كنيد. در اين صورت كافي است از عبارت print به عنوان operation استفاده كنيد. يا مي خواهيد يك فايل rar را با استفاده از WinRar باز كنيد. در اين صورت مي توانيد از "Extract files" استفاده كنيد. حتما تا به حال متوجه شده ايد كه دستور ShellExecute چه مقدار انعطاف پذير است. با استفاده از اين فرمان مي توانيد هر گونه دستور Shell را اجرا نماييد.

پارامتر سوم مشخص كننده نام فايل يا شاخه اي است كه شما مي خواهيد عمليات بر روي آن انجام شود.
پارامتر چهارم ليست پارامترهايي است كه تمايل داريد فايل exe با اين پارامترها اجرا شود. پارامترها پنجم نيز نام شاخه پيش فرض در هنگام اجراي فايل مورد نظر شماست. اگر شما فايل exe اي را اجرا كنيد و اين فايل exe بخواهد از شاخه جاري فايلهاي اضافه اي را استفاده كند ويندوز شاخه جاري را به اون مطابق با اين شاخه اطلاع خواهد داد. و اما آخرين پارامتر مشخص كننده شكل اجراي فايل است. مقدار اين پارامتر مي تواند يكي از ثابت هايي ليستي باشد كه در ابتداي اين مقاله عنوان شد. به عنوان مثال شما مي توانيد از SW_HIDE استفاده كنيد كه در اين صورت فايل اجراي شما مخفي خواهد بود و يا از SW_SHOWMINIMIZE استفاده كنيد كه در اين صورت برنامه شما Minimizeشده اجرا مي شود.

و حالا به يك نكته خيلي مهم توجه كنيد:
1- رشته هاي اين تابع از نوع PChar هستند بنابراين شما بايد رشته هاي string را به صورت PChar به اين تابع بدهيد. شما مي توانيد به طور عادي رشته مورد نظر خود را به اين تابع بدهيد و يا در صورتي كه رشته مورد نظر شما string است بايد با استفاده با استفاده از دستور PChar آن را Typecast كنيد. به عنوان مثال:

 
ShellExecute(0, 'open', PChar(ExtractFilePath(Application.ExeName) + 'test.exe') , '', '', SW_SHOWNORMAL);

در اين مثال با استفاده از تابع ExtractFilePath و Application.ExeName كه حاوي آدرس كامل فايل Exe است شاخه اي كه فايل exe در آن قرار دارد را پيدا كرده ايم و سپس فايل test.exe را كه در كنار فايل اصلي اجرايي وجود دارد را به آن اضافه كرده ايم. كل اين عبارت TypeCast شده است به PChar.
جهت اطلاع كساني كه نمي دانند TypeCast چيست. TypeCast فرآيندي است كه شما متغيير يا Objectي را از يك نوع به نوع ديگري تبديل ميكنيد. كد زير را نگاه كنيد و با نوع پيشرفته تري از TypeCast آشنا شويد:

 
procedure TForm1.Button1Click(Sender: TObject); begin TButton(Sender).Caption := 'Test'; end;

در اين مثال Sender را از نوع TObject است TypeCast كرده ايم به TButton. و پراپرتي Caption آنرا تغيير داده ايم. براي اطلاعات بيشتر راجع به TypeCast به كتب دلفي مراجعه كنيد.


و اجازه دهيد به چند مثال جالب نيز نگاهي بياندازيم:
edit كردن يك فايل HTML با Editor پيش فرض HTML:

 
ShellExecute(Handle, 'edit', 'test.htm', '', '', SW_SHOW);
نصب يك فايل INF
 
ShellExecute(Handle, 'install', 'divx.inf', '', '', SW_SHOW);
فشرده ساختن يك فايل با استفاده از winrar و ارسال آن به ايميل:
 
ShellExecute(Handle, 'compress and mail...', 'test.file', '', '', SW_SHOW);
ارسال ايميل به mamouri@ganjafzar.com و با موضوع "Great Article":
 
ShellExecute(0, 'open', 'mailto:mamouri@ganjafzar.com?subject=GreatArticle', '', '', SW_SHOWNORMAL);
چگونه يك فايل exe را اجرا كنيم و تا اتمام آن برنامه را متوقف كنيم؟
 
uses ShellAPI;
...
function ExecAndWait(const ExecuteFile, ParamString : string): boolean;
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
begin
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(ExecuteFile);
lpParameters := PChar(ParamString);
nShow := SW_HIDE;
end;
if ShellExecuteEx(@SEInfo) then
begin
repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or
Application.Terminated;
Result:=True;
end
else
Result:=False;
end;

همان طور كه ملاحظه مي كنيد اين تابع به يونيت ShellAPI نياز دارد و بايد اين يونيت را در ليست uses يونيت خود اضافه كنيد.
در اين تابع از تابع ديگري به نام ShellExecuteEx استفاده شده است. اين تابع بر خلاف ShellExecute فقط يك پارامتر دارد كه بايد برابر متغييري از نوع TShellExecuteInfo قرار بدهيد. در ابتدا بايد با استفاده از تابع FillChar آنرا مقداردهي كنيد و وجود آنرا به ويندوز اطلاع دهيد. در واقع آن را Create كنيد:

 
FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo);

آبجكت ShellExecuteEx داراي پارامترهاي زير است:
 
cbSize: DWORD;
fMask: ULONG;
Wnd: HWND;
lpVerb: PAnsiChar;
lpFile: PAnsiChar;
lpParameters: PAnsiChar;
lpDirectory: PAnsiChar;
nShow: Integer;
hInstApp: HINST;

براي اطلاعات بيشتر راجع به اين پارامترها به راهنماي Windows SDK دلفي يا MSDN مراجعه كنيد. خروجي اين تابع از نوع boolean است و مشخص كننده اين است كه آيا اين تابع با موفقيت اجرا شده است يا نه؟
تابع ExecAndWait پس از اين كه اطمينان پيدا كرد كه فايل با موفقيت اجرا شده است يك حلقه repeat..until تشكيل داده. در داخل repeat دستور Application.ProcessMessage صادر شده است تا برنامه بتواند messageها را دريافت كند. سپس با استفاده از GetExitCodeProcess مقدار خروجي پروسس اجرا شده دريافت مي گردد. در صورتي كه خروجي اين تابع مخالف STILL_ACTIVE بود (كه نشانگر اجراي پروسس است) حلقه با كار خود ادامه مي دهد.

خروجي اين تابع مشخص كننده اجرا يا عدم اجراي فايل اجرايي است.

و حالا به چند مثال جالب ديگر توجه كنيد:
1- دسترسي به HotMail از درون دلفي:

 
program dummy;
var ToAddress: string;
EightSpaces: string;
begin
ToAddress := 'john@pacbell.net';
// Don't know why but this is required to get the
// correct compose address...
EightSpaces := ' ';
ShellExecute(Handle, PChar('open'), PChar('rundll32.exe'), PChar('C:\PROGRA~1\INTERN~1\HMMAPI.DLL,MailToProtocolHandler' + EightSpaces + ToAddress), nil, SW_NORMAL)
end.
2- نمايش ديالوگ مشخصات يك فايل:

 
procedure ShowPropertiesDialog(Filename: string);
var
SEI: TShellExecuteInfo;
begin
FillChar(SEI, SizeOf(SEI), 0);
with SEI do
begin
cbSize := SizeOf(SEI);
lpFile := PChar(Filename);
lpVerb := 'properties';
fMask := SEE_MASK_INVOKEIDLIST;
end;
ShellExecuteEx(@SEI);
end;

3- اجراي ديالوگ Screen ويندوز (Control Panel > Display)
 
ShellExecute(HInstance, nil, PCHAR('rundll32.exe'), PCHAR('shell32.dll, Control_RunDLL desk.cpl, , 3') { 3 is the tab index }, NIL, 1);

همان طور كه متوجه شديد 3 شماره Tabي است كه مورد نظر شماست.

4- يك مثال كامل تر از فرستادن ايميل با استفاده از Outlook يا ارسال كننده پيش فرض email:

 
var
mail: string;
begin
mail := 'mailto:you@you.com' +
'?subject=hello' +
'&cc=me@me.com' +
'&body=Delphi is cool! ;)';
ShellExecute(Self.Handle, 'open', PChar(mail), nil, nil, SW_SHOWNORMAL);
خروجي هاي تابع ShellExecute يا ShellExecuteEx

خروجي هاي اين دو تابع مي تواند يكي از مقادير زير باشد:
0 سيستم عامل داراي resourceهاي كافي يا حافظه كافي جهت اجرا نيست.
ERROR_FILE_NOT_FOUND فايل مورد نظر پيدا نشد.
ERROR_PATH_NOT_FOUND آدرس مشخص شده پيدا نشد.
ERROR_BAD_FORMAT فايل EXE نامعتبر است يا اين يك فايل EXE از نوع Win32 نيست.
SE_ERR_ACCESSDENIED سيستم عامل دسترسي به فايل مشخص شده ندارد.
SE_ERR_ASSOCINCOMPLETE association فايل مورد نظر شما ناقص يا نامعتبر است. مثلا مشخص نشده كه فايل bmp كه شما مي خواهيد آن را اجراه كنيد بايد با چه برنامه اي باز شود.
SE_ERR_DDEBUSY DDE transaction مربوطه كامل نشد زيرا DDE transactionهاي ديگري در حال اجرا بودند.
SE_ERR_DDEFAIL DDE transaction ناموفق بود.
SE_ERR_DDETIMEOUT DDE transaction نتوانست اجرا شود زيرا درخواست Time Out شد.
SE_ERR_DLLNOTFOUND فايل dynamic-link library يا dll مشخص شده پيدا نشد.
SE_ERR_FNF فايل مورد نظر پيدا نشد.
SE_ERR_NOASSOC هيچ برنامه اي با پسوند فعلي فايل منطبق نشده است. مثلا مشخص نشده كه فايل bmp كه شما مي خواهيد آن را اجراه كنيد بايد با چه برنامه اي باز شود.
SE_ERR_OOM حافظه كافي جهت اجراي عمليات وجود ندارد.
SE_ERR_PNF آدرس مشخص شده پيدا نشد.
SE_ERR_SHARE يك خطاي sharin violation پيش آمد. يعني فايل مورد نظر share شده بود.


خلاصه:
در اين مقاله با سه تابع API مهم به نام هاي WinExec و ShellExecute و ShellExecuteEx آشنا شديم و پارامترهاي آنها را بررسي كرديم. به علاوه مثالهاي متعددي راجع به استفاده از ShellExecute ارائه داديم. به علاوه ثابتهاي استفاده شده در اين تابع ها را ليست كرده و بعضا آنها را مورد بررسي قرار داديم. همچنين تابعي به نام ExecAndWait ارائه داديم كه كار آن اجراي يك فايل exe و متوقف كردن برنامه تا اتمام فايل exe آشنا شديم و ساختمان داخلي اين تابع را مورد بررسي قرار داديم.

موفق و مويد و منصور باشيد
+ نوشته شده در  جمعه 16 تیر1385ساعت 10:50 قبل از ظهر  توسط محمد امیری  | 

XML مي تواند دقيقا همچون يك Table براي شما عمل نمايد. در واقع شما مي توانيد با استفاده از XML اطلاعات خودتان را در قالب يك جدول ذخيره كنيد.
براي اين كار مي توانيد از كمپوننت ClientDataSet استفاده كنيد. (اين كمپوننت را مي توانيد در تب DataAccess بيابيد). در واقع اين كمپوننت يك In-Memory Table است. يعني اطلاعات خود را در حافظه نگهداري مي كند و به همين علت نيز فوق العاده سريع است.
نگاهي به كد زير بيانداريد و با Load كردن يك XML و درست كردن آن آشنا شويد:

 
     ClientDataSet1.FileName := ExtractFilePath(
Application
.ExeName) +
'test.xml'; if FileExists(ClientDataSet1.FileName) then ClientDataSet1.Open else begin //AddFieldDef version with ClientDataSet1.FieldDefs do begin Clear; with AddFieldDef do begin Name := 'ID'; DataType := ftAutoInc; end; //with AddFieldDef do with AddFieldDef do begin Name := 'First Name'; DataType := ftString; Size := 20; end; //with AddFieldDef do with AddFieldDef do begin Name := 'Last Name'; DataType := ftString; Size := 20; end; //with AddFieldDef do end; //with ClientDataSet1.FieldDefs ClientDataSet1.CreateDataSet; end; //else

همان طور كه در اين كد مشاهده مي كنيد در ابتدا سعي شده است كه فايل test.xml را كه در شاخه خود برنامه قرار دارد Load كنيم و در صورتي كه اين فايل پيدا نشد. آنگاه مي توان به سادگي (همان طور كه مي بينيد) اين فايل را از ابتدا تعريف كرد. فيلدهاي مورد نظر و مشخصات مورد نياز خود را وارد كنيم و همچنين در صورتي كه نياز بود با استفاده از IndexDefs يك يا چند Index جديد ساخت.

به چند نكته راجع به اين كد توجه كنيد:
1- با استفاده از متد FieldDefs.AddFieldDef مربوط به ClientDataSet مي توانيد يك فيلد جديد درست كنيد.
2- براي ساخت Index نيز مي توانيد از متد IndexDefs.AddIndexDef مربوط به ClientDataSet استفاده كرد.
2- هر فيلد مي توانيد شامل انواع زير باشد:

type TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd);


بنابراين شما به جاي ftString و يا ftAutoInc مي توانيد از هر كدام از اين ثابت ها استفاده كنيد.
همان طور كه مستحضريد به راحتي مي توانيد در XML حتي از BLOB هم استفاده كرده و در آن صدا يا تصوير ذخيره كنيد.
3- از متد CreateDataSet پس از ساخت فيلدهاي مورد نظرتون استفاده كنيد تا اين تغييرات تثبيت بشود.
4- يك ClientDataSet را مي توانيد به سادگي به يك كمپوننت DataSource وصل كنيد. پس از آن مي توانيد از هر كمپوننت Data-Aware مثل DBGrid براي Browse يا ويرايش اطلاعات استفاده كنيد.
5- با استفاده از Filter و Filtered مي توانيد به سادگي اطلاعات رو فيلتر كنيد و به علاوه به سادگي مي توانيد از Locate و FindKey و FindNearest براي جستجو در Tableتون استفاده كنيد.
6- در ClientDataSet هم مي توانيد از Lookupها و فيلدهاي محاسباتي استفاده كنيد. همچنين مي توانيد دو نوع فيلد ديگه به اسم InternalCalc و Aggregate رو هم استفاده كنيد. راهنماي مربوط به InternalCalc و Aggregate دلفي رو در اين جا آورده ام:

InternalCalc:
Retrieves values calculated at runtime by a client dataset and stored with its data (instead of being dynamically calculated in an OnCalcFields event handler). InternalCalc is only available if you are working with a client dataset. Values calculated for an InternalCalc field are stored and retrieved as part of the client dataset’s data.

Aggregate:
Retrieves a value summarizing the data in a set of records from a client dataset.

موفق و مويد و منصور باشيد
+ نوشته شده در  جمعه 16 تیر1385ساعت 10:47 قبل از ظهر  توسط محمد امیری  | 

سلام دوستان

از موضوع تاپيك معلومه كه چيه پس توضيح نمي دم

ابتدا يك ماژول به پروژه اضافه كنيد و كد زير رو در اون وارد كنيد :

کد:

Option Explicit

Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDBLCLK = &H206
Public Const HWND_TOPMOST = -1

Public nid As NOTIFYICONDATA

Public Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uId As Long
uFlags As Long
uCallBackMessage As Long
hIcon As Long
szTip As String * 64
End Type

حالا در فرم برنامتون بك منو بسازد و اسمش رو mnuSysTray بزاريد و كد زير رو در فرم وارد كنيد :

کد:

Private Sub Form_Load()
WindowState = vbMinimized
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Sys As Long
Sys = X / Screen.TwipsPerPixelX
Select Case Sys
Case WM_RBUTTONDOWN:
Me.PopupMenu mnuSysTray
End Select
End Sub

Private Sub Form_Resize()
If WindowState = vbMinimized Then
Me.Hide
Me.Refresh
With nid
.cbSize = Len(nid)
.hwnd = Me.hwnd
.uId = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallBackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
.szTip = Me.Caption & vbNullChar
End With
Shell_NotifyIcon NIM_ADD, nid
Else
Shell_NotifyIcon NIM_DELETE, nid
End If
End Sub

كار تمومه حالا با اجراي برنامه آيك رو مي تونيد در SysTray يا همون كنار ساعت ببينيد و با كليك راست روي اون منويي كه ساختيد نمايش داده ميشه . اگر مشكلي بود من در خدمتم

+ نوشته شده در  جمعه 2 تیر1385ساعت 11:31 بعد از ظهر  توسط محمد امیری  | 

طريقه بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک
اطلاعاتي که روالهاي زير برمي گرداند عبارتست از شماره سريال - نوع سيستم فايل -
پشتيباني از نام فايلهاي طولاني و نام درايو

From The Windows.Pas
--------------------
--------------------

function GetVolumeInformationA(lpRootPathName: PAnsiChar;
lpVolumeNameBuffer: PAnsiChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: PAnsiChar; nFileSystemNameSize: DWORD): BOOL; stdcall;

function GetVolumeInformationW(lpRootPathName: PWideChar;
lpVolumeNameBuffer: PWideChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: PWideChar; nFileSystemNameSize: DWORD): BOOL; stdcall;

function GetVolumeInformation(lpRootPathName: PChar;
lpVolumeNameBuffer: PChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: PChar; nFileSystemNameSize: DWORD): BOOL; stdcall;

Example
-------
-------

Used Variables
--------------
Path : PChar;
--> String that contains the root directory of the volume to
be described.
VolumeName : PChar;
--> Points to a buffer that receives the name of the specified
volume.
VolumeNameSize : DWord;
--> Specifies the lenght in characters of the buffer that
receives the volume name.
SerialNumber : DWord;
--> Points to a variable that receives the volume's serial
number.
MaxLength : DWord;
--> Receives the maximum length in characters of a filename
supported by the specified file system.
(to indicate if long file names are supported)
- long file names --> value : 255
Flags : DWord;
- FS_CASE_IS_PRESERVED
- FS_CASE_SENSITIVE
- FS_UNICODE_STORED_ON_DISK
- FS_PERSISTENT_ACLS
- FS_FILE_COMPRESSION
- FS_VOL_IS_COMPRESSED
(for more info on the flags look in the help file)
FileSystem : PChar;
--> Points to a buffer that receives the name of the specified
file system.
FileSystemNameSize: DWord;
--> Specifies the lenght in characters of the buffer that
receives the filesytem name.

Code
----
Path := 'C:\';
VolumeNameSize := 256;
FileSystemNameSize := 256;
GetVolumeInformation(Path,VolumeName,VolumeNameSize,
@SerialNumber,MaxLength,Flags,FileSystem,FileSystemNameSize);
+ نوشته شده در  جمعه 2 تیر1385ساعت 11:27 بعد از ظهر  توسط محمد امیری  |