Windows APi Leri

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
aveysel
Üye
Mesajlar: 151
Kayıt: 16 Mar 2004 03:53
Konum: Internet
İletişim:

Windows APi Leri

Mesaj gönderen aveysel »

Arkadaşlar;


Windows Api leri hakkında biraz bilgi verebilirmisiniz?
Select * From LiFe Where Your EYES
http://Www.Gebze.Org
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

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..
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Bu win api denilen olay kısaca windowsu yönetmektir. winapileri incelemek istersen üni nin kütüphanesinde vardı. 3 tane kalın kalın cilt microsoftun :))
bende 3 CD halinde var msdn library ama nasıl veririm sana bilmem :)
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

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.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

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.

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ı’ ;
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

Kod: Tümünü seç

  Label1.Caption := IntToStr (GetFreeSpace(0));
Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

İ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
En son mrmarman tarafından 27 Mar 2005 09:41 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

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
Cevapla