C"De Windows Programlama
-
Arkadaşlar C"de Windows programları yazmak istiyorum, yani arabirim olarak konsolü değil de Windows penceresi kullanacak, tıklamayı farkedebilecek programlar. Yalnız bunu C"de yapmak istiyorum, C++"da değil. C++ öğren diyeceksiniz, o ayrı. C"de bunu yapamaz mıyız. Cevaplarınızı bekliyorum...
-
Yapmasına yaparsın ama bunu burdan anlatamam
-
olm hemen hemen tüm c++ editörleriyle c yazılabiliyor
en azından ben visual studio ile yazıyodum -
Deer_Skull bunu yazdı:
-----------------------------
Yapmasına yaparsın ama bunu burdan anlatamam
-----------------------------
nerden anlata bilirsin? çok kısa anlatsan belki anlarım:) anlamazsam icqda falan anlatabilirmisin? ve ayrıca mailleşedebiliriz eğer yardım etmeye cidden niyetliysen...
dalgarmaegr@yahoo.com
-
tabiki yardım etmeyi istiyorum. Bizim amacımız türkiyede ki programlama kitlesini büyütmek.ıcq ye gel hemen sonra maile geçeriz
-
şimdi beyler c ile c++ arasındaki dil farkılarını bırakın.. exe farkları vardır ör:
Dos EXe'leri sağdece MZ header içeririken
!!!
win32'exeleri PE (çooooooooooooook eskileri NE) headerda içerir..
işe bu header sizin import tablenınızı barındırır...
eğer siz yok ben illa ki Hem pe headr kullanmayacam hemde win API kullanıcam derseniz....
1.. adım.....
Kernel32.dll base adresini bulmanız gerekir...
ve aşağıdaki kodun İLK SIRADA yer alması gerekir.
(Not: ESP CreateProc'dan kalma adresi içerir)
------------------------------------
mov ecx,[esp]
GetKrnlBaseLoop:
xor edx,edx
dec ecx
mov dx,[ecx+03ch]
test dx,0f800h
jnz GetKrnlBaseLoop
cmp ecx,[ecx+edx+34h]
jnz GetKrnlBaseLoop
------------------------------------
Fakat main mocroları nedenyle ilk sırada yer alamaz....
nasıl başka türlü base adresi bulursunuz bilmiyorum..
bence bu işi "C" ile yapmak pek mümkün gözükmüyor
bence en iyisi PE headera dönmek...
-
Deer_SkuuL mail atcam dedin ama atmadın daha yaw bekliyorum....
Bu arada Criminal2 kardeş, tamam güzel demişsin, güzel açıklamışsında o sölediğini nası yapcam onuda bi kısa anlatsan, nası başilıycağımı bilsem yapcamda bilmiyom ki... nerden buton falan çiziyosunuz menular falan nası çıkıyo hiç bilmiyom valla... -
mümkün tabi eski windowslar zamaninda windows proramları dostaki c editorlerinde yazılırdı. windowsun icinde bi visualstudio gibi bişe yoktu.
win prog.exe yazip test ederdik, iflahimiz kesilirdi o windows acilana kadar sx makinede -
lemar bunu yazdı:
-----------------------------
Deer_SkuuL mail atcam dedin ama atmadın daha yaw bekliyorum....
Bu arada Criminal2 kardeş, tamam güzel demişsin, güzel açıklamışsında o sölediğini nası yapcam onuda bi kısa anlatsan, nası başilıycağımı bilsem yapcamda bilmiyom ki... nerden buton falan çiziyosunuz menular falan nası çıkıyo hiç bilmiyom valla...
-----------------------------
:)
Sana www.microsoft.com/msdn/'den Win32 SDK'yı indirmeni öneririm...
O çizim olayına gelince....
Prensip olarak yazayım örneyi SDK'da var...
Önce
WNDCLASSEX
'i doluracaksın
(Adı sanı menüsü renki vb....)
Bu Pencere için
ÖR:
########################
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hinst;
wcex.hIcon = LoadIcon(hinst,(LPCTSTR)dwIcon);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wcex.lpszMenuName = (char*)dwMenu;
wcex.lpszClassName = szName;
wcex.hIconSm = LoadIcon(wcex.hInstance,(LPCTSTR)dwIcon);
####################################
Sonra bunu RegisterClassEx(&wcex); ile Kaydetmen gerekiyor.....
Sonra bu window'u yaratmalısın...
#########################################
HWND hWnd;
hWnd = CreateWindow(szName,szName, WS_OVERLAPPED |
WS_CAPTION |
WS_SYSMENU |
WS_MINIMIZEBOX |
WS_BORDER ,
x,
y,
w,
h,
NULL,NULL,hinst, NULL);
ShowWindow(hWnd,1);
UpdateWindow(hWnd);
###################################################
Fakat Window'un bir Denetleyici FOnsksiyonu olmak zorundadır...Ör: Bizimkinde "WndProc"
##################################################
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wP, LPARAM lP)
{
switch (message)
{
case WM_CREATE:
CreateWindowEx(0,"BUTTON","İlk Buttonum",WS_CHILD|WS_VISIBLE,x,y,w,h,hWnd,(HMENU)ID,hInst,0); break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wP, lP);
}
return 0;
}
##############################################33
Buradaki
WM_CREATE Windows yaratılırken yapılacakalrı belirler
DefWindowProc windowsa benim yerime sen yap mesajıdır(tam olarak böyle olmsada bizim işlemediğimiz bir çok mesajı windows işler)
###############################################
Fakat bir konu daha o da "Message Loop" olayı
window açık kaldığı sürece çalışmasını sağlıyor..
Win32 SDK'da onun çok iyi bir açıklaması var....
-
HolyOne bunu yazdı:
-----------------------------
mümkün tabi eski windowslar zamaninda windows proramları dostaki c editorlerinde yazılırdı. windowsun icinde bi visualstudio gibi bişe yoktu.
win prog.exe yazip test ederdik, iflahimiz kesilirdi o windows acilana kadar sx makinede
-----------------------------
Ewet ama onlar NE header içerilerdi yani C++
-
ya abi kafayı yiycem ya... ben anlatamıyorum galiba...
bakın en basit şekilde anlatayım ben sornumu ve LÜTFEN sizde en basit şekilde çözümü anlatın ok?
-----------------------------------------------
int x,y,z;
printf("enter first number");
scanf("%d",&x);
printf("enter second number");
scanf("%d",&y");
z=x+y;
printf("total of %d and %d is: %d",x,y,z);
------------------------------------------------
hah şimdi bu basit programı yazdık ok? ben bunu mesela visual studioda normal Win 32 Console Application dan C++ Source File olarak yazıyom sora compile edinde noluyo exesi zartı zurtu çıkıyo dimi... hıms ama program nerde çalışıyo consolda... Hah ben istiyomki mesela bi tane windows penceresi çıksın x le y yi sorsun, sonra bi tanede butonu olsun ona basında çat z yi versin... ok?
Toplam Hit: 5198 Toplam Mesaj: 13