Autor Beitrag
duffyducks444
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 06.08.03 17:55 
Hallo Leute,

zuerst muss ich sagen das ich ein totaler dau und newbie im bereich delphi bin.

Leider erwartet aber mein chef von mir, dass ich ein proggie schreibe welches von jedem rechner aus gestartet werden kann. dort soll der mitarbeiter seinen benutzernamen und passwort angeben können und erst dann wird mit hilfe dieses benutzernamens die netzlaufwerke verbunden. Was das verbinden und trennen von netzlaufwerken angeht habe ich schon etwas gefunden nur müsste ich dort noch die eingabe des benutzers und passowortes einbinden. leider weiss ich nur nicht wie ich dies realisieren soll.

weiss jemand rat für mich? danke schonmal im voraus!

mfg marko

hier nun noch der sourcecode:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ConnectDrive(_drvLetter: string; _netPath: string; _showError: Boolean; 
  _reconnect: Boolean): DWORD; 
var 
  nRes: TNetResource; 
  errCode: DWORD; 
  dwFlags: DWORD; 
begin 
  { Fill NetRessource with #0 to provide uninitialized values } 
  { NetRessource mit #0 füllen => Keine unitialisierte Werte } 
  FillChar(NRes, SizeOf(NRes), #0); 
  nRes.dwType := RESOURCETYPE_DISK; 
  { Set Driveletter and Networkpath }
  { Laufwerkbuchstabe und Netzwerkpfad setzen } 
  nRes.lpLocalName  := PChar(_drvLetter); 
  nRes.lpRemoteName := PChar(_netPath); { Example: \\Test\C } 
  { Check if it should be saved for use after restart and set flags } 
  { Überprüfung, ob gespeichert werden soll } 
  if _reconnect then 
    dwFlags := CONNECT_UPDATE_PROFILE and CONNECT_INTERACTIVE 
  else 
    dwFlags := CONNECT_INTERACTIVE; 

  errCode := WNetAddConnection3(Form1.Handle, nRes, nilnil, dwFlags); 
  { Show Errormessage, if flag is set } 
  { Fehlernachricht aneigen } 
  if (errCode <> NO_ERROR) and (_showError) then 
  begin 
    Application.MessageBox(PChar('An error occured while connecting:' + #13#10 + 
      SysErrorMessage(GetLastError)), 
      'Error while connecting!'
      MB_OK); 
  end
  Result := errCode; { NO_ERROR } 
end

function ConnectPrinterDevice(_lptPort: string; _netPath: string; _showError: Boolean; 
  _reconnect: Boolean): DWORD; 
var 
  nRes: TNetResource; 
  errCode: DWORD; 
  dwFlags: DWORD; 
begin 
  { Fill NetRessource with #0 to provide uninitialized values } 
  { NetRessource mit #0 füllen => Keine unitialisierte Werte } 
  FillChar(NRes, SizeOf(NRes), #0); 
  nRes.dwType := RESOURCETYPE_PRINT; 
  { Set Printername and Networkpath } 
  { Druckername und Netzwerkpfad setzen } 
  nRes.lpLocalName  := PChar(_lptPort); 
  nRes.lpRemoteName := PChar(_netPath); { Example: \\Test\Printer1 } 
  { Check if it should be saved for use after restart and set flags } 
  { Überprüfung, ob gespeichert werden soll } 
  if _reconnect then 
    dwFlags := CONNECT_UPDATE_PROFILE and CONNECT_INTERACTIVE 
  else 
    dwFlags := CONNECT_INTERACTIVE; 

  errCode := WNetAddConnection3(Form1.Handle, nRes, nilnil, dwFlags); 
  { Show Errormessage, if flag is set } 
  { Fehlernachricht aneigen } 
  if (errCode <> NO_ERROR) and (_showError) then 
  begin 
    Application.MessageBox(PChar('An error occured while connecting:' + #13#10 + 
      SysErrorMessage(GetLastError)), 
      'Error while connecting!'
      MB_OK); 
  end
  Result := errCode; { NO_ERROR } 
end

function DisconnectNetDrive(_locDrive: string; _showError: Boolean; _force: Boolean; 
  _save: Boolean): DWORD; 
var 
  dwFlags: DWORD; 
  errCode: DWORD; 
begin 
  { Set dwFlags, if necessary } 
  { Setze dwFlags auf gewünschten Wert } 
  if _save then 
    dwFlags := CONNECT_UPDATE_PROFILE 
  else 
    dwFlags := 0
  { Cancel the connection see also at http://www.swissdelphicenter.ch/en/showcode.php?id=391 } 
  { Siehe auch oben genannten Link (Netzlaufwerke anzeigen) } 
  errCode := WNetCancelConnection2(PChar(_locDrive), dwFlags, _force); 
  { Show Errormessage, if flag is set } 
  { Fehlernachricht anzeigen } 
  if (errCode <> NO_ERROR) and (_showError) then  
  begin 
    Application.MessageBox(PChar('An error occured while disconnecting:' + #13#10 + 
      SysErrorMessage(GetLastError)), 
      'Error while disconnecting'
      MB_OK); 
  end
  Result := errCode; { NO_ERROR } 
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
        ConnectDrive('H:''\\athlon\d$', True, True);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
        Close;
end;

end.


Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Mi 06.08.03 19:41 
schönen Gruss an deinen Chef, der wahrscheinlich keinen blassen von Netzwerken hat (wie vielleicht viele Chefs? :dance2: )
Sicher kannst du sowas schreiben, aber was ist, wenn der Nutzer den Freigabenamen kennt und sich direkt via net use Kommando oder via Explorer verbindet ? Da schlägt dann deine nett gemeinte Passwortabfrage ins nirwana !
Besser, sofern WinNT, die Freigaben nur den Nutzern geben die sie auch brauchen. Da kommt dann die Passwortabfrage automatisch !

grez
msch
duffyducks444 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 06.08.03 20:44 
Naja ob unsere Damen dies auf die Reihe bekommen ist fraglich und selbts wenn wär dies auch kein Problem. Vielleicht habe ich mich ja auch etwas blöd ausgedrückt. Wir haben in unserer Firma einen Linux Server mit Samba am laufen.

Dort sind Netzwerkuser eingerichtet die nicht mit den Benutzername der Worksstations übereinstimmen. Die Benutzerdaten des Netzwerkusers kennen unsere Damen ja auch (brauchen Sie ja auch zum arbeiten).

Ich könnte ja auch per net use die Netzlaufwerke verbinden. Aber für uns wurde vor einiger Zeit von einer Firma ein Programm für die Firma geschrieben und dieses soll erweitert werden (leider muss ich dies tun).

Die Erweiterung ist eben, das beim Programmstart ein Login erscheint. Dort soll man dann einen Benutzernamen und Passwort angeben (unser Netzwerkuser). Anschliessend soll dieses Programm unser Netzlaufwerk verbinden.

Wie ich dies in das bestehende Programm intigriere wurde mir schon mitgeteilt.

Wenn ich allerdings per net use arbeite muss ich auch den User eingeben daher eben die Frage ob ich dies nicht mit dem o.g. Script hinbekommen könnte.

Mfg
Marko
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Do 07.08.03 09:05 
schau dir mal die funktion WNetConnectionDialog() an.
grez
msch
duffyducks444 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 07.08.03 09:30 
Ist das das richtige ?
ausblenden Quelltext
1:
2:
3:
4:
DWORD WNetConnectionDialog(
  HWND hwnd,
  DWORD dwType
);

was ist denn hwnd und dwType? Kannst Du mir das mal etwas genauer erklären? Wie gesagt ich bin voll der Neuling in Delphi.

Danke Marko
focus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187

XP, 2k, 98, Me
D6 Prof
BeitragVerfasst: Do 07.08.03 10:11 
Titel: und die msdn sprach es werde licht
Zitat:

WNetConnectionDialog

The WNetConnectionDialog function starts a general browsing dialog box for connecting to network resources. The function requires a handle to the owner window for the dialog box.

ausblenden Quelltext
1:
2:
3:
4:
DWORD WNetConnectionDialog(
  HWND hwnd,
  DWORD dwType
);


Parameters
hwnd
[in] Handle to the owner window for the dialog box.
dwType
[in] Resource type to allow connections to. This parameter can be the following value. Value Meaning
RESOURCETYPE_DISK Connections to disk resources.

Return Values
If the function succeeds, the return value is NO_ERROR. If the user cancels the dialog box, the function returns ?1.

If the function fails, the return value is a system error code, such as one of the following values.

Return Code Description
ERROR_EXTENDED_ERROR A network-specific error occurred. To obtain a description of the error, call the WNetGetLastError function.
ERROR_INVALID_PASSWORD The specified password is invalid.
ERROR_NO_NETWORK The network is unavailable.
ERROR_NOT_ENOUGH_MEMORY There is insufficient memory to start the dialog box.

Remarks
If the user clicks OK in the dialog box, the requested network connection will have been made when the WNetConnectionDialog function returns.

If the function attempts to make a connection and the network provider returns the message ERROR_INVALID_PASSWORD, the system prompts the user to enter a password. The system uses the new password in another attempt to make the connection.

Requirements
Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, and Windows 95.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server.
Header: Declared in Winnetwk.h.
Library: Use Mpr.lib.


See Also
Windows Networking (WNet) Overview, Windows Networking Functions, WNetAddConnection3, WNetCancelConnection2, WNetDisconnectDialog


Gruss
Michael

Moderiert von user profile iconTino: Quote- & Code-Tags hinzugefügt.
duffyducks444 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 07.08.03 10:28 
Also ich hab jetzt mal bei google.de gesucht und auch etwas gefunden nur scheint WnetConnectionDialog nicht das zu sein was ich benötige.

Dieser Dialog dient ja zum verbinden von Netzlaufwerken. Nur möchte ich ja nicht das dieser Dialog geöffnet wird sonder das ich wie ne Art Benutzeranmeldung als Formular kommt. Dort dann der User und das Passwort angegeben wird. Dann auf Anmelden klicken und die NEtzlaufwerke werden eingebunden. Diese stehen im Code dann schon drin.

In dem Code (1. Beitrag oben) habe ich das Problem das ich die Netzlaufwerke nicht einbinden kann, weil der PC Nutzer nicht der gleiche Netzwerknutzer ist. Ansonsten funktioniert der Code ja.

Dieses ist ja mein eigentliches Problem.

Marko