指定されたウィンドウプロシージャにメッセージ情報を渡します。
#Include <WinAPI.au3>
_WinAPI_CallWindowProc($lpPrevWndFunc, $hWnd, $Msg, $wParam, $lParam)
パラメータ
$lpPrevWndFunc | 前のウィンドウプロシージャへのポインタ この値が$iIndexパラメータに$GWL_WNDPROC、$DWL_DLGPROCを設定した_WinAPI_GetWindowLong関数の呼び出しによって得られたものである場合、 実際にはウィンドウのアドレス、ダイアログボックスプロシージャ、または_WinAPI_CallWindowProcでだけ有効な特別な内部値のいずれかです |
$hWnd | メッセージを受け取るウィンドウプロシージャのハンドル |
$Msg | メッセージを指定します |
$wParam | 追加メッセージ固有の情報を指定します。このパラメータの内容はMsgパラメータの値に依存します |
$lParam | 追加メッセージ固有の情報を指定します。このパラメータの内容はMsgパラメータの値に依存します |
返し値
メッセージ処理の結果を指定し、送信メッセージに依存する返し値を返します。
注意
_WinAPI_CallWindowProc関数はウィンドウをサブクラス化するために使用します。
関連
DllCallbackRegister, _WinAPI_SetWindowLong
こちらも参照
MSDNライブラリでCallWindowProcを検索して下さい。
例
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GuiMenu.au3>
#include <WinAPI.au3>
Opt('MustDeclareVars', 1)
Global $ContextMenu, $CommonMenuItem, $FileMenuItem, $ExitMenuItem
Global $hGui, $cInput, $wProcOld
_Main()
Func _Main()
Local $cInput2, $wProcNew, $DummyMenu
$hGui = GUICreate("Type or paste some stuff", 400, 200, -1, -1, $WS_THICKFRAME, -1)
$cInput = GUICtrlCreateInput("", 20, 20, 360, 20)
$cInput2 = GUICtrlCreateInput("", 20, 50, 360, 20)
GUICtrlCreateLabel("abcd", 1, 1, 30, 18)
GUICtrlSetCursor(-1, 9)
$wProcNew = DllCallbackRegister("_MyWindowProc", "ptr", "hwnd;uint;long;ptr")
$wProcOld = _WinAPI_SetWindowLong(GUICtrlGetHandle($cInput), $GWL_WNDPROC, DllCallbackGetPtr($wProcNew))
_WinAPI_SetWindowLong(GUICtrlGetHandle($cInput2), $GWL_WNDPROC, DllCallbackGetPtr($wProcNew))
;_WinAPI_SetWindowLong(GUICtrlGetHandle($cInput3), $GWL_WNDPROC, DllCallbackGetPtr($wProcNew))など
$DummyMenu = GUICtrlCreateDummy()
$ContextMenu = GUICtrlCreateContextMenu($DummyMenu)
$CommonMenuItem = GUICtrlCreateMenuItem("Common", $ContextMenu)
$FileMenuItem = GUICtrlCreateMenuItem("File", $ContextMenu)
GUICtrlCreateMenuItem("", $ContextMenu)
$ExitMenuItem = GUICtrlCreateMenuItem("Exit", $ContextMenu)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
EndFunc ;==>_Main
Func do_clever_stuff_with_clipboard($hWnd)
Local $sData
$sData = ClipGet()
If @error Then Return 0; クリップデータはテキストではないか、クリップは空
; 何かおこなう
$sData = StringUpper($sData)
; テキスト設定
GUICtrlSetData(_WinAPI_GetDlgCtrlID($hWnd), $sData);or _GUICtrlEdit_SetText($hWnd, $sData)
Return 1
EndFunc ;==>do_clever_stuff_with_clipboard
; 与えられたGUIウィンドウの与えられたGUIコントロールに属するメニューを表示
Func ShowMenu($hWnd, $nContextID)
Local $iSelected = _GUICtrlMenu_TrackPopupMenu(GUICtrlGetHandle($nContextID), $hWnd, -1, -1, -1, -1, 2)
Switch $iSelected
Case $CommonMenuItem
ConsoleWrite("Common" & @CRLF)
Case $FileMenuItem
ConsoleWrite("File" & @CRLF)
Case $ExitMenuItem
ConsoleWrite("Exit" & @CRLF)
EndSwitch
EndFunc ;==>ShowMenu
Func _MyWindowProc($hWnd, $uiMsg, $wParam, $lParam)
Switch $uiMsg
Case $WM_PASTE
Return do_clever_stuff_with_clipboard($hWnd)
Case $WM_CONTEXTMENU
If $hWnd = GUICtrlGetHandle($cInput) Then
ShowMenu($hGui, $ContextMenu)
Return 0
EndIf
Case $WM_SETCURSOR
GUICtrlSetCursor(_WinAPI_GetDlgCtrlID($hWnd), 5); Iビームカーソルを設定
Return 1; デフォルトのウィンドウプロシージャにメッセージを処理させない
EndSwitch
; 制御しないメッセージをデフォルトのウィンドウプロシージャに渡す
Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $uiMsg, $wParam, $lParam)
EndFunc ;==>_MyWindowProc