Grüßt euch erstmal,
ich möchte mit _WinAPI_SetWindowSubclass ( $hWnd, $pSubclassProc, $ID [, $pData = 0] ) ein structure übergeben. Komischerweise kann ich den Inhalt nur korrekt auslesen, wenn
Zitat$iMsg = 135 And $iwParam = 0 And $ilParam = 0
ist. Wenn ich das COnsoleWrite außerhalb der Abfrage setze, liest er komische ASCII Zeichen oder so aus. Außerdem stürzt er ab, sobald ich mit dem Cursor ins ComboBox Feld komme. Hat jemand eine Idee, wieso ich nur mit diesen bestimmten Bedingungen das structure korrekt auslesen kann?
#include <WinAPIShellEx.au3>
#include <GUIConstantsEx.au3>
#include <GuiComboBox.au3>
OnAutoItExitRegister('OnAutoItExit')
[/autoit][autoit][/autoit][autoit]; Create GUI
Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'))
Local $hCombo = _GUICtrlComboBox_Create($hForm, "", 2, 2, 396, 296)
; Register DLL callback that will be used as window subclass procedure
Local $hDll = DllCallbackRegister('_SubclassProc', 'lresult', 'hwnd;uint;wparam;lparam;uint_ptr;dword_ptr')
Local $pDll = DllCallbackGetPtr($hDll)
Local $hDll2 = DllCallbackRegister('_SubclassProc2', 'lresult', 'hwnd;uint;wparam;lparam;uint_ptr;dword_ptr')
Local $pDll2 = DllCallbackGetPtr($hDll2)
; Install window subclass callback
_WinAPI_SetWindowSubclass($hForm, $pDll, 1000, 0)
GUISetState(@SW_SHOW)
[/autoit][autoit][/autoit][autoit]Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func _SubclassProc($hWnd, $iMsg, $iwParam, $ilParam, $ID, $pData)
#forceref $ID, $pData
Local $Array[3] = ["test", "hallo", "gih"]
Local $struct = _WinAPI_ArrayToStruct($Array)
_WinAPI_SetWindowSubclass($hCombo, $pDll2, 1001, DllStructGetPtr($struct))
Return _WinAPI_DefSubclassProc($hWnd, $iMsg, $iwParam, $ilParam)
EndFunc ;==>_SubclassProc
Func _SubclassProc2($hWnd, $iMsg, $iwParam, $ilParam, $ID, $pData)
#forceref $ID, $pData
If $iMsg = 135 And $iwParam = 0 And $ilParam = 0 Then
Local $struct1 = DllStructCreate("wchar[5];wchar[6];wchar[4];wchar[1]", Ptr($pData))
ConsoleWrite("$iMsg: " & $iMsg & " $iwParam: " & $iwParam & " $ilParam: " & $ilParam & " data1: " & DllStructGetData($struct1, 1) & " data2: " & DllStructGetData($struct1, 2) & " data3: " & DllStructGetData($struct1, 3) & @CRLF)
EndIf
Return _WinAPI_DefSubclassProc($hWnd, $iMsg, $iwParam, $ilParam)
EndFunc ;==>_SubclassProc
Func OnAutoItExit()
_WinAPI_RemoveWindowSubclass($hForm, $pDll, 1000)
_WinAPI_RemoveWindowSubclass($hCombo, $pDll2, 1001)
DllCallbackFree($hDll)
DllCallbackFree($hDll2)
EndFunc ;==>OnAutoItExit
Edit: Klappt auch mit
Zitat$iMsg: 132 $iwParam: 0 $ilParam: 21627917 data1: test data2: hallo data3: gih
Irgendwas stimmt da nicht...