- Offizieller Beitrag
Ich habe Tools, die ich im Laufe der Zeit für meine Kollegen geschrieben habe, nun mal in einer GUI eingebunden. Da auch der Windows Taschenrechner Verwendung findet, habe ich diesen ebenfalls in die Oberfläche integriert - braucht er nicht mehr extra geöffnet werden.
Falls ihr das brauchen könnt:
EDIT: Fehler beim Abfragen der Clientgröße behoben - Danke Oscar.
AutoIt
;==============================================================================================
$iStartModus = 3 ; 1 - Standard, 2 - Wissenschaftlich, 3 - Programmierer, 4 - Statistik
$bVersteckeMenu = True ; True(Default), False
;==============================================================================================
$hGUIEmbedded = GUICreate('Embedded Calculator', 600, 400, -1, -1, BitOr($GUI_SS_DEFAULT_GUI,$WS_CLIPCHILDREN))
$aCalc = _StartCalcHideMnu($iStartModus, $bVersteckeMenu)
_EmbedCalc($hGUIEmbedded, $aCalc)
GUiSetState(@SW_SHOW, $hGUIEmbedded)
WinSetState($aCalc[1], '', @SW_SHOW)
WinActivate($aCalc[1])
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ProcessClose($aCalc[0])
Exit
EndSwitch
WEnd
Func _EmbedCalc($hWndGui, $aCalc)
_WinAPI_SetParent($aCalc[1], $hWndGui)
_WinAPI_SetWindowLong($aCalc[1], $GWL_STYLE, $WS_CLIPSIBLINGS)
_WinAPI_SetWindowLong($aCalc[1], $GWL_HWNDPARENT, $hWndGui)
_WinAPI_SetWindowPos($aCalc[1], 0, 0, 0, $aCalc[2], $aCalc[3], $SWP_SHOWWINDOW)
EndFunc
; requires: #include <GuiMenu.au3>
Func _StartCalcHideMnu($iMode=1, $bHide=True)
; $iMode: 1 - Standard, 2 - Wissenschaftlich, 3 - Programmierer, 4 - Statistik
Local $aMode[5] = ['','&Standard','&Wissenschaftlich','&Programmierer','St&atistik']
Local $PID = Run(@SystemDir & '\calc.exe')
Local $hCalc = WinWaitActive('[CLASS:CalcFrame]', '', 10)
If Not IsHWnd($hCalc) Then Return SetError(1,0,0)
; gewählten Mode aktivieren
$iMode = $iMode < 1 ? 1 : ($iMode > 4 ? 4 : $iMode)
WinMenuSelectItem($hCalc, '', '&Ansicht', $aMode[$iMode])
Local $aSize = WinGetClientSize($hCalc)
Local $hMnu, $aItem0, $iHMnu
; Menü Höhe ermitteln
$hMnu = _GUICtrlMenu_GetMenu($hCalc)
$aItem0 = _GUICtrlMenu_GetItemRect($hCalc, $hMnu, 0)
$iHMnu = $aItem0[3] - $aItem0[1]
; Menü - Item entfernen
If $bHide Then
For $i = _GUICtrlMenu_GetItemCount($hMnu) -1 To 0 Step -1
_GUICtrlMenu_RemoveMenu($hMnu, $i)
Next
$iHMnu = 0
EndIf
Local $aRet[4] = [$PID,$hCalc,$aSize[0],$aSize[1]+$iHMnu]
Return $aRet
EndFunc
Alles anzeigen
PS: Ich würde ja gerne die calc.exe versteckt starten - aber leider wird @SW_HIDE beim Aufruf ignoriert (deshalb jetzt auch nicht im Code). Falls ihr da eine Lösung kennt, lasst hören.