Announcement

Collapse
No announcement yet.

Windows die Welt der ??? Hat jede Installation ein Eigenleben?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Windows die Welt der ??? Hat jede Installation ein Eigenleben?

    Für ein Projekt, schaltet mein Programm alles, was dem Anwender Zugriff in das System gewährt ab (Taskbar, Systemtasten,Startknopf,... es bleibt nur noch ein blanker Desktop, ohne Icons) In der Mitte ist dann meine Oberfläche, ringsherum ca. 20% vom Bildschirmrand) Nun zum Problem.

    Unter meinem Rechner passiert nichst, kein Chance irgend wie etwas aufzurufen. Auf den Rechnern wo mein Progamm läuft kommt bei einem Doppelclick auf den blanken Desktop das Startmenü herausgefahren (es ist zwar weitesgehend leergeräumt) aber es darf nicht sein. Hat Irgend jemand ein Ahnung wo das herkommt?

    Dezeit fanbke ich über Hook den Doppelklick ab, wenn es den 'Program Manager' betrifft, das kann aber nicht die Lösung sein.

    Für jeden Tip bin ich Dankbar.

    Michael Nehring

  • #2
    Hallo,

    Windows bietet so viele Schnittstellen und Ansatzpunkte für Erweiterungen, dass man mit derartigen Situationen rechnen muss.

    Wenn man verhindern möchte, dass bestimmte Anwendungen nicht gestartet werden, kann man ein COM-Objekt schreiben, das <b>IShellExecuteHook</b> implementiert und je nach Anwendungsname sein Veto gegen den Start einlegt. Diese Option steht ab Windows 95/Windows NT 4 zur Verfügung.

    Das folgende Beispiel demonstriert, wie man den Start des Windows-Zubehörs <i>Solitaire</i> verhindern kann:
    <pre>
    function TShellExecuteHook.Execute(var ShellExecuteInfo: TShellExecuteInfo): HResult;
    var
    sFile : String;
    begin
    // Default: Windows darf Programm starten
    Result := S_FALSE;
    with ShellExecuteInfo do
    begin
    sFile := UpperCase(ExtractFileName(lpFile));
    if Pos('SOL', sFile) = 1 then
    begin
    // Programm soll nicht gestartet werden -> S_OK zurückliefern
    Result := S_OK;
    // Keine Windows-Fehlermeldung anzeigen -> Wert >= 32 zurückliefern
    hInstApp := 32;
    MessageBox(Wnd, 'Nicht schon wieder Solitaire!',
    'Das störrische Windows 2000',
    MB_OK or MB_ICONINFORMATION);
    end;
    end;
    end;
    </pre&gt

    Comment


    • #3
      Hallo Herr Kosch,

      danke für den Tip, versuche es mal.

      Michael Nehrin

      Comment

      Working...
      X