Arkadaşlar;
Windows Api leri hakkında biraz bilgi verebilirmisiniz?
Windows APi Leri
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Windows APi Leri
Select * From LiFe Where Your EYES
http://Www.Gebze.Org
http://Www.Gebze.Org
Benim bildiğim kadarı ile ;
Windows Api leri : windows da yapabildiğim olayları ve windows un ayarlarını Delphi içerisinden değiştirmene verilen ad. bu işlem gerek regedit den olsun gereksede bir komut yardımı ile olsun buna verilen isim Win Api...
Aslında bu konuyu yazıya dökmek okadar zor ki ama kısacası bu şekilde.
Kolay Gelsin..
Windows Api leri : windows da yapabildiğim olayları ve windows un ayarlarını Delphi içerisinden değiştirmene verilen ad. bu işlem gerek regedit den olsun gereksede bir komut yardımı ile olsun buna verilen isim Win Api...
Aslında bu konuyu yazıya dökmek okadar zor ki ama kısacası bu şekilde.
Kolay Gelsin..
Merhaba,
API'leri Windows'taki hazır fonksiyonlar gibi düşünebiliriz. Microsoft kendi işleri için ve programcılar için bir takım fonksiyonlar koymuş ve sen de bunları Delphi'den kullanıyorsun.
API'ler için en iyi kaynak MSDN (sitede adresi var). Burda anlatmak imkansız çünki çok geniş, devasa bir konu.
Kolay gelsin.
API'leri Windows'taki hazır fonksiyonlar gibi düşünebiliriz. Microsoft kendi işleri için ve programcılar için bir takım fonksiyonlar koymuş ve sen de bunları Delphi'den kullanıyorsun.
API'ler için en iyi kaynak MSDN (sitede adresi var). Burda anlatmak imkansız çünki çok geniş, devasa bir konu.
Kolay gelsin.
DELPHI VE API
DOS kendi servislerini yazılım interruptlarıyla gösterirken Windows API’lerle gösterir.DOS’ta ki programlama dillerinde olduğu gibi Delphi’de de programlama dilinin sunduğu işlemler her zaman işimizi görmeyebilir ,bu durumda Windows API’lerini kullanma ihtiyacını duyarız
Windows’un sunduğu bu API’ler gruplandırılarak bir çok DLL ve EXE dosyasına konulmuştur.Bu API’lerden birini kullandığımızda API’nin bulunduğu DLL sisteme daha önce yüklenmemişse önce bu DLL yüklenir ve API çalıştırılır
Programımızda API kullanmak için API’yi tanımlamamız gerekir. .Bu tanımdan sonra API’ye bir fonksiyon veya bir alt program gibi ulaşabiliriz.
Delphi’de API’ler iki şekilde tanımlanabilir.Bu tanımlama fonksiyon veya prosedür olarak yapılır.Fonksiyon olarak tanımlanan API geriye bir değer gönderirken,prosedür olarak tanımlanan API geriye bir değer göndermez.
Tanımdaki isim API’nin ismi , ‘Kütüphane adı’ ise API’nin bulunduğu dosyanın adıdır.Kullanılan API özel bir tip içeriyorsa bu tip de tanımlanmalıdır.Bu tanımlar yapıldıktan sonra normal bir fonksiyon veya prosedür olarak çağrılabilir.Bu tanımlar help dosyasında bulunabilir.
Örnek
Kolay Gelsin...
DOS kendi servislerini yazılım interruptlarıyla gösterirken Windows API’lerle gösterir.DOS’ta ki programlama dillerinde olduğu gibi Delphi’de de programlama dilinin sunduğu işlemler her zaman işimizi görmeyebilir ,bu durumda Windows API’lerini kullanma ihtiyacını duyarız
Windows’un sunduğu bu API’ler gruplandırılarak bir çok DLL ve EXE dosyasına konulmuştur.Bu API’lerden birini kullandığımızda API’nin bulunduğu DLL sisteme daha önce yüklenmemişse önce bu DLL yüklenir ve API çalıştırılır
Programımızda API kullanmak için API’yi tanımlamamız gerekir. .Bu tanımdan sonra API’ye bir fonksiyon veya bir alt program gibi ulaşabiliriz.
Delphi’de API’ler iki şekilde tanımlanabilir.Bu tanımlama fonksiyon veya prosedür olarak yapılır.Fonksiyon olarak tanımlanan API geriye bir değer gönderirken,prosedür olarak tanımlanan API geriye bir değer göndermez.
Kod: Tümünü seç
Fonksiyon olarak API tanımı :
Function isim ( parametreler : Tip ) :Tip ;Far ;External ‘Kütüphane adı’ ;
Prosedür olarak API tanımı :
Procedure isim (parametreler :Tip ) ; Far ; External ‘kütüphane adı’ ;
Örnek
Kod: Tümünü seç
Label1.Caption := IntToStr (GetFreeSpace(0));
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
İhsan Karagülle
// Edit //
Bugün itibari ile (27.03.2005) bu başlık altındaki bu cevabıma bakınca şaşırdım... Sadece yukardaki satır vardı ki cevabı (tamamlayacak önceki bir mesajım yoksa) asla bu şekilde kısa ve anlamsız bırakmam. Sorunsala bakınca da anlamsız kalmış. Sebebini ve ne zamandır bu şekilde olduğunı bilemiyorum, tesadüfen gördüm... Bu durumu bilerek değerlendirilmesini dilerim... Saygılarımla M.ARMAN
// Edit //
Bugün itibari ile (27.03.2005) bu başlık altındaki bu cevabıma bakınca şaşırdım... Sadece yukardaki satır vardı ki cevabı (tamamlayacak önceki bir mesajım yoksa) asla bu şekilde kısa ve anlamsız bırakmam. Sorunsala bakınca da anlamsız kalmış. Sebebini ve ne zamandır bu şekilde olduğunı bilemiyorum, tesadüfen gördüm... Bu durumu bilerek değerlendirilmesini dilerim... Saygılarımla M.ARMAN
En son mrmarman tarafından 27 Mar 2005 09:41 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kod: Tümünü seç
WINDOWS API IPUÇLARI (Delphi)
Belgeler menüsünü temizleme
uses kismina ShlOBJ unitini ekleyin;
SHAddToRecentDocs(SHARD_PATH, nil);
Duvar kagidini degistirmek
var
s: string;
begin
s := 'c:\windows\athena.bmp';
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(s),0);
Baslat butonunu gizlemek veya kullanilmaz hale getirmekprocedure TForm1.Button1Click(Sender: TObject);
var
Rgn : hRgn;
begin
// Baslat butonunu gizle
Rgn := CreateRectRgn(0, 0, 0, 0);
SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil),
Rgn,
true);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//Gizlenen Baslat butonunu eski haline döndürmek için
SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil),0,true);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
//Baslat butonunu kullanilmaz yap
EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil),false);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
//Kullanilmaz yapilan Baslat butonunu eski haline getirmek için
EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil),true);
end;
Bir programin çalistirilmasi
WinExec('c:\windows\calc.exe',sw_show);
WinExec('C:\WINDOWS\NOTEPAD.EXE C:\WINDOWS\WIN.INI', SW_SHOWNORMAL);
WinExec('COMMAND.COM', SW_SHOWNORMAL);
WinExec('COMMAND.COM /C DIR *.*', SW_SHOWNORMAL);
Harddiskin seri numarasinin bulunmasi
procedure TForm1.Button1Click(Sender: TObject);
var
VolumeSerialNumber : DWORD;
MaximumComponentLength : DWORD;
FileSystemFlags : DWORD;
SerialNumber : string;
begin
GetVolumeInformation('C:\',nil,0,@VolumeSerialNumber,MaximumComponentLength,
FileSystemFlags,nil,0);
SerialNumber := IntToHex(HiWord(VolumeSerialNumber), 4) + '-' +
IntToHex(LoWord(VolumeSerialNumber), 4);
Memo1.Lines.Add(SerialNumber);
end;
Windows ve System klasörlerinin bulunmasi
procedure TForm1.Button1Click(Sender: TObject);
var
a : Array[0..144] of char;
begin
GetWindowsDirectory(a, sizeof(a));
ShowMessage(StrPas(a));
GetSystemDirectory(a, sizeof(a));
ShowMessage(StrPas(a));
end;
Windows lisans bilgilerinin bulunmasi
uses kismina Registry unitini ekleyin;
procedure TForm1.Button1Click(Sender:TObject);
var
reg: TRegIniFile;
begin
reg := TRegIniFile.create('SOFTWARE\MICROSOFT\MS SETUP (ACME)\');
Memo1.Lines.Add(reg.ReadString('USER INFO','DefName','Ali ÖRNEK'));
Memo1.Lines.Add(reg.ReadString('USER INFO','DefCompany','Bilgisayar Müh.'));
reg.free;
end;
Speakerdan Beep sesi çikartma
MessageBeep(word(-1));
Bir Denetim Masasi uygulamasini çalistirmak
Control Panel uygulamalari Windows\System klasörü altinda bulunur. *.CPL uzantili
dosyalardir. Bu uygulamalari Control.Exe programi ile çalistirabilirsiniz. Bazi Control
Panel uygulamalari Windows\System klasöründe bulunmaz. Bunlarin ismini vererek
çalistirabilirsiniz.
WinExec('C:\WINDOWS\CONTROL.EXE TIMEDATE.CPL', sw_ShowNormal);
WinExec('C:\WINDOWS\CONTROL.EXE MOUSE', sw_ShowNormal);
WinExec('C:\WINDOWS\CONTROL.EXE PRINTERS', sw_ShowNormal);
Windows'u kapatmak veya yeniden baslatmak
ExitWindowsEx(EWX_SHUTDOWN,0); //yeniden baslatmak için EWX_REBOOT
Ekran koruyucusunu kapatmak ve açmak
//kapatmak için
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,0,nil,0);
//açmak için
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,1,nil,0);
Ekran kartim kaç rengi destekliyor
Ekran kartinizin kaç rengi destekledigini asagidaki kodla bulabilirsiniz.
(1 shl (GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL) *
GetDeviceCaps(Form1.Canvas.Handle, PLANES)));
Windows Gezginini istediginiz bir klasörle açma
uses kismina ShellApi unitini ekleyin.
ShellExecute(0,'explore','C:\WINDOWS',nil,nil,SW_SHOWNORMAL);
Windows'un Bul diyalog penceresini açma
Windows'ta Baslat->Bul->Dosyalar ve Klasörler ile açtiginiz Bul diyalog penceresini
Delphi içerisinden hem de istediginiz yolu vererek çalistirabilirsiniz.
uses kismina ddeman unitini ekleyin.
procedure TForm1.Button1Click(Sender: TObject);
begin
with TDDEClientConv.Create(Self) do begin
ConnectMode := ddeManual;
ServiceApplication := 'explorer.exe';
SetLink( 'Folders', 'AppProperties');
OpenLink;
ExecuteMacro('[FindFolder(, C:\DOWNLOAD)]', False); //diyalog açildiginda
konum kisminda
CloseLink; //olmasini istediginiz klasör.
Free;
end;
end;
Pencerenin kapatma dügmesini etkisiz hale getirme
Pencerenin baslik çubugunda bulunan kapatma dügmesini (X) etkisiz hale getirebilirsiniz.
Ayni zamanda sistem menüsündeki Kapat(Close) seçenegide kaybolur. Bunun için
asagidaki gibi bir kod yazmalisiniz.
procedure TForm1.Button1Click(Sender: TObject);
var
hwndHandle : THANDLE;
hMenuHandle : HMENU;
begin
hwndHandle := FindWindow(nil, 'Form1'); //Form1 pencerenin basligini
göstermektedir.
if (hwndHandle <> 0) then begin //Burayi uygulamaniza göre degistirin
hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
if (hMenuHandle <> 0) then
DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
end;
end;
Uygulama Windows her açildiginda çalissin
uses kismina Registry unitini ekleyin.
{$IFNDEF WIN32}
const MAX_PATH = 144;
{$ENDIF}
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := false;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',false);
reg.WriteString('Uygulamam', uygulamanizin_yolu_ve_adi);
reg.CloseKey;
reg.free;
end;
Gözat diyalogunu kullanarak bir klasörü seçme
uses kismina ShellAPI ve ShlObj unitlerini ekleyin.
procedure TForm1.Button1Click(Sender: TObject);
var
TitleName : string;
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
BrowseInfo.hwndOwner := Form1.Handle;
BrowseInfo.pszDisplayName := @DisplayName;
TitleName := 'Lütfen bir klasör seçin';
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then begin
SHGetPathFromIDList(lpItemID, TempPath);
ShowMessage(TempPath);
GlobalFreePtr(lpItemID);
end;
end;
Web adresini açma
uses kismina Shellapi unitini ekleyin;
ShellExecute(Handle,'open','http://www.uludag.edu.tr/',nil,nil,sw_ShowMaximized);
Bir DOS programini çalistirma ve çalismasi bitince penceresini kapatma
WinExec('command.com /c progdos.exe',sw_ShowNormal);
(* eger ikinci paremetreyi sw_Hide yaparsaniz kullanici programin çalistigini görmez. *)
Alt + Tab ve Ctrl + Esc tuslarinin kullanilmaz hale getirilmesi
var
OldVal : LongInt;
begin
SystemParametersInfo (97, Word (True), @OldVal, 0)
(* Word(False) ile kullanirsaniz tuslari tekrar kullanabilirsiniz. *)
Bir menü ögesine resim ekleme
Procedure TForm1.FormCreate(Sender: TObject);
var
Bmp1 : TPicture;
begin
Bmp1 := TPicture.Create;
Bmp1.LoadFromFile('c:\deneme\turkey.bmp');
SetMenuItemBitmaps( deneme1.Handle,0,MF_BYPOSITION,Bmp1.Bitmap.Handle,Bmp1.Bitmap.Handle);
end;
Ag ortaminda makinenin ismini bulma
procedure TForm1.Button1Click(Sender: TObject);
var
Makine_ismi:array[0..255] of char;
BufferSize:DWORD;
begin
BufferSize:=SizeOf(Makine_ismi);
GetComputerName(@Makine_ismi,BufferSize);
Showmessage(Makine_ismi);
end;
Ag ortaminda login olmus kullanici ismini bulma
procedure TForm1.Button1Click(Sender: TObject);
var
Kullanici_ismi:array[0..255] of char;
BufferSize:DWORD;
begin
BufferSize:=SizeOf(Kullanici_ismi);
GetUserName(@Kullanici_ismi,BufferSize);
Showmessage(Kullanici_ismi);
end;
Ekran çözünürlügünü nasil ögrenirim
Screen.Width //yatay çözünürlük
Screen.Height //dikey çözünürlük
MessageDlg('Su anda ' + IntToStr( Screen.Width ) +' x '+IntToStr( Screen.Height )+
' çözünürlükte çalisiyorsunuz',mtInformation, [mbOk], 0 );
Görev çubugunun AutoHide özelligi
uses kismina ShellAPI unitini ekleyin.
procedure TForm1.Button1Click(Sender: TObject);
var
ABData : TAppBarData;
begin
ABData.cbSize := sizeof(ABData);
if (SHAppBarMessage(ABM_GETSTATE, ABData) and ABS_AUTOHIDE) > 0 then
Showmessage('Autohide özelligi açik');
end;
Programim biraz beklesin
Bazi islemlerden sonra diger bir islemi çalistirmadan önce bir süre beklemek istersiniz.
Bu gibi durumlarda Sleep komutunu kullanabilirsiniz. Burada verilen deger milisaniye
cinsindendir.
(1 saniye=1000 milisaniye)
Sleep(10000) //10 saniye bekler
Caps lock tusu açik mi, kapali mi?
if (GetKeyState(VK_CAPITAL) and $01)<>0 then
Showmessage ('caps lock açik');
Imleci (cursor) gizleyip, tekrar gösterme
ShowCursor(False) //imleci gizler
ShowCursor(True) //imleci tekrardan gösterir.
Ekran görüntüsünü alin
procedure TForm1.Button1Click(Sender: TObject);
var
DCDesk: HDC;
begin
DCDesk:=GetWindowDC(GetDesktopWindow);
BitBlt(Form1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,DCDesk, 0, 0,SRCCOPY);
ReleaseDC(GetDesktopWindow, DCDesk);
end;
Not: Yukaridaki kod ekran görünütüsünü form üstüne alir. Image bileseni içine ekran
görüntüsünü almak için form üzerine bir image bileseni yerlestirin ve Form1.Canvas.Handle
yerine Image1.Canvas.Handle yazin.
Map Network Drive diyalogunu açma
NetConnectionDialog ( 0, RESOURCETYPE_DISK );
Bir dosyayi baglantili oldugu uygulama ile açma
uses kismina shellapi unitini ekleyin.
shellexecute(0,'open', 'c:\test\2.avi','','',SW_NORMAL);
Temp klasörünü bulma
procedure TForm1.Button1Click(Sender: TObject);
var
temp_klasor: array[0..MAX_PATH] of char;
begin
GetTempPath(SizeOf(temp_klasor), @temp_klasor);
ShowMessage(temp_klasor);
end;
Ekran koruyucuyu çalistirmak
PostMessage(GetDesktopWindow, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
Güç koruma modunda çalisan monitörü kapatip açma
Monitörü kapatmak için :
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0);
Monitörü açmak için :
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);
Windows Tarih/Saat Özellikleri iletisim kutusunu açma
Winexec('Control.exe Date/Time',sw_shownormal);Not: Bu sayfadaki bilgiler internetteki çesitli sitelerden derlenmistir.
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz
Erkan ÇAĞLAR
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz
Erkan ÇAĞLAR