Beiträge von funkey
-
-
Da ich immer noch nicht weiß, was bei dir nicht funktioniert, hab ich die Funktion nun universal einsetzbar gemacht. War eh leichter als ich dachte:
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]Opt("MustDeclareVars", 1)
[/autoit] [autoit][/autoit] [autoit]Global $hHookMsgBox
[/autoit] [autoit][/autoit] [autoit]_MsgBoxEnglish(0, "Title", "Text")
[/autoit] [autoit][/autoit] [autoit]
_MsgBoxEnglish(1, "Title", "Text")
_MsgBoxEnglish(2, "Title", "Text")
_MsgBoxEnglish(3, "Title", "Text")
_MsgBoxEnglish(4, "Title", "Text")
_MsgBoxEnglish(5, "Title", "Text")
_MsgBoxEnglish(6, "Title", "Text")
_MsgBoxEnglish(7, "Title", "Text")#region English Button text for MsgBox!!
[/autoit] [autoit][/autoit] [autoit]
;##########################################################
Func _MsgBoxEnglish($flag, $title, $text, $timeout = 0, $hwnd = 0)
Local $hProcMsgBox = DllCallbackRegister("CbtHookProcMsgBox", "int", "int;int;int")
Local $TIDMsgBox = _WinAPI_GetCurrentThreadId()
$hHookMsgBox = _WinAPI_SetWindowsHookEx($WH_CBT, DllCallbackGetPtr($hProcMsgBox), 0, $TIDMsgBox)Local $iRet = MsgBox($flag, $title, $text, $timeout, $hwnd)
[/autoit] [autoit][/autoit] [autoit]_WinAPI_UnhookWindowsHookEx($hHookMsgBox)
[/autoit] [autoit][/autoit] [autoit]
DllCallbackFree($hProcMsgBox)
Return $iRet
EndFunc ;==>_MsgBoxEnglishFunc CbtHookProcMsgBox($nCode, $wParam, $lParam, $hHookMsgBox)
[/autoit] [autoit][/autoit] [autoit]
Local $RET = 0, $hBitmap = 0, $xWnd = 0
Local $sButtonText
If $nCode < 0 Then
$RET = _WinAPI_CallNextHookEx($hHookMsgBox, $nCode, $wParam, $lParam)
Return $RET
EndIf
Switch $nCode
Case 5 ;5=HCBT_ACTIVATE
_WinAPI_SetDlgItemText($wParam, 1, "OK")
_WinAPI_SetDlgItemText($wParam, 2, "Cancel")
_WinAPI_SetDlgItemText($wParam, 3, "&Abort")
_WinAPI_SetDlgItemText($wParam, 4, "&Retry")
_WinAPI_SetDlgItemText($wParam, 5, "&Ignore")
_WinAPI_SetDlgItemText($wParam, 6, "&Yes")
_WinAPI_SetDlgItemText($wParam, 7, "&No")
_WinAPI_SetDlgItemText($wParam, 8, "Help")
_WinAPI_SetDlgItemText($wParam, 10, "&Try Again")
_WinAPI_SetDlgItemText($wParam, 11, "&Continue")
EndSwitch
Return
EndFunc ;==>CbtHookProcMsgBoxFunc _WinAPI_SetDlgItemText($hDlg, $nIDDlgItem, $lpString)
[/autoit]
Local $aRet = DllCall('user32.dll', "int", "SetDlgItemText", _
"hwnd", $hDlg, _
"int", $nIDDlgItem, _
"str", $lpString)
Return $aRet[0]
EndFunc ;==>_WinAPI_SetDlgItemText
;##########################################################
#endregion English Button text for MsgBox!! -
Ich würde das die Array-Elemente in Integer umwandeln und _ArraySort() verwenden.
[autoit]#include <Array.au3>
[/autoit][autoit][/autoit][autoit]Global $aGegeben[7] = ["20pt", "24pt", "20pt", "30pt", "20pt", "24pt", "200pt"]
[/autoit][autoit][/autoit][autoit]For $i = 0 To UBound($aGegeben) - 1
[/autoit][autoit][/autoit][autoit]
$aGegeben[$i] = Int($aGegeben[$i])
Next_ArraySort($aGegeben, 1)
[/autoit]
_ArrayDisplay($aGegeben) -
Ich versteh dich nicht. Der letzte Parameter hat doch einen ganz anderen Grund!
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Local $hGui = GUICreate("Test", 500, 500, 700, 100)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()Local $hProcMsgBox = DllCallbackRegister("CbtHookProcMsgBox", "int", "int;int;int")
[/autoit] [autoit][/autoit] [autoit]
Local $TIDMsgBox = _WinAPI_GetCurrentThreadId()
Local $hHookMsgBox = _WinAPI_SetWindowsHookEx($WH_CBT, DllCallbackGetPtr($hProcMsgBox), 0, $TIDMsgBox)Local $iRet = MsgBox(2, "Can't close with 'X'", "But you can activate the GUI")
[/autoit] [autoit][/autoit] [autoit]
Local $iRet = MsgBox(6, "Can close with 'X'", "And you can activate the GUI")
Local $iRet = MsgBox(6, "Can close with 'X'", "And you can NOT activate the GUI", 0, $hGui)_WinAPI_UnhookWindowsHookEx($hHookMsgBox)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
DllCallbackFree($hProcMsgBox)#region Just for fun!!
[/autoit] [autoit][/autoit] [autoit]
;##########################################################
Func CbtHookProcMsgBox($nCode, $wParam, $lParam)
Local $RET = 0, $hBitmap = 0, $xWnd = 0
Local $sButtonText
If $nCode < 0 Then
$RET = _WinAPI_CallNextHookEx($hHookMsgBox, $nCode, $wParam, $lParam)
Return $RET
EndIf
Switch $nCode
Case 5 ;5=HCBT_ACTIVATE
For $i = 3 To 5
$sButtonText = _WinAPI_GetDlgItemText($wParam, $i)
Switch $sButtonText
Case "A&bbrechen"
_WinAPI_SetDlgItemText($wParam, $i, "Abort")
Case "Wieder&holen"
_WinAPI_SetDlgItemText($wParam, $i, "Retry")
Case "&Ignorieren"
_WinAPI_SetDlgItemText($wParam, $i, "Ignore")
EndSwitch
Next
EndSwitch
Return
EndFunc ;==>CbtHookProcMsgBoxFunc _WinAPI_SetDlgItemText($hDlg, $nIDDlgItem, $lpString)
[/autoit] [autoit][/autoit] [autoit]
Local $aRet = DllCall('user32.dll', "int", "SetDlgItemText", _
"hwnd", $hDlg, _
"int", $nIDDlgItem, _
"str", $lpString)
Return $aRet[0]
EndFunc ;==>_WinAPI_SetDlgItemTextFunc _WinAPI_GetDlgItemText($hDlg, $nIDDlgItem)
[/autoit] [autoit][/autoit] [autoit]
Local $aRet = DllCall('user32.dll', "int", "GetDlgItemText", _
"hwnd", $hDlg, _
"int", $nIDDlgItem, _
"str", "", _
"int", 50)
Return $aRet[3]
EndFunc ;==>_WinAPI_GetDlgItemText;##########################################################
[/autoit]
#endregion Just for fun!! -
Ich dachte du kommst selber drauf! Das hat mit dem Handle aber nichts zu tun!Spoiler anzeigen
[autoit]MsgBox(1, "", "Die Buttons sind 'OK und Abbrechen'" & @CRLF & "Diese MsgBox kann ich über 'X' schließen")
[/autoit]
MsgBox(2, "", "Die Buttons sind 'Abbrechen , Wiederholen und Ignorieren'" & @CRLF & "Diese MsgBox kann ich nicht über 'X' schließen")
MsgBox(3, "", "Die Buttons sind 'Ja, Nein und Abbrechen'" & @CRLF & "Diese MsgBox kann ich über 'X' schließen")
MsgBox(4, "", "Die Buttons sind 'Ja und Nein'" & @CRLF & "Diese MsgBox kann ich nicht über 'X' schließen")
MsgBox(5, "", "Die Buttons sind 'Wiederholen und Abbrechen'" & @CRLF & "Diese MsgBox kann ich über 'X' schließen")
MsgBox(6, "", "Die Buttons sind 'Abbrechen , Wiederholen und Weiter'" & @CRLF & "Diese MsgBox kann ich über 'X' schließen") -
Also schonmal echt super name22 und funkey. Nur bei dem von funkey kann ich es mit dem X nicht schliessen. Ansonsten würde ich das doch gleich nehmen

Dass man die MsgBox nicht schließen kann, liegt doch nur am Flag!!!
Bedenke aber, mit meiner Methode musst du alle Strings für alle möglichen Sprachen im Skript mit einschließen, sonst funktioniert es auf z.B. einem brasilianischen WinXP nicht. Wenn du aber das Flag selber abfragst und dementsprechend weißt, was in den Buttons stehen soll, dann kannst du natürlich das Skript universaler gestalten. -
Hab es nicht fertig ausprogrammiert, aber hier mal ein gangbarer Weg, um von deutsch nach englisch zu kommen:
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]Local $hProcMsgBox = DllCallbackRegister("CbtHookProcMsgBox", "int", "int;int;int")
[/autoit] [autoit][/autoit] [autoit]
Local $TIDMsgBox = _WinAPI_GetCurrentThreadId()
Local $hHookMsgBox = _WinAPI_SetWindowsHookEx($WH_CBT, DllCallbackGetPtr($hProcMsgBox), 0, $TIDMsgBox)Local $iRet = MsgBox(34, "Select example", "Please select the skin you want to try")
[/autoit] [autoit][/autoit] [autoit]_WinAPI_UnhookWindowsHookEx($hHookMsgBox)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
DllCallbackFree($hProcMsgBox)#region Just for fun!!
[/autoit] [autoit][/autoit] [autoit]
;##########################################################
Func CbtHookProcMsgBox($nCode, $wParam, $lParam)
Local $RET = 0, $hBitmap = 0, $xWnd = 0
Local $sButtonText
If $nCode < 0 Then
$RET = _WinAPI_CallNextHookEx($hHookMsgBox, $nCode, $wParam, $lParam)
Return $RET
EndIf
Switch $nCode
Case 5 ;5=HCBT_ACTIVATE
For $i = 3 To 5
$sButtonText = _WinAPI_GetDlgItemText($wParam, $i)
Switch $sButtonText
Case "A&bbrechen"
_WinAPI_SetDlgItemText($wParam, $i, "Abort")
Case "Wieder&holen"
_WinAPI_SetDlgItemText($wParam, $i, "Retry")
Case "&Ignorieren"
_WinAPI_SetDlgItemText($wParam, $i, "Ignore")
EndSwitch
Next
EndSwitch
Return
EndFunc ;==>CbtHookProcMsgBoxFunc _WinAPI_SetDlgItemText($hDlg, $nIDDlgItem, $lpString)
[/autoit] [autoit][/autoit] [autoit]
Local $aRet = DllCall('user32.dll', "int", "SetDlgItemText", _
"hwnd", $hDlg, _
"int", $nIDDlgItem, _
"str", $lpString)
Return $aRet[0]
EndFunc ;==>_WinAPI_SetDlgItemTextFunc _WinAPI_GetDlgItemText($hDlg, $nIDDlgItem)
[/autoit] [autoit][/autoit] [autoit]
Local $aRet = DllCall('user32.dll', "int", "GetDlgItemText", _
"hwnd", $hDlg, _
"int", $nIDDlgItem, _
"str", "", _
"int", 50)
Return $aRet[3]
EndFunc ;==>_WinAPI_GetDlgItemText;##########################################################
[/autoit]
#endregion Just for fun!! -
Du hast in die 'inc.au3' einfach eine Funktion ausgelagert, in der Variablen vorhanden sind, die erst später erstellt werden.
Du könntest die Datei erst includen, wenn es die Variablen gibt, oder besser, du übergibst der Funktion alle nötigen Variablen, sodass keine globalen Variablen mehr aufgerufen werden. -
-
Im englischen Forum gibt es bereits eine MIDI-UDF (http://www.autoitscript.com/forum/topic/37…post__p__274785).
Hab mir die Unterschiede der beiden UDFs aber nicht angeschaut.Auf jeden Fall kann man damit tolle Sachen machen!
Spoiler anzeigen
[autoit]#include <Misc.au3>
[/autoit] [autoit][/autoit] [autoit]Global $hWinmm_dll = DllOpen("winmm.dll")
[/autoit] [autoit][/autoit] [autoit]
Global $open = _midiOutOpen(0)For $i = 27 To 87
[/autoit] [autoit][/autoit] [autoit]
_midiOutShortMsg($open, 0x99 + ($i * 256) + (127 * 0x10000))
Sleep(200)
Next_midiOutClose($open)
[/autoit] [autoit][/autoit] [autoit]
DllClose($hWinmm_dll)Func _midiOutOpen($devid = 0, $callback = 0, $instance = 0, $flags = 0)
[/autoit] [autoit][/autoit] [autoit]
Local $ret = DllCall($hWinmm_dll, "long", "midiOutOpen", "uint*", 0, "int", $devid, "ptr", $callback, "ptr", $instance, "ptr", $flags)
If Not @error Then
Return $ret[1]
Else
Return SetError(1, 0, $ret[0])
EndIf
EndFunc ;==>_MidiOutOpenFunc _midiOutClose($hmidiout)
[/autoit] [autoit][/autoit] [autoit]
Local $ret = DllCall($hWinmm_dll, "long", "midiOutClose", "long", $hmidiout)
If Not @error Then Return $ret[0]
EndFunc ;==>_MidiOutCloseFunc _midiOutShortMsg($hmidiout, $msg)
[/autoit] [autoit][/autoit] [autoit][/autoit]
Local $ret = DllCall($hWinmm_dll, "long", "midiOutShortMsg", "ptr", $hmidiout, "dword", $msg)
If Not @error Then Return $ret[0]
EndFunc ;==>_MidiOutShortMsg -
-
Auch von mir noch alles Gute zur Geburt deines Sohnes!
Auf die kommenden schlaflosen Nächte!
-
Bilder kannst du hier im Forum direkt anhängen, aber du kannst auch z.B. abload.de verwenden um die Bilder hochzuladen.
Außerdem würde auch der Text des Summary-Registers gleich gut weiterhelfen wie ein Screenshot. -
Danke Sprenger, hab's jetzt installiert. (Nachdem ich das ganze mit Code:Blocks kompiliert und getestet habe und zu dem gleichen Ergebnis wie du gekommen bin.
Komisch ist nur, dass auch ohne :cdecl die Funktion aufgerufen wurde und die DLL eine Ausgabe in die Scite Konsole machen konnte. Deswegen bin ich nicht gleich darauf gekommen. -
Ich kann es leider nicht testen, da bei mir mind. MSVCP100D.dll fehlt.
Was aber auffällt: In der DLL wurde 'char filename' deklariert und in AutoIt 'str'. Ich denke du brauchst 'char* ' oder 'LPCSTR' in der DLL. -
Hatte da auch mal was gebastelt: Runde Buttons
-
Ich bin mir nicht sicher, ob die Animation überhaupt abgeschaltet werden kann.

-
Das dachte ich auch zuerst, ging aber nicht bei mir.
Aber Greenhorn's und meine Variante funktionieren. -
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>$hGui = GUICreate("Gui", 260, 100, -1, -1, $WS_POPUP, $WS_EX_COMPOSITED)
[/autoit] [autoit][/autoit] [autoit]
$hShow = GUICtrlCreateButton("einblenden", 45, 50, 150, 20)
GUISetState()While 1
[/autoit] [autoit][/autoit] [autoit]
$Msg = GUIGetMsg()Switch $Msg
[/autoit]
Case $GUI_EVENT_CLOSE
Exit
Case $hShow
GUISetStyle($GUI_SS_DEFAULT_GUI)
$aPos = WinGetPos($hGui)
$hRegn = _WinAPI_CreateRectRgn(0, 0, $aPos[2], $aPos[3])
_WinAPI_SetWindowRgn($hGui, $hRegn)
_WinAPI_RedrawWindow($hGui, 0, $hRegn, BitOR($RDW_INVALIDATE, $RDW_FRAME))
EndSwitch
WEnd -