C# - Hálózati erőforrásokat csatlakoztató dialógusablakok

Hálózati meghajtó-műveletek metódusai 4. rész

forráskód letöltése
A sorozat ezen számában is folytatjuk az MPR.DLL állományban található API metódusok megismerését. A korábbi számokban már megismerkedhettünk azokkal a metódusokkal, melyekkel az alkalmazásból csatlakoztathatunk egy tetszőleges hálózati erőforrást rendszerünkhöz, vagy törölhetünk egyet onnan. Ebben a számban azokat a metódusokat mutatjuk be, melyekkel a Windows rendszer szabványos, a csatlakoztatást és leválasztást elvégezni hivatott dialógusablakai jeleníthetők meg.
A cikkben három metódust mutatunk be deklarációval, és használatuk módjával együtt. Kezdjük a hálózati erőforrások csatlakoztatását lehetővé tevő dialógusablakok megjelenítését végző metódusokkal.
WNetConnectionDialog metódus
A deklaráció:
WNetConnectionDialog
int WNetConnectionDialog(
IntPtr hwnd, int Type
);
Megjeleníti a csatlakoztató dialógusablakok közül az egyszerűbbet. A dialógusablakban meg kell adni a meghajtó betűjelét, illetve a kiszolgálón található elérési útvonalat.
Paraméterek
IntPtr hwnd
A dialógusablak szülőablakának azonosítója. Jelen esetben az alkalmazásunk ablakának kezelője.
int Type
A csatlakoztatott erőforrás típusát megadó konstans. Értéke RESOURCETYPE_DISK.
Visszatérési érték
Ha a művelet sikeres volt, akkor nulla. A Mégse gombra kattintáskor -1.
A művelet eredményeképpen megjelenik a dialógusablak, melyen megadhatjuk a csatlakoztatni kívánt erőforrás elérési útvonalát, és a helyi meghajtót.

WNetConnectionDialog1
int WNetConnectionDialog1(
IntPtr ConnDlgStruct
);
A metódus csatlakoztatásra alkalmas, azonban itt van mód arra, hogy a csatlakoztatás információit (mappa, meghajtó) már előre megjelenítsük a dialógusablak mezőiben.
Paraméterek
IntPtr ConnDlgStruct
A paraméter egy struktúra, melyben az inicializáló adatok megadhatók.
Visszatérési érték
Ha a felhasználó a műveletet megszakítja az ablak bezárásával úgy, hogy a Mégse gombra kattint, akkor a visszatérési érték -1, egyébként nulla.
A következő, és egyben utolsó metódus segítségével a hálózati erőforrást leválasztani hivatott dialógusablakot jeleníthetjük meg.
WNetDisconnectDialog
Osztály:
int WNetDisconnectDialog(
IntPtr hwnd, int Type
);
A csatlakoztatott meghajtók leválasztását lehetővé tevő ablak megjelenítése.
Paraméterek
A dialógusablak szülőablakának azonosítója. Jelen esetben az alkalmazásunk ablakának kezelője.
int Type
A leválasztandó erőforrás típusát megadó konstans. Értéke RESOURCETYPE_DISK.
Visszatérési érték
Ha a művelet sikeres volt, akkor nulla. A Mégse gombra kattintáskor -1.
Amennyiben van a metódust meghívó rendszerben csatlakoztatott erőforrás, akkor megjelenik a dialógusablak, egyébként csak egy figyelmeztető üzenet.
Most pedig vizsgáljuk meg a metódusokat működés közben. A WNetConnectionDialog és a WNetDisconnectDialog metódusok esetében csak meg kell adni az alkalmazásunk ablakkezelőjét (ezt most az aktív ablak kezelőjének lekérdezésével kaphatjuk meg), és az erőforrás típusát.

Win32.WNetConnectionDialog(Win32.GetActiveWindow(), Win32.RESOURCETYPE_DISK);
Illetve:
Win32.WNetDisconnectDialog(Win32.GetActiveWindow(),Win32.RESOURCETYPE_DISK);
A WNetConnectionDialog1 metódus esetében létre kell hoznunk egy CONNECTDLGSTRUCT típusú objektumot, majd megadni az erőforrás adatait.
Win32.CONNECTDLGSTRUCT cds = new Win32.CONNECTDLGSTRUCT();
cds.Owner = Win32.GetActiveWindow();
cds.Flags = Win32.CONNDLG_USE_MRU;
cds.Structure = Marshal.SizeOf(cds);
A struktúra ConnRes mezője egy másik típussal rendelkezik, így ehhez létrehozunk egy NETRESOURCE típusú struktúrát, majd az objektumot elhelyezzük a másik objektum mezőjében.
Win32.NETRESOURCE nr = new Win32.NETRESOURCE();
cds.ConnRes = Marshal.AllocHGlobal(Marshal.SizeOf(nr));
Marshal.StructureToPtr(nr, cds.ConnRes, true);
Majd meghívjuk az API metódust.
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(cds));
Marshal.StructureToPtr(cds, ptr, true);
res = Win32.WNetConnectionDialog1(ptr);
A metódus futásának befejeztével ki is olvashatunk adatokat a struktúrákból.
cds = (Win32.CONNECTDLGSTRUCT)Marshal.PtrToStructure(ptr, typeof(Win32.CONNECTDLGSTRUCT));
nr = (Win32.NETRESOURCE)Marshal.PtrToStructure(cds.ConnRes, typeof(Win32.NETRESOURCE));
Ez utóbbi metódus hívásakor szükséges, hogy egy létező elérési útvonalat, és egy nem foglalt meghajtó-betűjelet adjunk át a metódusnak.

Hálózati meghajtó-műveletek metódusai cikksorozat

Hálózati erőforrásokat csatlakoztató dialógusablakok - Hálózati meghajtó-műveletek metódusai 4. rész