نظر یادتون نره التماستون می کنم
کد های دلفی واسه اهلش
اجراي ديالوگ 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);
ازبين بردن يه task
uses
Tlhelp32, Windows, SysUtils;
function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeF ile)) =
UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle,
FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
استفاده از توابع Rundll32
Call functions from Rundll always like that:
WinExec(PChar('rundll32 ...'),SW_SHOWNORMAL);
where rundll32... should be replaced by one of the functions below.
* Shutdown Windows:
Windows beenden:
Rundll32.exe user,ExitWindows
* Install a Screensaver:
rundll32.exe desk.cpl,InstallScreenSaver c:\windows\system\ssaver.scr
* Call the Standard newsreader:
rundll32.exe url.dll,NewsProtocolHandler borland.public.delphi.objectpascal
* Call the Standard Mailprogram:
rundll32.exe url.dll,MailToProtocolHandler info@swissdelphicenter.ch
* Make a Telnet Connection:
rundll32.exe url.dll,TelnetProtocolHandler 172.134.77.119
* Dialog: Copy Disk:
rundll32.exe diskcopy.dll,DiskCopyRunDll
* Dialog: Format Disk:
rundll32.exe shell32.dll,SHFormatDrive
* Call a Connection with a configured Connection:
rundll32.exe rnaui.dll,RnaDial Internetzugang
* Call Assistants of a Ras-Connection without previous Explanation:
rundll32.exe rnaui.dll,RnaWizard @1
* The same with Explanations:
rundll32.exe rnaui.dll,RnaWizard
* Print a Testpage on a printer:
rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintTestPage
* Call Assistants to install a printer:
rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
* Call Add/Remove Software:
rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl
* Show Properties for Modems:
rundll32.exe shell32.dll,Control_RunDLL modem.cpl
* Call Assistants to configure a Modem:
rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
* Show the Network configuration:
rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
* Assistant to install hardware
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
* Properties for the Display:
-Background
-Hintergrund:
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
-Screensaver
-Bildschirmschoner
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
-Display
-Darstellung
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
-Settings
-Einstellungen
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
* Open a file with its associated application :
rundll32.exe url.dll,FileProtocolHandler mydocument.doc
Switch User
function LockWS : Boolean;
type
TLockWorkStation = function : Boolean;
var
hUser32 : HMODULE;
LockWorkStation : TLockWorkStation;
begin
hUser32 := GetModuleHandle('USER32.DLL');
if hUser32 <> 0 then
begin
@LockWorkStation := GetProcAddress(hUser32,'LockWorkStation');
if @LockWorkStation <> nil then
begin
LockWorkStation;
Result := True;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LockWS;
end;
Minimize کردن تمام پنجره ها
procedure TForm1.Button1Click(Sender: TObject);
var
h: HWnd;
begin
h := Handle;
while h > 0 do
begin
if IsWindowVisible(h) then
PostMessage(h, WM_SYSCOMMAND, SC_MINIMIZE, 0);
h := GetNextWindow(h, GW_HWNDNEXT);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Keybd_event(VK_LWIN, 0, 0, 0);
Keybd_event(Byte('M'), 0, 0, 0);
Keybd_event(Byte('M'), 0, KEYEVENTF_KEYUP, 0);
Keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
end;
آیا سطل زباله خالی است ؟
uses
Activex, ShlObj, ComObj;
function RecycleBinIsEmpty: Boolean;
const
CLSID_IRecycleBin: TGUID = (D1: $645FF040; D2: $5081; D3: $101B;
D4: ($9F, $08, $00, $AA, $00, $2F, $95, $4E));
var
EnumIDList: IEnumIDList;
FileItemIDList: PItemIDList;
ItemCount: ULONG;
RecycleBin: IShellFolder;
begin
CoInitialize(nil);
OleCheck(CoCreateInstance(CLSID_IRecycleBin, nil, CLSCTX_INPROC_SERVER or
CLSCTX_LOCAL_SERVER, IID_IShellFolder, RecycleBin));
RecycleBin.EnumObjects(0,
SHCONTF_FOLDERS or
SHCONTF_NONFOLDERS or
SHCONTF_INCLUDEHIDDEN,
EnumIDList);
Result := EnumIDList.Next(1, FileItemIDList, ItemCount) <> NOERROR;
CoUninitialize;
end;
آيا کامپيوتر به شبکه متصل است؟
procedure TForm1.Button1Click(Sender: TObject);
begin
if GetSystemMetrics(SM_NETWORK) and $01 = $01 then
ShowMessage('Computer is attached to a network!')
else
ShowMessage('Computer is not attached to a network!');
end;
اجرای dial up connection
uses
ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
begin
case OSVer of
VER_PLATFORM_WIN32_NT:
// Win NT, 2000, XP:
{connection_name = the name of the connection in "Network and
DialUp Connections", logon = logon string, password = password string.
All are separated by spaces.}
ShellExecute(Handle, 'open', 'rasdial.exe', 'connection_name logon password', nil, SW_HIDE);
// disconnect:
// ShellExecute(Handle, 'open', 'rasdial.exe', ' /disconnect', nil, SW_HIDE);
VER_PLATFORM_WIN32_WINDOWS:
// VERSION = 95, 98
(*
Dial Up Networking (DUN)
module:
RNAUI.DLL
command:
rundll32.exe rnaui.dll,RnaDial {name of connection to establish}
result:
displays the Connect To dialog for the passed connection
*)
ShellExecute(Handle, PChar('open'), PChar('rundll32.exe'),
PChar('rnaui.dll,RnaDial exact name of dialer entry TRACERT -h 1 -w 1'),nil, SW_NORMAL);
end;
end;
اجرای find file
uses
DDEMan;
procedure SearchInFolder(Folder: string);
begin
with TDDEClientConv.Create(Self) do
begin
ConnectMode := ddeManual;
ServiceApplication := 'Explorer.exe';
SetLink('Folders', 'AppProperties');
OpenLink;
ExecuteMacro(PChar('[FindFolder(, ' + Folder + ')]'), False);
CloseLink;
Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SearchInFolder('c:\Windows');
end;
{************************************}
// Or even easier with ShellExecute:
ShellExecute(Handle, 'find', 'C:\Windows', nil, nil, SW_SHOW);
{************************************}
// Suchen-Dialog ausführen und einen Suchstring übergeben:
uses
ShellAPI;
procedure WindowsSuchenDialog(Verzeichnis, Suchstring: string);
var
hOtherWin, hFocusWin: HWND;
OtherThreadID, iTimeOut: Integer;
aDwordVar: DWORD;
buf: array [0..40] of Char;
sVerz: string;
begin
// ShellExecute(application.handle, 'find', 'c:\', nil, nil, SW_SHOWNORMAL);
// oder mit TDDEClientConv
with TDDEClientConv.Create(nil) do
begin
ConnectMode := ddeManual;
ServiceApplication := 'explorer.exe';
SetLink('Folders', 'AppProperties');
OpenLink;
sVerz := IncludeTrailingBackslash(Verzeichnis);
ExecuteMacro(PChar('[FindFolder(, '+ sVerz +')]'), False);
CloseLink;
Free;
end;
iTimeOut := 0;
repeat
{ Warten, bis der Such Dialog erscheint.
Unter Win95/98/NT4 hat der Suchdilaog die Klasse #32770.
Unter ME/2000/XP ist die Suche in den Explorer integriert,
darum auf CabinetWClass warten}
Sleep(100);
hOtherWin := GetForegroundWindow;
buf[0] := #0;
GetClassName(hOtherWin, buf, 60);
inc(iTimeOut);
until (StrComp(buf, '#32770') = 0) or (StrComp(buf, 'CabinetWClass') = 0) or (iTimeOut > 20);
if iTimeOut > 20 then Exit;
repeat
{ Wait until it is visible }
{ Warten, bis das Fenster erscheint }
Sleep(100);
until IsWindowVisible(hOtherWin);
{ Handle vom Control finden, welches den Fokus besitzt }
OtherThreadID := GetWindowThreadProcessID(hOtherWin, @aDwordvar);
if AttachThreadInput(GetCurrentThreadID, OtherThreadID, True) then
begin
hFocusWin := GetFocus;
if hFocusWin <> 0 then
try
SendMessage(hFocusWin, WM_SETTEXT, 0, Longint(PChar(Suchstring)));
finally
AttachThreadInput(GetCurrentThreadID, OtherThreadID, False);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
WindowsSuchenDialog('c:\temp','test.txt');
end;
kill task
;(ShowWindow(Application.Handle,SW_HIDE
برای نمايش دادن
;(ShowWindow(Application.Handle,SW_SHOW
خاموش و روشن کردن کامپیوتر - اسکرین سیور و power options
function PowerMng(Action:String;Force:Boolean):boolean;
var
rl: Cardinal;
hToken: Cardinal;
tkp: TOKEN_PRIVILEGES;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
//Get access to windows privilege
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;;
tkp.PrivilegeCount := 1;
AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
//Shutdown Windows
if (Action='1') and (Force=false) then
begin
ExitWindowsEx(EWX_SHUTDOWN, 0)
end
else
if (Action='1') and (Force=true) then
begin
(ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0));
end;
//Restart/Reboot Windows
if (Action='2') and (Force=false) then
begin
ExitWindowsEx(EWX_REBOOT, 0)
end
else
if (Action='2') and (Force=true) then
begin
(ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0));
end;
//Log Off Windows
if (Action='3') and (Force=false) then
begin
ExitWindowsEx(EWX_LOGOFF, 0)
end
else
if (Action='3') and (Force=true) then
begin
(ExitWindowsEx(EWX_LOGOFF or EWX_FORCE, 0));
end;
//Turn off monitor
if (Action='4') and (Force=true) then
begin
SendMessage(Application.Handle,WM_SYSCOMMAND,SC_MONITORPOWER,2);
end
else
if (Action='4') and (Force=true) then
//Turn on monitor
begin
SendMessage(Application.Handle,WM_SYSCOMMAND,SC_MONITORPOWER,0);
end;
//Activating screensaver
if (Action='5') then
begin
DefWindowProc(Form1.Handle{Application.Handle},WM_SYSCOMMAND,SC_SCREENSAVE,0);
end;
end;
end;
// مثال
procedure TForm1.Button1Click(Sender: TObject);
begin
PowerMng('1',false);
//خاموش کردن
PowerMng('2',false);
//ریبوت کردن
PowerMng('5',false);
//فعال کردن screen saver
end;
چه زبانی را برای برنامه نویسی انتخاب کنیم ؟؟؟؟
امروز می خوام به مهمترین و بحث برانگیزترین سوال جامعه برنامه نویسی بپردازم. در اولین گام های برنامه نویسی سوالی که در ذهن دوستان بوجود می آید این است که با چه زبانی برنامه نویسی کنیم؟؟؟ به نظر من در بین زبان های برنامه نویسی که تاکنون بوجود آمده است هرکدام دارای قدرت و سهولت استفاده متفاوتی می باشند. در ادامه به بررسی زبان های برنامه نویسی می پردازم و در آخر در جمع بندی خودم می گویم که به نظر من با چه زبانی شروع به برنامه نویسی کنید:
اسمبلی : زبان اسمبلی دارای قدرت و استحکام خوبی است ولی چون دارای ساختار زبانی ساده ای نمی باشد گرایش کمتری به سمت آن است. از این زبان بیشتر برای ارتباط بین سیستم عامل و قطعات سخت افزاری استفاده می شود ( هرچند زبان سی امروزه اینکار را بسیار سریع تر و آسان تر کرده است ). در کل دارای ساختار پیچیده ای است و یادگیری آن به طبع مشکل!!!
سی : زبانی دارای ساختاری مستحکم و ساده. جزء برترین زبان های تاریخ کامپیوتر. زبانی که هسته سیستم عامل ها بوسیله آن نوشته شده است. ( بلی هسته سیستم عامل ویندوز هم بوسیله سی نوشته شده است نه بیسیک!!! ) زبانی است که با تفاوتی اندک دارای شاخه های فراوانی شد. در کل زبانی است کامل و پیشرفته.
بیسیک : ساده. تنها برتری آن به دیگر زبان های برنامه نویسی دیگر.
پاسکال : مخلوطی از سادگی بیسیک و قدرت سی. در کل زبانی کامل به مانند سی است.
جمع بندی : این جمع بندی هیچ ربطی به نوشته های بالا ندارد!!! ابتدا به این نکته اشاره می کنم که بهتر است به یک زبان پایبند نباشید و سعی کنید حداقل دو زبان برنامه نویسی را فرا بگیرید. ( مثلا پاسکال و سی در کنار هم. می گید سخته!!!!! چه طور می تونید زبان انگلیسی و فارسی و ترکی رو در کنار هم یاد بگیرید ولی از پس دوتا زبان برنامه نویسی بر نمی یاید!!!!! بلی یادگیری زبان های برنامه نویسی به مانند یادگیری زبان های معمولی است. پس فقط کمی تلاش و پشتکار می خواهد. ) حالا که می خواهید یک زبان را انتخاب کنید و علاقه ای به یادگیری چند زبان ندارید پس بهترین انتخاب را در بین زبان های برنامه نویسی به شما معرفی میکنم ( البته این فقط یک نتیجه گیری شخصی است ) :
ویژوال بیسیک
تعجب کردین!!!!؟ چون دارای ساختار ساده تری است و از پشتیبانی شرکت بزرگی برخوردار است ( مایکروسافت ). با همه گیر شدن اینترنت و رشد فزاینده استفاده اینترنت در کارهای تجاری و روزمره زندگی و معرفی محصول دات نت مایکروسافت قویترین برنامه ای که با این محصول می تواند ارتباط برقرار کند بیسیک می باشد. با آن سادگی ( و قدرتی که به آن اضافه شده است ) دیگر می توانید پای به عرصه ای از دنیای برنامه نویسی پا بگذارید که در کشورمان دارای زمینه های خوبی برای کسب درآمد است. دنیای برنامه نویسی تحت وب هر روز دارای ابعاد جدید تری است و با زمزمه های بوجود آمدن وب۲ دیگر جای بحثی نیست. ( البته شاید دوستان زیادی اعتراض کنن که با دلفی و یا ویژوال سی هم می شه برنامه های تحت وب نوشت ولی جواب من اینه : بله با دلفی هم می شه ولی وقتی خود مایکروسافت می یاد دات نت رو بوجود می یاره پس با نکات ریز و پیچیده اون آشنا است تا دلفی. از اون طرف هم وقتی می شه با زبان ساده بیسیک نوشت چرا بیایم خودمون تو سختی بندازیم و از سی استفاده کنیم؟؟؟ )
ولی باید به این نکته اشاره کنم که من خودم همچنان با دلفی می نویسم. بلی همچنان پاسکال و دلفی!!!!
بهینه سازی کد دلفی در استفاده از منابع
معمولا در برنامه نويسي پيشرفته بيشتر وقتها لازم هست كه يك مقداري از منابع سيستم (مثلا مقداري از حافظه سيستم) را براي كار در اختيار بگيريم. و بايد در زماني كه ديگر استفاده اي ندارند آنها را آزاد كنيم يا اينكه كاملا بسته شوند. در برنامه نويسي دلفي معمولا برنامه نويسان به اين موضوع توجهي نمي كنند، مثلا يك كدي مانند زير كه مقداري از حافظه را در اختيار مي گيرد:
در كد بالا اگر مثلا در قسمت Buggy Code يك اتفاق خاصي بيفتد آن مقدار از حافظه كه در اينجا 1K هست ممكن هست هيچ گاه آزاد نشود. براي اينكه اين مشكل روي ندهد بايستي كد بالا را بصورت زير و با استفاده از try..finally تغيير دهيم:
در ساختار بالا كدي كه در بلوك try قرار دارد اجرا مي شود. حال اگر يك اتفاق خاصي در اين قسمت رخ دهد اجراي برنامه بصورت خودكار به بلوك finally منتقل ميشود و در آنجا كد نيز با اجرا شدن فرمان FreeMem حافظه اشغال شده آزاد مي شود.
كلا استفاده از بلوكهاي try..finally در برنامه نويسي ساخت يافته و پيشرفته مي تواند كمك بسياري در بهينه سازي برنامه و روند اجراي كدها بكند. البته در اين مورد باز هم موارد ديگري هست كه در مقالات بعدي حتما در مورد آنها صحبت خواهم كرد.