Quaestio in periodo incepti quarentenam haec facta est: revera necesse est numerum visitationum officiorum minuere a peritis operandi et consulendi in programmate applicationis, et libere loquendo, utentes saepe abutuntur ope specialium sine defectu in eam intromittere. rem ipsam, inquiunt, "venturi sunt - aderunt - facient, sed fumum/potabo capulus, etc." Telephonium consultatio cum servo communicans efficacior est si remotum velum inspicias.
Post "inventionem" nostrae birotae, sanae informationes in argumento articuli versae sunt:
Omnes informationes infra destinatur illis qui alius tolerat perversiones Northmanni ad obtinendum optatum exitum inveniendi methodos necessarias.
Ut felem cauda non trahere, incipiam ab ultima: cursoriam operatur in usuario mediocris utilitatis.
I. Consola et umbra RDP.
Quia usus est administrator iura ministri Procurator console -> QuickSessionCollection -> strepitando in sessione usurarii utentis, eligens umbram ex menu contextu contextus ad personas instruentes quomodo utendi softwarenon bene, alia methodus lignea considerabatur, nempe;
1. Find sicco RDP id sessionis;
query user | findstr Administrator
aut:
qwinsta | findstr Administrator
Sed et "| findstr administrator"Tantum commodum erat cum scires quid exacte" Administrator opus est, vel prima tantum parte utere ut omnes initium in servo viderent.
2. Coniungere huic sessioni, dummodo in dominico coetus consilia "Sessiones remotae Desktop Services" "sessionibus usorum remotis imperiis constitue" optio eligetur cum saltem "sessionis monitoris cum permissione usoris" optio electa (
mstsc /shadow:127
Quaeso nota quod indicem solum logins usorum continent.
Dico sine iure admin sequentia habebis:
Sed ad praeliminarem debugging programmatis, quod discutiendum est, rationem cum administratoribus iuribus usus sum.
II. Program
Quaestio igitur enuntiatio: creans aliquod interface graphicum simplex coniungere ad sensum umbrae usoris cum eius permissione, nuntium ad usorem mittens. Vestibulum elit Lazarus eligitur.
1. Plenum domain nomen usorum "login" - "nomen plenum" obtinemus ab administratore, vel iterum per consolatorium:
wmic useraccount get Name,FullName
ne hoc quidem vetat;
wmic useraccount get Name,FullName > c:testusername.txt
Dicam statim Lazarum esse qui problema huius limae expediendi habuit, quoniam per defectionem eius descriptam est UCS-2, sic ego iustus manually eam ad regularem UTF-8. Multum tabs in structura tabellae, vel potius multa spatia, quae programmatice procedere placuit, serius vel serius problema descriptam solvetur et tabella programmatice renovabitur.
Ita, idea est habere folder pervium programmatis utentibus, exempli gratia c:test, in quo erunt 2 tabulae: prima cum nomine et nomine, altera cum id_rdp et login usorum. Deinde, ut melius possumus:).
Interim, ut cum indice sessionum adiungas, haec contenta in ordinem transfermus;
procedure Tf_rdp.UserF2Array;
var
F:TextFile; i:integer; f1, line1:String; fL: TStringList;
begin //f_d Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²
f1:=f_d+'user_name.txt'; //Π·Π°Π΄Π°ΡΠ° ΡΡΠΈΡΠ°ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°
fL := TStringList.Create; // ΡΡΡΠΎΠΊΡ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π½Π΅ΠΌ ΠΌΠ΅ΡΠ°ΠΌΠ°ΡΡΠΎΠ·Π°ΠΌ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΡΠΌΠΈ
fL.Delimiter := '|'; fL.StrictDelimiter := True;
AssignFile(F,f1);
try // ΠΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ
reset(F); ReadLn(F,line1);
i:=0;
while not eof(F) do // Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ ΡΡΡΠΎΠΊΠΈ, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ ΡΠ°ΠΉΠ»
begin
ReadLn(F,line1);
line1:= StringReplace(line1, ' ', '|',[]); //Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠΏΠ°Π²Ρ.2ΠΏΡΠΎΠ±Π΅Π»Π° ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ |
// ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π²ΡΠ΅ Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π΅Π»Ρ
while pos(' ',line1)>0 do line1:= StringReplace(line1, ' ', ' ', [rfReplaceAll]);
begin
if (pos('|',line1)>0) then
begin //Π΅ΡΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π·Π°Π½ΠΎΡΠΈΠΌ Π΅Π³ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ²
fL.DelimitedText :=line1; // ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΠΌ Π½Π° ΡΡΠΎΠ»Π±ΡΡ
if (fL[0]<>'') then //Π΅ΡΠ»ΠΈ ΡΡΠ΅ΡΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ ΠΈΠΌΡ
begin //Π²Π½ΠΎΡΠΈΠΌ Π΅Π΅ Π² ΠΌΠ°ΡΡΠΈΠ²
inc(i); // ΠΈΠ·Π±Π°Π²Π»ΡΠ΅ΠΌΡΡ ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΡ
ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π² Π»ΠΎΠ³ΠΈΠ½Π΅
fam[0,i]:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]);
fam[1,i]:=fL[0];
end;end;end;end; // ΠΠΎΡΠΎΠ²ΠΎ. ΠΠ°ΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠ».
CloseFile(F);
Fl.Free;
except
on E: EInOutError do ShowMessage('ΠΡΠΈΠ±ΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΠΉΠ»Π°. ΠΠ΅ΡΠ°Π»ΠΈ: '+E.Message);
end;end;
Paenitemus "multum codicis", sequentia puncta brevius erunt.
2. Eadem methodo e paragrapho superiore utens, exitum album expediendi in elementum StringGrid legimus, dum partem codicis "significat" dabo;
2.1 Praesens indicem sessionum RDP in tabella accipimus:
f1:=f_d+'user.txt';
cmdline:='/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); // ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΠΎΠ΄ΠΎΠ»ΡΡΠ΅ ΠΆΠ΄Π°ΡΡ ΠΏΠΎΠΊΠ° ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ
2.2 Processus tabella (lineae tantum significantes codicis indicantur);
StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; //ΠΊΠΈΠ΄Π°Π΅ΠΌ Π² ΡΠΈΠΊΠ»Π΅ Π² StringGrid1
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); //ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΈΠ· Π»ΠΎΠ³ΠΈΠ½Π° ΠΏΡΠΎΠ±Π΅Π»Ρ
if (SearchArr(login1)>=0) then //ΠΈΡΠ΅ΠΌ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈΠ· ΠΏ1. Π»ΠΎΠ³ΠΈΠ½ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² ΡΠ°Π±Π»ΠΈΡΡ Π€ΠΠ
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; // Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΠ»ΡΡΠΈΠΊ:)
.... //Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠ±ΠΎΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎ Π΄Π°Π½Π½ΡΠΌ
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);
3. Ipsum nexum directum strepitando in linea cum usore et numero sessionis eius:
id:=(StringGrid1.Row);// ΡΠ·Π½Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ IntToStr(StringGrid1.Row)
ids:=StringGrid1.Cells[2,id]; //ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ rdp
cmdline:='/c mstsc /shadow:'+ ids; //ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ....
if (b_rdp.Checked=True) then if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;
4. Duo ornamenta plura facta sunt, ut strepitando in radiobutton voluptua, nuntiis ad usorem vel ad omnes utentes.
β plena source code videri potest
III. Usura AdminLink - quod vidi:
AdminLink brevis quae indicat locum utilitatis generat admilaunch.exe, et exemplar personale utilitatis launch AdmiRun.Exe quae sita est in folder utentis, e.g Vasya, type C:UsersvasyaWINDOWS. In genere, non omnia mala sunt: ββcircumire potes accessu iurium ad fasciculi brevis et alios ad conscientiam tuam purgandam.
Source: www.habr.com