Hat jemand eine Ahnung, wie man mit Delphi die Laufwerks-, Ordner- und Druckereingabe kontrollieren kann?
Announcement
Collapse
No announcement yet.
Lauferkfreigabe
Collapse
X
-
Es gibt verschiedene Funktionen für 9x und NT
Version für 9x (weil komplizierter - und Delphi nicht viele von den records kennt)
<pre><p>
<b>const</b>
LM20_NNLEN = 12; <i>{ LM 2.0 Net name length }</i>
SHPWLEN = 8; <i>{ Share password length (bytes) }</i>
<p>
<b>type</b>
PShareInfo50 = ^TShareInfo50;
TShareInfo50 = <b>packed record</b>
shi50_netname : <b>array</b> [0..LM20_NNLEN] <b>of</b> Char; <i>{ share name }</i>
shi50_type : Byte; <i>{ see below }</i>
shi50_flags : Word; <i>{ see below }</i>
shi50_remark : PChar; <i>{ ANSI comment string }</i>
shi50_path : PChar; <i>{ shared resource }</i>
shi50_rw_password: <b>array</b> [0..SHPWLEN] <b>of</b> Char; <i>{ read-write password (share-level security) }</i>
shi50_ro_password: <b>array</b> [0..SHPWLEN] <b>of</b> Char; <i>{ read-only password (share-level security) }</i>
<b>end</b>;
<p>
<i>{---------------------------------------------------------------}</i>
<i>{ }</i>
<i>{ Special values and constants - SHARE }</i>
<i>{ }</i>
<i>{---------------------------------------------------------------}</i>
<p>
<i>{ Field values for shi50_flags; }</i>
<p>
<i>{ These flags are relevant for share-level security on VSERVER }</i>
<i>{ When operating with user-level security, use SHI50F_FULL - the actual }</i>
<i>{ access rights are determined by the NetAccess APIs. }</i>
<p>
<b>const</b>
SHI50F_RDONLY = $0001;
SHI50F_FULL = $0002;
SHI50F_DEPENDSON = SHI50F_RDONLY <b>or</b> SHI50F_FULL;
SHI50F_ACCESSMASK = SHI50F_RDONLY <b>or</b> SHI50F_FULL;
<p>
<i>{ The share is restored on system startup }</i>
<p>
<b>const</b>
SHI50F_PERSIST = $0100;
<p>
<i>{ The share is not normally visible }</i>
<p>
<b>const</b>
SHI50F_SYSTEM = $0200;
<p>
<i>{ Share types. }</i>
<i>{ STYPE_DISKTREE and STYPE_PRINTQ are recognized on peer servers }</i>
<p>
<b>const</b>
STYPE_DISKTREE = 0; <i>{ disk share }</i>
STYPE_PRINTQ = 1; <i>{ printer share }</i>
STYPE_DEVICE = 2;
STYPE_IPC = 3;
<p>
<b>const</b>
SHI_USES_UNLIMITED = -1;
<p>
<b>function</b> NetShareAdd(pszServer: PChar; sLevel: Smallint; pbBuffer: Pointer;
cbBuffer: Word): DWORD; <b>stdcall</b>; <b>external</b> 'svrapi.dll' name 'NetShareAdd';
<p>
<i>{ ServerName can be nil to indicate the local computer. }</i>
<b>function</b> NetShareAdd_9x(pszServerName, ShareName, SharePath: PChar): DWORD;
<b>var</b>
pBuf: PShareInfo50;
cbBuffer: Byte;
<b>begin</b>
Result := ERROR_INTERNAL_ERROR;
cbBuffer := SizeOf(TShareInfo50);
GetMem(pBuf, cbBuffer);
<b>if</b> pBuf <> <b>nil then</b>
<b>try</b>
lstrcpyn(pBuf^.shi50_netname, ShareName, SizeOf(pBuf^.shi50_netname) - 1);
pBuf^.shi50_type := STYPE_DISKTREE;
pBuf^.shi50_flags := SHI50F_FULL;
pBuf^.shi50_remark := <b>nil</b>;
pBuf^.shi50_path := SharePath;
pBuf^.shi50_rw_password[0] := #0; <i>{ No password }</i>
pBuf^.shi50_ro_password[0] := #0; <i>{ No password }</i>
Result := NetShareAdd(pszServerName, 50, pBuf, cbBuffer);
<b>finally</b>
FreeMem(pBuf);
<b>end</b>;
<b>end</b>;
<p>
<b>procedure</b> TForm1.Button1Click(Sender: TObject);
<b>begin</b>
NetShareAdd_9x(<b>nil</b>, 'test', 'c:\temp');
<b>end</b>;
<p></pre>
<p>
Das die Bezeichner-Namen nicht ganz Borland-konform sind liegt einfach daran, das es eine 1:1 Übersetzung des Beispiels von Microsoft aus dem PSDK ist.
Gruß Nico


Comment
-
Es gibt verschiedene Funktionen für 9x und NT
Version für 9x (weil komplizierter - und Delphi nicht viele von den records kennt)
<pre><p>
<b>const</b>
LM20_NNLEN = 12; <i>{ LM 2.0 Net name length }</i>
SHPWLEN = 8; <i>{ Share password length (bytes) }</i>
<p>
<b>type</b>
PShareInfo50 = ^TShareInfo50;
TShareInfo50 = <b>packed record</b>
shi50_netname : <b>array</b> [0..LM20_NNLEN] <b>of</b> Char; <i>{ share name }</i>
shi50_type : Byte; <i>{ see below }</i>
shi50_flags : Word; <i>{ see below }</i>
shi50_remark : PChar; <i>{ ANSI comment string }</i>
shi50_path : PChar; <i>{ shared resource }</i>
shi50_rw_password: <b>array</b> [0..SHPWLEN] <b>of</b> Char; <i>{ read-write password (share-level security) }</i>
shi50_ro_password: <b>array</b> [0..SHPWLEN] <b>of</b> Char; <i>{ read-only password (share-level security) }</i>
<b>end</b>;
<p>
<i>{---------------------------------------------------------------}</i>
<i>{ }</i>
<i>{ Special values and constants - SHARE }</i>
<i>{ }</i>
<i>{---------------------------------------------------------------}</i>
<p>
<i>{ Field values for shi50_flags; }</i>
<p>
<i>{ These flags are relevant for share-level security on VSERVER }</i>
<i>{ When operating with user-level security, use SHI50F_FULL - the actual }</i>
<i>{ access rights are determined by the NetAccess APIs. }</i>
<p>
<b>const</b>
SHI50F_RDONLY = $0001;
SHI50F_FULL = $0002;
SHI50F_DEPENDSON = SHI50F_RDONLY <b>or</b> SHI50F_FULL;
SHI50F_ACCESSMASK = SHI50F_RDONLY <b>or</b> SHI50F_FULL;
<p>
<i>{ The share is restored on system startup }</i>
<p>
<b>const</b>
SHI50F_PERSIST = $0100;
<p>
<i>{ The share is not normally visible }</i>
<p>
<b>const</b>
SHI50F_SYSTEM = $0200;
<p>
<i>{ Share types. }</i>
<i>{ STYPE_DISKTREE and STYPE_PRINTQ are recognized on peer servers }</i>
<p>
<b>const</b>
STYPE_DISKTREE = 0; <i>{ disk share }</i>
STYPE_PRINTQ = 1; <i>{ printer share }</i>
STYPE_DEVICE = 2;
STYPE_IPC = 3;
<p>
<b>const</b>
SHI_USES_UNLIMITED = -1;
<p>
<b>function</b> NetShareAdd(pszServer: PChar; sLevel: Smallint; pbBuffer: Pointer;
cbBuffer: Word): DWORD; <b>stdcall</b>; <b>external</b> 'svrapi.dll' name 'NetShareAdd';
<p>
<i>{ ServerName can be nil to indicate the local computer. }</i>
<b>function</b> NetShareAdd_9x(pszServerName, ShareName, SharePath: PChar): DWORD;
<b>var</b>
pBuf: PShareInfo50;
cbBuffer: Byte;
<b>begin</b>
Result := ERROR_INTERNAL_ERROR;
cbBuffer := SizeOf(TShareInfo50);
GetMem(pBuf, cbBuffer);
<b>if</b> pBuf <> <b>nil then</b>
<b>try</b>
lstrcpyn(pBuf^.shi50_netname, ShareName, SizeOf(pBuf^.shi50_netname) - 1);
pBuf^.shi50_type := STYPE_DISKTREE;
pBuf^.shi50_flags := SHI50F_FULL;
pBuf^.shi50_remark := <b>nil</b>;
pBuf^.shi50_path := SharePath;
pBuf^.shi50_rw_password[0] := #0; <i>{ No password }</i>
pBuf^.shi50_ro_password[0] := #0; <i>{ No password }</i>
Result := NetShareAdd(pszServerName, 50, pBuf, cbBuffer);
<b>finally</b>
FreeMem(pBuf);
<b>end</b>;
<b>end</b>;
<p>
<b>procedure</b> TForm1.Button1Click(Sender: TObject);
<b>begin</b>
NetShareAdd_9x(<b>nil</b>, 'test', 'c:\temp');
<b>end</b>;
<p></pre>
<p>
Das die Bezeichner-Namen nicht ganz Borland-konform sind liegt einfach daran, das es eine 1:1 Übersetzung des Beispiels von Microsoft aus dem PSDK ist.
Gruß Nic
Comment
Comment