WIN API használata - Szoftverfejlesztés fórum

üzenetek

hozzászólások


pmonitor
(aktív tag)

Ezt a topic-ot a win api függvények használatának példa kódjaira hoztam létre. Természetesen az ehhez tartozó alapvető algoritmusok használatával. Az elsődleges programzási nyelv a C, de más nyelvben is lehet példakód.

Az első ilyen ilyen téma a mappák/file-ok listázása. Az itt lévő példakód 2 szélsőséges esetet mutat be. Az egyik buffereket használ a mappák listázására. A szaggatott vonal alatti rész pedig bufferek nélkül listázza a mappákat. A bufferes megoldás előnye, hogy mind1 neki, hogy milyen app-ban használjuk(mert független az UI-tól). A buffer nélküli megoldás azonban csak konkrét környezetben használható(nem válik el az UI a kódban). Viszont itt nem fordulhat elő buffer overflow. Sebességre mind1ik elég gyors. Sztem. jelentősen egyiket sem lehet gyorsítani. Kész programban talán a FreeCommander használ hasonló algót. Ahogy nézem, annak hasonló a keresési sebessége.

Nyitó hsz-nek talán ennyi.


jattila48
(aktív tag)

Már nyitottam egy hasonló topikot: Windows programozás, remélem ennek nagyobb sikere lesz. Bár lehet, hogy kettő fölösleges. Majd a moderátorok eldöntik.

[ Szerkesztve ]


pmonitor
(aktív tag)

Nagyobb sikere nem hiszem, hogy lesz. Legalábbis a hsz írók között nem hiszem(bár ki tudja). Inkább az olvasók között. Én elsősorban példakódok írására helyezném a hangsúlyt. De ha törlik, vagy lezárják ezt a topic-ot, akkor átmegyek oda.


pmonitor
(aktív tag)

A wintree.c-ben levő programocska a window-okat listázza ki fa szerkezetben console app-ban. A függvény a FindWindowEx() api függvényt hívogatja rekurzívan. A "text mezőnek" a hosszát 100-ra maximalizáltam. Ha nem nyomtatható karaktert tartalmaz, akkor a "string"-et ott levágja.


pmonitor
(aktív tag)

A proclist.c-ben lévő console kód a process-eket listázza ki. Az ID-et, vmint a process nevét a teljes elérési útvonalával - ha tudja. Ha nem tudja az útvonalat, akkor csak a rövid nevet írja ki. A programot rendszergazdaként kell futtatni.


pmonitor
(aktív tag)

Ezt felhasználva módosítottam az itt lévő kódot. 1 process-nél először a PID-et írja ki, majd a process nevét a teljes elérési útvonalával - ha tudja. Az utána levő sorban a cmdline-t írja ki(jobb esetben :) ).


pmonitor
(aktív tag)

A dialogs.c-ben levő console app az alapvető dialog box-ok(FolderBrowserDialog, OpenFileDialog, SaveFileDialog és PrintDialog) bemutatására szolgál. A kódok részben megtalálhatók az interneten, de így egyben úgy tudom, hogy nem.


pmonitor
(aktív tag)

A netet túrva találtam 1 com+-os megoldást a FolderBrowserDialogra. Ki tudja melyik jobb? Erre 'szoktam vóóót mondani, hogy a programozás annyira objektív, hogy az már szubjektív. ;] Természetesen ez a megvalósítás is megtalálható a dialogs.c-ben.


pmonitor
(aktív tag)

A controls.c-ben az alapvető control-okat mutatom be. Még mindig Console App-ot hozunk létre! De természetesen megfelelő átalakítással Windows App-ban is használható. A megjelenítés a hook miatt lassú. Ha ezt kivesszük, akkor sokkal gyorsabb, viszont a tabulálás nem műxik rendesen!

Jó programozást kívánok mindenkinek!


pmonitor
(aktív tag)

A rotlist.c, ill. a rotlist.cs file-ok a ROT-ot listázzák ki C-ben ill. C#-ban. A kódokat több helyről bányásztam össze, meg kellett 1 kis kreativitás is hozzá. C#-ban az IDispatch-t kétféleképpen is meg lehet valósítani. Így:
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("00020400-0000-0000-C000-000000000046")]
private interface IDispatch
{
int GetTypeInfoCount();

[return: MarshalAs(UnmanagedType.Interface)]
ITypeInfo GetTypeInfo(
[In, MarshalAs(UnmanagedType.U4)] int iTInfo,
[In, MarshalAs(UnmanagedType.U4)] int lcid);

void GetIDsOfNames(
[In] ref Guid riid,
[In, MarshalAs(UnmanagedType.LPArray)] string[] rgszNames,
[In, MarshalAs(UnmanagedType.U4)] int cNames,
[In, MarshalAs(UnmanagedType.U4)] int lcid,
[Out, MarshalAs(UnmanagedType.LPArray)] int[] rgDispId);
}

vagy így:

[ComImport()]
[Guid("00020400-0000-0000-C000-000000000046")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
private interface IDispatch
{
[PreserveSig]
int GetTypeInfoCount(out int Count);

[PreserveSig]
int GetTypeInfo
(
[MarshalAs(UnmanagedType.U4)] int iTInfo,
[MarshalAs(UnmanagedType.U4)] int lcid,
out System.Runtime.InteropServices.ComTypes.ITypeInfo typeInfo
);

[PreserveSig]
int GetIDsOfNames
(
ref Guid riid,
[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr)]
string[] rgsNames,
int cNames,
int lcid,
[MarshalAs(UnmanagedType.LPArray)] int[] rgDispId
);

[PreserveSig]
int Invoke
(
int dispIdMember,
ref Guid riid,
uint lcid,
ushort wFlags,
ref System.Runtime.InteropServices.ComTypes.DISPPARAMS pDispParams,
out object pVarResult,
ref System.Runtime.InteropServices.ComTypes.EXCEPINFO pExcepInfo,
IntPtr[] pArgErr
);
}

Hogy melyik jobb, arról fogalmam sincs. Ha vki. tudja erre a választ, ő elmagyarázhatná. ROT bejegyzésben vannak pl. az ms office app-ok objektumai. Sajnos ha rendszergazdaként futtatjuk a kódokat, akkor nem működnek sem C-ben, sem C#-ban.


pmonitor
(aktív tag)

Az eddig leírt témák megtalálhatók ezen az oldalon. Természetesen nem csak a WIN API használatával kapcsolatos dolgok vannak ezen az oldalon. Azon vagyok, hogy minél több hasznos kód legyen az itt felsorolt linkek mögött. Ezért, ha nem is sűrűn, de időnként érdemes betérni a Linktár-ba.

További jó programozást kívánok mindenkinek!

[ Szerkesztve ]


pmonitor
(aktív tag)

A winforms.cs-ben lévő Console forráskód a háttérben futó form alkalmazására 1 példa. Bővebben itt írtam róla,, de természetesen megtalálható a linktárban is.


pmonitor
(aktív tag)

A callfuncpointer.cs-ben lévő forráskód azt mutatja be, hogy hogyan lehet win api függvényeket a GetProcAddress() által vissza adott függvény mutatóval meghívni. A példa kódban a MessageBoxA(), és a MessageboxW() függvényeket hívom meg.


pmonitor
(aktív tag)

Az excel.cs-ben lévő kód ugyanazt csinálja C#-ban, mint ez a C++ kód. Csak ez közvetlenül nem a win api-t használja. A működéshez telepített M office szükséges! A kódban nincs hibakezelés. Ez is megtalálható a linktárban is.


pmonitor
(aktív tag)

A neten találtam ezt a C++ kódot. Ez alapján készítettem egy C-ben írt .dll-t, ami természetesen C#-ban is használható. A .dll kódja itt található. Az ezt felhasználó C# kód pedig itt. Ez egyébként ugyanazt csinálja, mint a sysinternals handle.exe nevű programja(csak nem olyan "monstrum" :) ).


pmonitor
(aktív tag)

Audió file-ok konvertálására hoztam létre az audioconv.rar-ban található audioconv.exe programot, melyben a forrás is megtalálható. Ez .mp3 file-okat konvertál .wav-ra, valamint .wav file-okat .mp3-ra. A programokat gyakorlatilag nem én készítettem. Ezek külön-külön megtalálhatók az alább felsorolt linkeken. Az én "alkotásom" annyi, hogy ezeket egyesítettem és szinkronizáltam egy projektben. A program működése megtalálható az audioconv.rar file-ban található "_Olvassel.txt"-ben.

Felhasznált linkek:
[link]
[link]
[link]
[link]

Jó programoz(gat)ást kívánok mindenkinek!

üzenetek