10. juni 2002 - 20:08Der er
38 kommentarer og 3 løsninger
Logge af aktuelle Windows-bruger...
Har lavet et program der kan: # Lukke computeren # Genstarte computeren # Logge af den aktuelle bruger (logge af)
Mit problem opstår når jeg vil logge af. I første omgang ser det ud til at virke fint, alle kørende programmer lukker, men når login-dialogen burde komme starter den bare alt igen. Når jeg atter, via mit program, prøver at logge af, så virker det fint, login-dialogen kommer frem.
En del af min kode: procedure TForm1.OKButtonClick(Sender: TObject); begin SaveToReg(ComboBox.ItemIndex,'index',2); case ComboBox.ItemIndex of 0: if ExitWindowsEx(EWX_SHUTDOWN,0) then Close; 1: if ExitWindowsEx(EWX_REBOOT,0) then Close; 2: if ExitWindowsEx(EWX_LOGOFF,0) then Close; 3: Close; end end;
//Tror ikke fejlen er her: procedure SaveToReg(input1:Variant;input2:String;inputtype:Byte=1); begin reg:=TRegistry.Create; with reg do try begin Rootkey:=HKEY_CURRENT_USER; CreateKey('\Software\xShutDown'); OpenKey('\Software\xShutDown', True); case inputtype of 1: reg.WriteString(input2,input1); 2: reg.WriteInteger(input2,input1); 3: reg.WriteBool(input2,input1); end; reg.CloseKey; end; finally reg.Free; end; end;
-------------------------------------------------
//Ikke en del af min kode, men virker fint: procedure TForm1.OKButtonClick(Sender: TObject); begin ExitWindowsEx(EWX_LOGOFF,0); Close; end;
Hov, jeg startede med at skrive, afviste og pludselig så stod det jeg har skrevet der som en komentar!
Nå, men nu til sagen: JB, jeg kan desværre ikke bruge dit svar, har faktisk prøvet din kode allerede før jeg oprettede spørgsmålet, den giver mig fejl!
procedure TForm1.OKButtonClick(Sender: TObject); begin case ComboBox.ItemIndex of 0: if ExitWindowsEx(EWX_SHUTDOWN,0) then Close; 1: if ExitWindowsEx(EWX_REBOOT,0) then Close; 2: if ExitWindowsEx(EWX_LOGOFF,0) then Close; 3: Close; end end;
Men det gør det her ikke:
procedure TForm1.ComboBoxKeyPressed(Kan ikke lige huske alle paremetrene, ud over Sender og Key); begin if (key in [#13,#32]) then case ComboBox.ItemIndex of 0: if ExitWindowsEx(EWX_SHUTDOWN,0) then Close; 1: if ExitWindowsEx(EWX_REBOOT,0) then Close; 2: if ExitWindowsEx(EWX_LOGOFF,0) then Close; 3: Close; end; end;
JB -> Det er selve hovedkoden der lukker, genstarter og logger af der ikke vil virke, det gør til gendgæld ExitWindowsEx! (Men hvor er fejlen i min kode?)
Hvor er fejlen i: procedure TForm1.ComboBoxKeyPressed(Kan ikke lige huske alle paremetrene, ud over Sender og Key); begin if (key in [#13,#32]) then case ComboBox.ItemIndex of 0: if ExitWindowsEx(EWX_SHUTDOWN,0) then Close; 1: if ExitWindowsEx(EWX_REBOOT,0) then Close; 2: if ExitWindowsEx(EWX_LOGOFF,0) then Close; 3: Close; end; end;
Kan det være at EWX_LOGOFF kræver at programmet som sendte forbliver åben lidt tid efter kaldet?
Måske du bare skulle prøve:
case ComboBox.ItemIndex of 0: if ExitWindowsEx(EWX_SHUTDOWN,0) then Close; 1: if ExitWindowsEx(EWX_REBOOT,0) then Close; 2: ExitWindowsEx(EWX_LOGOFF,0); 3: Close; end;
dkn -> Hvorfor virker følgende så: procedure TForm1.OKButtonClick(Sender: TObject); begin case ComboBox.ItemIndex of 0: if ExitWindowsEx(EWX_SHUTDOWN,0) then Close; 1: if ExitWindowsEx(EWX_REBOOT,0) then Close; 2: if ExitWindowsEx(EWX_LOGOFF,0) then Close; 3: Close; end end;
Hvad du muligvis har lagt mærke til så bruger jeg ikke close i mit eksempel, fordi det klarer Windows selv.
Jeg gør sådan her : procedure TForm1.Button1Click(Sender: TObject); begin If RadioButton1.Checked then ExitWindows(EWX_SHUTDOWN); If RadioButton2.Checked then ExitWindows(EWX_REBOOT); If RadioButton3.Checked then ExitWindows(EWX_LOGOFF); end;
Måske du skulle prøve :
procedure TForm1.OKButtonClick(Sender: TObject); begin case ComboBox.ItemIndex of 0: ExitWindowsEx(EWX_SHUTDOWN,0); 1: ExitWindowsEx(EWX_REBOOT,0); 2: ExitWindowsEx(EWX_LOGOFF,0); 3: Close; end end;
Jeg har ikke en Windows 9x til min rådighed .... Og kan derfor ikke teste koden
Jeg kan vel finde nogle point frem hvis det skulle være :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.