![]() |
Explorer / Internet Explorer
Hallo Zusammen,
ich habe eine kleine Benutzeroberfläche für das Multimedia Center in dem ich arbeite geschrieben, die soweit auch ganz gut funktioniert. Es wird z.B. überprüft, ob ein Explorerfenster geöffnet ist und wenn, dann wird es gleich wieder geschlossen. So will ich unter win98, ohne großen Aufwand verhindern, dass jemand am System rumspielt. Die Leute sollen aber den Internet Explorer benutzen können... soweit auch kein Problem, denn die klasse des IE ist 'IEFrame' und die des Explorers ist 'ExploreWClass' bzw. 'CabinetWClass' und so schließe ich einfach immer nur den Explorer, wenn er halt geöffnet wird. Nun kommt mein Problem, wenn ich z.B. in den Internet Explorer 'c:' eingebe, dann wird der quasi zum Explorer, behält aber die Klasse des Internet Explorers. Nun habe ich mir gedacht, da sich auf jedem Explorer ein 'SysListView32' befindet, kann ich darüber rausfinden, ob jemand den IE zum navigieren im System benutzt. Aber leider fehlt mir da die nötige Kenntnis..., weiß jemand, wie ich den IE überprüfe ob er ein 'SysListView32' in sich hat?! MFG Evian |
Re: Explorer / Internet Explorer
Moin Evian,
such' hier mal nach ![]() ![]() Ein Programm, dass solche Scherze veranstaltet, wie es das Deine tun soll, flöge allerdings bei mir sofort wieder runter. :stupid: |
Re: Explorer / Internet Explorer
Dein Rechner wird wahrscheinlich auch nicht an einer öffentlichen Bushaltestelle stehen. ;)
|
Re: Explorer / Internet Explorer
Zitat:
Ja Danke, ich werds mir mal anschauen. Zitat:
Meiner Meinung nach ist die Idee, den Explorer zu verbieten, zumindest für diese sEinsatzgebiet gar nicht so schlecht, zumal wir sowieso eine Benutzeroberfläche haben. |
SearchSysListView - Funktion
Ich hab mir mal zu diesem Thema Gedanken gemacht und mal eine Funktion geschrieben. Vielleicht ist sie sogar nützlich:
Delphi-Quellcode:
Sie macht alle Kinder des Fensters mit dem angegebenem Handle durch nach einem Fenster mit der Klasse "SysListView32". Wenn sie es findet, dann gibt die Funktion das Handle zurück, andernfalls gibt sie 0 zurück.
function SearchSysListView(HWND: THandle): THandle;
var return: THandle; ClassName: string; count: integer; const MaxClassLength = 256; begin Result:= 0; // Die Klasse des Fensters wird ermittelt SetLength(ClassName, MaxClassLength); count:= GetClassName(HWND, PChar(ClassName), MaxClassLength); If count = 0 then RaiseLastOSError; SetLength(ClassName, count); // Falls das Fenster schon die Klasse besitzt wird das Handle zurückgegeben If ClassName = 'SysListView32' then begin Result:= HWND; Exit; end; // wenn die Klasse nicht SysListView32 ist dann folgen rekursive Aufrufe // der Funktion mit den Handles aller Kinder des Fensters return:=GetTopWindow(HWND); If return <> 0 then begin while (return <> 0) and (Result = 0) do begin Result:= SearchSysListView(return); return:= GetNextWindow(return, GW_HWNDNEXT); end; end; end; Wenn der Code schreckliche Fehler enthält, dann bitte nicht böse sein, ich bin noch Anfänger :oops: Ciao, Reddog. |
Re: Explorer / Internet Explorer
Wow Super, Danke!
Also ich habs jetzt noch nicht getestet, aber es sieht sehr gut aus, ich denke wenn es noch Fehlerchen gibt, dann werde ich sie selber hinbekommen, aber echt klasse! Da nehm ich den Code von Dir "Anfänger"(glaube Du hast aber das falsche Wort gewählt) 1000x mal lieber, als irgendwo im Internet was "Besseres" zu finden. Wenns funzt, dann sag ich nochmal bescheid! |
Re: Explorer / Internet Explorer
Hi Evian,
und was ist wenn jemand den Arbeitsplatz öffnet? |
Re: Explorer / Internet Explorer
nur auf ein SysListView32 zu überprüfen reicht meiner Meinung nicht aus, denn der Benutzer kann immer noch Dateien direkt über die Adressleiste starten. Auch wenn er nicht die kompletten Pfadangaben weiss, kann er mit Hilfe der Autovervollständigung durch die Verzeichnisse navigieren.
MfG Luki |
Re: Explorer / Internet Explorer
Zitat:
Greetz alcaeus |
Re: Explorer / Internet Explorer
mh... stimmt... :roll:
naja also der Explorer, sofern er ein SysListView32 enthält, wird geschlossen... aber der Zugriff auf Dateien ist damitt nicht unterbunden. Also ich bin für alle Ideen offen, aber glaube fast langsam... dass es so nicht 100 Pro zu lösen ist. *schnief* Evian ---Edit---- Zitat:
Aber was meinst Du mit "das problem von Memphis"? ---Edit---- |
Re: Explorer / Internet Explorer
Zitat:
|
Re: Explorer / Internet Explorer
Zitat:
Weiters könntest du auch nur die Schreibrechte auf den Windows-Ordner entfernen, aber ich weiß nicht inwiefern dies unter Win98 möglich ist... Greetz alcaeus |
Re: Explorer / Internet Explorer
Hmm...
Es ist sicher eine Frage des Geldes, aber für öffentliche Einrichtungen würde ich immer einen PC-Wächter auf Hardwarebasis empfehlen |
Re: Explorer / Internet Explorer
naja ich werd noch ein bissel rumprobieren und dann Posten, wenn ich weitergekommen bin.
Auf jeden Fall Danke, für die Hilfe @all. |
Re: Explorer / Internet Explorer
Ich hätte da eine Frage dazu:
Wie schließt du eigentlich die Fenster? Bei mir klappt es nähmlich weder mit DestroyWindow noch mit SendMessage(HWND, WM_DESTROY, 0, 0). :( Reddog EDIT: OK, hat sich erledigt, klappt wunderbar mit PostMessage(HWND, WM_CLOSE, 0, 0). :) |
Re: Explorer / Internet Explorer
Ich wollte damit eigentlich nur sagen, dass man durch die Adressleiste noch bspw. auf die cmd.exe, also Dos-Box zugreifen kann, und einem somit wieder alle Toffen stehen.
Man könnte auch dieses Fenster wieder schließen... MfG Luki |
Re: Explorer / Internet Explorer
Ok, funzt eigendlich ganz gut und verbraucht weit weniger Ressourcen, als ich angenommen hätte... also läuft auf nem Pentium II 266, ohne, dass man irgendwas merkt.
Um zu überprüfen ob der IE zum Browsen im System genutzt wird, benutze ich in etwa volgenden Code:
Code:
Um andere Programme zu beenden, die die Benutzer nicht nutzen können sollen, nehm ich folgenden Code, wobei für Klassenname natürlich der entsprechende Wert für das Programm eingegeben werden muss:
Procedure CloseAllIE2Sys;
VAR HWND1, HWND2 : THandle; begin while FindWindow('IEFrame',nil)<>0 do BEGIN HWND1 := FindWindow('IEFrame',nil); HWND2 := HWND1; IF SearchSysListView(HWND1) <> 0 THEN SendMessage(HWND2,WM_Syscommand,SC_Close,0); END; end; function Tform1.SearchSysListView(HWND : THandle): THandle; var return: THandle; ClassName: string; count: integer; const MaxClassLength = 256; begin Result:= 0; application.ProcessMessages; SetLength(ClassName, MaxClassLength); count:= GetClassName(HWND, PChar(ClassName), MaxClassLength); If count = 0 then Exit; SetLength(ClassName, count); If ClassName = 'SysListView32' then begin Result:= HWND; Exit; end; return:=GetTopWindow(HWND); If return <> 0 then begin while (return <> 0) and (Result = 0) do begin Result:= SearchSysListView(return); return:= GetNextWindow(return, GW_HWNDNEXT); end; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin CloseAllIE2Sys; end;
Code:
Um den Klassenname rauszubekommen, eignet sich das Freeware Programm X-Spy ausgezeichnet.
while FindWindow('Klassenname',nil)<>0 do
BEGIN SendMessage(FindWindow('Klassenname',nil),WM_Syscommand,SC_Close,0); Application.ProcessMessages; END; Man kann es bei ![]() Also großes Danke noch mal an Reddog, der die Arbeit gemacht hat, die eigendlich meine Aufgabe gewesen wäre und an alle anderen, die mir nen Tip gegeben haben natürlich auch. :dp: MFG Evian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz