Form Verhalten eines Fensters partiell unterbinden

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Vinschni.

    Form Verhalten eines Fensters partiell unterbinden

    Hallo zusammen,
    ich habe eine Programm geschrieben das den Desktop unter Windows ersetzt. Hierbei ist nur von der Desktopfläche die Rede, die Position der Taskleiste wird erkannt und die Formposition/größe angepasst. Da das Programm die Funktionalitäten implementiert, die für einen Reibungslosen Workflow ein Form-Verhalten ähnlich des Desktops voraussetzten, suche ich nach einer Möglichkeit folgendes zu unterbinden:
    • soll nicht durch WIN+D minimizert werden können
    • soll nicht durch ALT+F4 versehentlich geschlossen werden

    Grüße,

    Vinschni
    KeyPreview = True
    spezielle Tastenkombinationen abfangen
    FormClosing implementieren:

    VB.NET-Quellcode

    1. Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    2. e.Cancel = True
    3. End Sub

    Du musst allerdings dafür sorgen, dass Dein Programm irgendwie beendet werden kann.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    warum ist der Desktop nicht gut, dass man ihn ersetzen muß?

    Ich zB hab immer 20 Anwendungen offen, und wenn ich dann die 21. vom Desktop aufrufen will, drücke ich [Win-D] - das minimiert alle Apps, und legt den Desktop frei, dassichda auf ein Icon klicksen kann.

    Würde dein Desktop das auch unterstützen?
    @RodFromGermany
    Dein Beitrag hat mich auf die Idee gebracht die windowsmessages Funktion zu überschreiben. Das ungewollte beenden und verschieben wäre nun verhindert:

    Die windowsmessage Konstanten hab ich von hier und hier.

    VB.NET-Quellcode

    1. Protected Overrides Sub WndProc(ByRef m As Message)
    2. Const WM_NCLBUTTONDOWN As Double = &HA1
    3. Const WM_SYSCOMMAND As Double = &H112
    4. Const HTCAPTION As Double = 2
    5. Const SC_MOVE As Double = 61456
    6. Const WM_CLOSE As Double = &H10
    7. If m.Msg = WM_SYSCOMMAND And m.WParam.ToInt32() = SC_MOVE Then
    8. Return
    9. End If
    10. If m.Msg = WM_NCLBUTTONDOWN And m.WParam.ToInt32() = HTCAPTION Then
    11. Return
    12. End If
    13. If m.Msg = WM_CLOSE Then
    14. Return
    15. End If
    16. MyBase.WndProc(m)
    17. End Sub


    KeyPreview = True erfüllt seinen Zweck nicht. :( Wie diese Beispiel zeigt lassen sich nur Tastenanschläge abfangen, wenn die Form den Fokus besitzt. Da WIN+D aber auch gedrückt werden kann wenn irgend ein anderes Fenster den Fokus hat lässt sich das minimieren nicht abfangen.


    @ErfinderDesRades
    mein Programm erweitert die Features des Desktops. Mein Ziel ist, das wenn du im von dir beschriebenen Fall, wenn z.B. 20 Anwendungen geöffnet sind und du "Win+D" drückst um den Desktop freizulegen, nicht der Desktop, sondern mein Programm "freigelegt" wird. :)
    Da würde ich unbedingt nach Alternativen suchen.
    Der Desktop ist eine Windows-institution, und kaum ein Anwender wirds gut finden, wenn du da in die Funktionalität eingreifst.
    Abgesehen davon scheintes mir sehr schwierig, des Desktops Funktionalität hinreichend gut nachzuprogrammieren.
    Wenn ich etwa etwas auf den Desktop dragge, möchte ich, dasses im WinExplorer auch im Desktop-Ordner angezeigt wird - kriegste das auch hin?

    reicht es nicht, etwa einen systemweiten Hotkey zu registrieren, der dein Proggi holt?
    Das wäre auch nur ein Bruchteil an Programmier-Arbeit, und hätte nicht diesen Beigeschmack von MalWare.
    @ErfinderDesRades
    Die Anwendung läuft auf für spezifische Zwecke angepasste Client-PCs. Sie soll zur Laufzeit dynamisch generierte mehrere nebeneinander angeordnete Listen von LinkLabels anzeigen. Die LinkLabels sind auf Dateien in verschiendenen Ordnern eines Netzlaufwerks verknüpft, und werden Öffnen bei Klick die damit per shell verknüpfte Anwendung.

    Das der Desktop eine "Windows-Institution" ist interessiert den Anwender nicht, da ich eine Anwendung bereitstelle, die ihm für seinen Zweck zugeschnitten schnell und übersichtlich Zugriff auf ausgewählte Dateien gibt.

    Ich suche nach einer Lösung für das oben beschriebene Problem, mein Ziel ist es nicht deine Ansprüche an einen Desktop zu implementieren. Ich bitte dich dies zu bedenken. Des weiteren ist deine Unterstellung, mein Ziel wäre es Malware zu programmieren, weil ich nach einer Möglichkeit suche meine Anwendung bei "WIN+D" nicht minimieren zu lassen unverschämt und irreführend.

    Vinschni
    naaa! wenn ich dir unterstelle, malware zu produzieren, da werde ich deutlicher, das kannste mir glauben.
    Also: ich unterstelle dir sowas überhaupt nicht!

    Ich hab mir einfach vorgestellt, ich würde so ein proggi bekommen, und auf einmal ist mein desktop nicht mehr der, der er früher war.

    Edit: bitte lass uns versöhnlich bleiben. Ich hab jetzt dein proggi besser verstanden, und hab gesagt, ich würde etwas machen, was nicht Gefahr läuft, mittm Desktop verwechselt zu werden, aber ich kenn natürlich nicht deine Anforderungen, und ist natürlich dein Proggi ok?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()