Desktopplatz "reservieren"

  • Hey, ich weiß es gibt eine Funktion in der WinAPI, um "platz auf dem Desktop zu reservieren". Nun weiß niemand außer ich was ich meine, daher versuche ich es anhand eines Beispieles zu schreiben^^
    Wenn man bei ICQ auf andocken klickt, dann dockt es rechts an und kein anderes Fenster überdeckt es danach, auch wenn man später auf "maximieren" klickt. Ich hoffe dass jemand von euch den Funktionsnamen weiß^^
    MfG,
    Xyron

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

    Einmal editiert, zuletzt von Xyron (21. Oktober 2011 um 15:03)

  • Nein, das meine ich nicht :(
    Die anderen Fenster können das Fenster nicht überdecken, das heißt, es ist dann wie bei der Taskbar von Windows.

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • Die Fenster sollen aber auch nicht darunter sein können ;) Das ist bei der Taskbar so, und deswegen reicht $WS_TOPMOST nicht. Sonst hätte ich das verwendet.

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • Ich hab Windows 7, und bei mir können die Fenster unter der Taskbar rumrutschen so viel sie wollen. Ich verstehe zwar was du meinst, aber mir fällt auf Anhieb keine leicht umsetzbare Lösung ein. Alle Fenster mit WinList und WinGetPos zu überprüfen dauert vermutlich zu lange. Allerdings fände ich persönlich ein sich so verhaltendes Fenster ziemlich lästig....

  • Hmm, ist unwichtig geworden ^^. Aber das anfangsproblem steht wieder.
    Wenn ich $WS_EX_TOPMOST setze, werden fenster trotzdem dahinter gesetzt, wenn ich auf maximieren klicke, genau das würde ich gerne verhindern ;)
    Vieleich weißt du ja jetzt was ich meine

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • Ist nicht sinnlos :P Das ist wie gesagt wie bei der Taskbar. Da werden die Fenster beim maximieren auch nicht einfach drüber gesetzt. Und genau das meine ich. Wenn ich auf maximieren klicke, dann soll das maximierte fenster nicht unter meinem sein, sondern so verschoben werden, dass es das nicht ist

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • Zitat

    Wenn ich auf maximieren klicke, dann soll das maximierte fenster nicht unter meinem sein, sondern so verschoben werden, dass es das nicht ist


    Überleg dir noch mal ganz genau, was du da von uns verlangst... Ein maximiertes Fenster nimmt den gesamten Desktop ein, und jetzt willst du alle Fenster so platzieren, dass sie auch Platz haben? :huh:

  • Kannst du mir zeigen wie ich die Abfangen kann? Ich habe es jetzt einiger Zeit mit_WinAPI_SetWindowsHookEx versucht, aber ich bekomme es nicht hin, dass er die fensternachrichten abfängt. ;(

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

    • Offizieller Beitrag

    Die Message heißt übrigens WM_SIZING (da hatte ich mich vertan).
    Das Problem ist zu Lösen mit "_WinAPI_SetWindowLong", allerdings will ich dir nicht dein Skript schreiben. Probier erst mal selbst.

    Na gut - hier mal ein Bsp., wie mit der Funktion gearbeitet wird. Das Anpassen für WM_SIZING kannst du ja dann selbst probieren.

    Spoiler anzeigen
    [autoit]

    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local Const $GWL_WNDPROC = -4

    [/autoit] [autoit][/autoit] [autoit]

    $hGui = GUICreate("Test", 400, 400)
    $hListView = _GUICtrlListView_Create($hGui, "Listview", 10, 10, 380, 380)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))

    [/autoit] [autoit][/autoit] [autoit]

    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Add columns
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)

    [/autoit] [autoit][/autoit] [autoit]

    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 2", 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ;
    $hProc = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam')
    $hHook = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProc))

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While GUIGetMsg() <> -3
    Sleep(10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hHook) ; original WinProc wiederherstellen

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _WinProc($hWnd, $iMsg, $iwParam, $ilParam)
    ; wenn nicht die gewünschte Msg kommt - Rückgabe an System
    If $iMsg <> $WM_NOTIFY Then Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)

    [/autoit] [autoit][/autoit] [autoit]

    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

    [/autoit] [autoit][/autoit] [autoit]

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_COLUMNCLICK ; A column was clicked
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    ConsoleWrite('MyProc: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
    Return 0 ; <== Nachricht wird jetzt verworfen und kann über GUIRegisterMsg nicht verwertet werden

    [/autoit] [autoit][/autoit] [autoit]

    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    ConsoleWrite("MyProc: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
    " -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
    EndSwitch
    EndSwitch
    ; jetzt wird die normale WinProc aufgerufen, die man mit GuiRegisterMsg auswerten kann
    Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)
    EndFunc ;==>_WinProc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_COLUMNCLICK ; A column was clicked <== Diese Nachricht erreicht die Funktion nicht mehr
    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    ConsoleWrite('GUIRegisterMsg: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    ConsoleWrite("GUIRegisterMsg: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
    " -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
    EndSwitch
    EndSwitch
    Return 0
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Ich meine es gab eine schnellere Lösung, ohne große Hooks und co.
    Ich habe ein Programm gefunden, dass genau das tut was ich haben will!
    DektopCoral
    Ich möchte nur, dass das in meinem Script gemacht wird

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • meinst Du das begrenzen des Desktop's für darstellbare Fenster?
    Wenn ja:

    [autoit]

    #include <winapi.au3>

    [/autoit][autoit][/autoit][autoit]

    Const $SPI_SETWORKAREA = 47
    Const $SPIF_SENDCHANGE = 2

    [/autoit][autoit][/autoit][autoit]

    $tRECT = DllStructCreate('int;int;int;int')
    DllStructSetData($tRECT, 1, 0) ; left
    DllStructSetData($tRECT, 2, 0) ; top
    DllStructSetData($tRECT, 3, 1680) ; right
    DllStructSetData($tRECT, 4, 1050) ; buttom
    _WinAPI_SystemParametersInfo($SPI_SETWORKAREA, 0, DllStructGetPtr($tRECT), $SPIF_SENDCHANGE)

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Halleluya! Ich danke dir! Das ist GENAU das was ich gesucht habe! :D
    :thumbup::thumbup::thumbup::thumbup:
    Und auch ein danke an alle anderen, die hier was gepostet haben, wird mir sicherlich noch nützlich sein ^^
    Daaanke :)

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )