ich habe meine GUI mit
[autoit]$WS_POPUP
[/autoit]der titelleiste beraubt, jedoch würde ich dennoch gern das fenster mit der maus verschieben können.
konnt ihr mich mal auf den richtigen weg bringen?
ich habe meine GUI mit
[autoit]$WS_POPUP
[/autoit]der titelleiste beraubt, jedoch würde ich dennoch gern das fenster mit der maus verschieben können.
konnt ihr mich mal auf den richtigen weg bringen?
ich habe meine GUI mit
[autoit]$WS_POPUP
[/autoit]der titelleiste beraubt, jedoch würde ich dennoch gern das fenster mit der maus verschieben können.
konnt ihr mich mal auf den richtigen weg bringen?
Wenn du denn dein komplettes Script posten könntest
Du meinst dein GUI kann sich nicht mehr verschieben oder wie?
Erstell über die ganze GUI ein Label ohne Text mit dem Stil $GUI_WS_EX_PARENTDRAG ;).
#Region - Timestamp
;2011-05-31 15:29:19
#EndRegion
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#region - GUI Create
$GUI=GUICreate('',200,200,-1,-1, $WS_POPUP)
GUISetState()
#endregion
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
[/autoit] [autoit][/autoit] [autoit]#region - GUI SelectLoop
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
#endregion
Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
Local $iProc
$iProc = DllCall("user32.dll", "int", "DefWindowProc", _
"hwnd", $hWnd, "int", $Msg, "int", $wParam, "int", $lParam)
If @error Then SetError(@error, 0, 0)
$iProc = $iProc[0]
If $iProc = $HTCLIENT Then Return $HTCAPTION
Return $GUI_RUNDEFMSG
EndFunc
i2c: ich habe dein script ausprobiert und es geht, aber ich brauche den titel meines fensters, da d4essen metrics gemessen werden und darin was anderes eingepasst wird.
nagut dann werfe ich mal nein geschreibsel in die runde.
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1) ;Wechsle in den OnEvent Modus
[/autoit] [autoit][/autoit] [autoit]Global $gui, $guiPos, $pic, $picPos, $msg, $n, $hdisplay, $MCpos, $SCpos,$SCpos0,$SCpos1, $bild, $widht, $height, $fehler, $Name1, $Name2;, $test, $test1, $SCpostest
Global $counter =0, $ausg_quali=4, $time = 0, $pid,$border1,$border2,$paaddedborder,$y=0
Global $hdll_gdi32 = DllOpen("gdi32.dll")
Global $sFile = "auflösung.ini"
If Not FileExists($sFile) Then
eingabe()
Else
lesen()
EndIf
Func eingabe()
$widht = InputBox("auflösung", "breite des side-display")
$height = InputBox("auflösung", "höhe des side-display")
$ausg_quali = InputBox("Bildqualität", "Es sind Werte zwischen 1 und 4 möglich." & @CRLF & "Je höher desto besser ist das Bild, aber auch die Systemauslastung")
$Name1 = InputBox("Dein Name", "Besitzer")
$Name2 = InputBox("Mein Name", "System")
iniwrite_eingabe()
;~ IniWrite($sFile, "widht", "widht", $widht)
;~ IniWrite($sFile, "height", "height", $height)
;~ IniWrite($sFile, "Qualität", "level", $ausg_quali)
EndFunc
Func lesen()
iniread_lesen()
If $widht <10 Then
$widht = InputBox("auflösung", "breite des side-display")
IniWrite($sFile, "widht", "widht", $widht)
EndIf
If $height <10 Then
$height = InputBox("auflösung", "höhe des side-display")
IniWrite($sFile, "height", "height", $height)
EndIf
If $ausg_quali <1 Then
$ausg_quali = InputBox("Bildqualität", "Es sind Werte zwischen 1 und 4 möglich." & @CRLF & "Je höher desto besser ist das Bild, aber auch die Systemauslastung")
IniWrite($sFile, "Qualität", "level", $ausg_quali)
EndIf
EndFunc
WinWait("Windows Media Center",'',5); warte auf das media center
[/autoit] [autoit][/autoit] [autoit]#Region --- CodeWizard generated code Start ---
[/autoit] [autoit][/autoit] [autoit];MsgBox features: Title=Yes, Text=Yes, Buttons=Yes and No, Icon=Critical, Timeout=10 ss
If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(20,"Fehler","Media Center nicht gefunden oder verdeckt"& @CRLF & "Media Center versuchen zu starten?",10)
Select
Case $iMsgBoxAnswer = 6 ;Yes
Run(@WindowsDir & "\ehome\ehshell.exe",@WindowsDir & "\ehome")
WinWaitActive("Windows Media Center",'',5); warte auf das media center
Case $iMsgBoxAnswer = 7 ;No
$fehler = "Media Center Fenster nicht gefunden, abbruch durch User"
CLOSE_error_abfrage()
Case $iMsgBoxAnswer = -1 ;Timeout
$fehler = "Media Center Fenster nicht gefunden, abbruch durch Timeout"
CLOSE_error_abfrage()
EndSelect
#EndRegion --- CodeWizard generated code End ---
FensterMessenMC()
[/autoit] [autoit][/autoit] [autoit];==> Windows Metrics lesen
$border1 = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics","CaptionHeight") ; titelleiste lesen
$border1 = $border1/15
$border2 = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics","PaddedBorderWidth") ; Ramen lesen
$border2 = $border2/15
$paaddedborder =$border1 + $border2
;==> Windows Metrics lesen ende
$hDesktop = _WinAPI_GetDesktopWindow() ;Handle des Desktops hohlem
$hDC_Desktop = _WinAPI_GetDC($hDesktop) ;Den Device Context vom Desktop ermitteln
$hGUI = GUICreate("Desktop",$widht, $height, $SCpos0, $SCpos1, $WS_SIZEBOX + $WS_MAXIMIZEBOX + $WS_SYSMENU + $WS_POPUP + $WS_EX_CONTROLPARENT) ;Eine gui erstellen
$hDC_GUI = _WinAPI_GetDC($hGUI) ;den DC davon ermitteln
GUISetBkColor(0x000000)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUISetState(@SW_SHOW)
$Guten = GUICtrlCreateLabel("Guten Tag " & $Name1 & "." & @CRLF &"Hier ist " & $Name2 &". "& @CRLF & @CRLF & "Ich wünsche dir viel Vergnügen",$widht/5,$height/3,$widht,$height/2)
GUICtrlSetFont(-1, 20, 800, 0, "Hollywood Hills")
GUICtrlSetColor(-1, 0x3399FF)
Sleep(1000)
DllCall($hdll_gdi32, "int", "SetStretchBltMode", "dword", $hDC_GUI, "int", $ausg_quali) ;den schönen blit modus anstellen
;~ MouseClickDrag("",,,,)
While(1)
Sleep(1)
MClesen()
WEnd
Func MClesen()
_WinAPI_StretchBlt($hDC_GUI,0--$paaddedborder, $y--$paaddedborder, $widht-$paaddedborder,$height-$paaddedborder, $hDC_Desktop, $MCpos[0], $MCpos[1], $MCpos[2], $MCpos[3], $SRCCOPY) ; titelleiste wird von TOP abgezogen und das gemesseneMC wird in das gemessene/voreingestellte anzeigeprogramm eingepasst
;Der Befehl transveriert den Inhalt des Desktop DC's auf die GUI DC und passt dabei die grösse an das gegenstück ohne grössenanpassung ist _WinAPI_BitBlt
$counter = $counter +1
If $counter = 20 Then; alle 20 durchläufe wird
FensterMessenMC() ; das fenster vom MC gemessen und als neuer richtwert übernommen
FensterMessenSC() ; das fenster vom SC gemessen und als neuer richtwert übernommen
$counter =0
EndIf
EndFunc ;==>MClesen
; Author.........: Yashied
Func _WinAPI_StretchBlt($hDestDC, $iXDest, $iYDest, $iWidthDest, $iHeightDest, $hSrcDC, $iXSrc, $iYSrc, $iWidthSrc, $iHeightSrc, $iRop)
Local $Ret = DllCall($hdll_gdi32, 'int', 'StretchBlt', 'hwnd', $hDestDC, 'int', $iXDest, 'int', $iYDest, 'int', $iWidthDest, 'int', $iHeightDest, 'hwnd', $hSrcDC, 'int', $iXSrc, 'int', $iYSrc, 'int', $iWidthSrc, 'int', $iHeightSrc, 'dword', $iRop)
[/autoit] [autoit][/autoit] [autoit]If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, 0)
EndIf
Return 1
EndFunc ;==>_WinAPI_StretchBlt
Func FensterMessenMC() ;==>MC wird Vermessen
$MCpos = WinGetPos("Windows Media Center"); äussere koordinaten des media center abfragen
If @error Then
MsgBox(16,"Fehler","Media Center Fenster nicht gefunden")
$fehler = "Media Center Fenster nicht gefunden"
CLOSE_error()
EndIf
EndFunc ;==> FensterMessen()
Func FensterMessenSC() ;==>SC wird Vermessen
[/autoit] [autoit][/autoit] [autoit];~ $test1 = $test
$SCpos = WinGetPos("Desktop"); äussere koordinaten des screecapture abfragen
If @error Then
MsgBox(16,"Fehler","screencap Fenster nicht gefunden")
$fehler = "screencap Fenster nicht gefunden"
CLOSE_error()
EndIf
$widht = $SCPos[2]
$height = $SCPos[3] ; veränderung messen und border abziehen!!!!!!
EndFunc ;==> FensterMessen()
Func iniwrite_eingabe() ;==>werte werden in die datei geschrieben
IniWrite($sFile, "widht", "widht", $widht)
IniWrite($sFile, "height", "height", $height)
IniWrite($sFile, "Qualität", "level", $ausg_quali)
IniWrite($sFile, "Benutzer", "Name", $Name1)
IniWrite($sFile, "System", "Name", $Name2)
EndFunc ;==>iniwrite_eingabe
Func iniread_lesen() ;==werte werden aus der datei gelesen
$widht=IniRead($sFile, "widht", "widht",1)
$height=IniRead($sFile, "height", "height",1)
$SCpos0=IniRead($sFile, "x", "x",1)
$SCpos1=IniRead($sFile, "y", "y",1)
$SCpos2=IniRead($sFile, "breite", "breite",1)
$SCpos3=IniRead($sFile, "höhe", "höhe",1)
$ausg_quali=IniRead($sFile, "Qualität", "level",1)
$Name1 = IniRead($sFile, "Benutzer", "Name",1)
$Name2 = IniRead($sFile, "System", "Name",1)
EndFunc ;==> iniwrite_close
Func CLOSEClicked() ;==>gute nacht
$SCpos = WinGetPos("Desktop"); äussere koordinaten des media center abfragen
If Not @error Then
iniwrite_close()
EndIf
;benutzte resourcen freigeben
_WinAPI_ReleaseDC($hGUI, $hDC_GUI)
_WinAPI_ReleaseDC($hDesktop, $hDC_Desktop)
Exit
EndFunc ;==>CLOSEClicked
Func iniwrite_close() ;==>werte für das aneigefenster werden in die datei geschrieben
IniWrite($sFile, "x", "x", $SCpos[0])
IniWrite($sFile, "y", "y", $SCpos[1])
IniWrite($sFile, "breite", "breite", $SCpos[2])
IniWrite($sFile, "höhe", "höhe", $SCpos[3])
EndFunc ;==>iniwrite_close
Func CLOSE_error() ;==>abbruch mit fehlerausgabe
FileOpen("fehler.txt",1); fehlerdatei öffnen oder erstellen
FileWriteLine("fehler.txt",""& @MDAY&"."&@MON&"."&@YEAR&"_"&@HOUR&":"&@MIN&" "&$fehler&@CRLF); datum und zeit und fehler reinschreiben
FileClose("fehler.txt")
_WinAPI_ReleaseDC($hGUI, $hDC_GUI)
_WinAPI_ReleaseDC($hDesktop, $hDC_Desktop)
DllClose($hdll_gdi32)
Exit
EndFunc ;==>CLOSE_error
Func CLOSE_error_abfrage() ;==>abbruch mit fehlerausgabe
FileOpen("fehler.txt",1); fehlerdatei öffnen oder erstellen
FileWriteLine("fehler.txt",""& @MDAY&"."&@MON&"."&@YEAR&"_"&@HOUR&":"&@MIN&" "&$fehler&@CRLF); datum und zeit und fehler reinschreiben
FileClose("fehler.txt")
DllClose($hdll_gdi32)
Exit
EndFunc ;==>CLOSE_error
Dein Skript erzeugt bei mir interessante grafische Effekte ^^.
Warum das so ist möchte ich aus Zeitgründen im Moment nicht näher durchleuchten.
Wenn ich WM_NCHITTEST registriere und das Skript starte, lässt sich dein Popup allerdings wie gewünscht verschieben. Wo liegt also das Problem?
kannst du von den "effekten" einen screenshot erstellen?
ahja, nachdem du was von registrieren geschrieben hast, ist mir dann auch die passende zeile aufgefallen.
nun geht es.
ich danke dir
Ist eine Art grafische Rückkopplung in deinem Popup. Der Inhalt des Media Center Fensters wird mitsammt deinem Popup im Popup angezeigt. Dadrin geht's dann immer fröhlich so weiter. Passiert nicht immer. Meist dann, wenn das MMC Fenster vorher schon offen ist.
Win7 Ultimate x64
komisch, ich habe auch win7 x64 und da habe das nicht.
lässt du es etwa als x64 laufen?