Jump to content



Photo

MsgBox anywhere on the screen


  • Please log in to reply
7 replies to this topic

#1 eltorro

eltorro

    more or less the same as the latter of the former.

  • Active Members
  • PipPipPipPipPipPip
  • 596 posts

Posted 01 July 2006 - 08:02 AM

Edit: this script is obsolete as there are ways to do this without the dll.

see here.


Necessity is the Mother of invention.
Example of using Larry's hook.dll to hook a MsgBox and move it anywhere on the screen. Call the _MsgBoxAu3() function the same as a regular MsgBox but with extra params for x,y,w,h
AutoIt         
;------------------------------------------------------------------------------ ; ; AutoIt Version: 3.1.1++ ; Language:       English ; Description:    Functions to move a message box ; Author:            eltorro <steve@ocotillo.sytes.net> ; ------------------------------------------------------------------------------ #Compiler_AU3Check_Parameters= -q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w 7 ;Au3Check parameters Opt("MustDeclareVars", 1) Opt("WinTitleMatchMode", 2) ;=============================================================================== Global $DLLinst, $hhCBT Global $dll Global $MbRect[5] ;index 0 is for hwnd, 1-4 are left, top, width, height ;=============================================================================== Const $WH_CBT = 5;window message to catch Const $HCBT_SETFOCUS = 0x1400 + 0x1A30 Const $HCBT_ACTIVATE = 0x1400 + 0x1A31;hook this one Const $HCBT_CREATEWND = 0x1400 + 0x1A32 Const $HCBT_DESTROYWND = 0x1400 + 0x1A33 Const $HCBT_MINMAX = 0x1400 + 0x1A34 ;=============================================================================== $dll = @ScriptDir & "\hook.dll" ; Where did that dll go???? If Not FileExists($dll) Then     MsgBox(266288, "Error", "This example requires hook.dll." & @LF & _             "Please correct the path in the script if you have the dll.")     Exit EndIf ;=============================================================================== ; Put message boxes at different places on the screen. For $i = 0 To 50 Step 10     _MsgBoxAu3(4096, "MsgBoxMove", "Msgbox #" & $i, 3, ($i * 10) , ($i * 10), 200+ ($i * 10), 100+ ($i * 10)) Next Exit ;=============================================================================== Func OnAutoItExit()     DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hhCBT[0])     DllCall("kernel32.dll", "int", "FreeLibrary", "hwnd", $DLLinst[0]) EndFunc   ;==>OnAutoItExit ;=============================================================================== ; ; Function Name:   _MsgBoxAu3() ; Description:        Displays a MsgBox at the specified point ; Parameter(s):     $sFlag  Standard message box flags ;                    $sTitle The title of the message box. ;                    $sText  The text of the message box ;                    $iTime  The optional timeout ;                    $x=0    The top pos ;                    $y=0    The left pos ;                    $w=0     The width ;                    $h=0     The heighth ; Requirement(s):  hook.dll and beta see post [url="http://www.autoitscript.com/forum/index.php?showtopic=23173"]http://www.autoitscript.com/forum/index.php?showtopic=23173[/url] ; Return Value(s): The return of the msgbox or 0 on failure ; Author(s):       eltorro <steve@ocotillo.sytes.net> ; ;=============================================================================== Func _MsgBoxAu3($iFlag, $sTitle, $sText, $iTime = 0, $x = 0, $y = 0, $w = 0, $h = 0)     Local $cbtHOOKproc     Local $ret = 0     $DLLinst = DllCall("kernel32.dll", "hwnd", "LoadLibrary", "str", $dll)     $cbtHOOKproc = DllCall("kernel32.dll", "hwnd", "GetProcAddress", "hwnd", $DLLinst[0], "str", "CBTProc")     $hhCBT = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", $WH_CBT, _             "hwnd", $cbtHOOKproc[0], "hwnd", $DLLinst[0], "int", 0)     ;**** Create a dummy window for the hook.  Couldn't get this to work with Desktop hwnd.     Local    $gui = GUICreate("") ;little hack     DllCall($dll, "int", "SetValuesCBT", "hwnd", $gui, "hwnd", $hhCBT[0])     If @error Then         MsgBox(266288, "Error", "There was an erro with hook.dll." & @LF & "Exiting application now.")         Exit     EndIf         GUIRegisterMsg($HCBT_ACTIVATE, "_MsgBoxMove")     $MbRect[0] = 0     $MbRect[1] = $x     $MbRect[2] = $y     $MbRect[3] = $w     $MbRect[4] = $h     If $iTime Then         $ret = MsgBox($iFlag, $sTitle, $sText, $iTime)     Else         $ret = MsgBox($iFlag, $sTitle, $sText)     EndIf     ;----- Release Hook and Library.     DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hhCBT[0])     DllCall("kernel32.dll", "int", "FreeLibrary", "hwnd", $DLLinst[0])     GUIDelete($gui) ; delete dummy window.     Return $ret EndFunc   ;==> _MsgBoxAu3 ;=============================================================================== ; ; Function Name:   _MsgBoxMove ; Description:      GuiRegister function ; Parameter(s):     $hWndGUI     The Window handle of the GUI in which the message appears. ;                     $MsgID        The Windows message ID. ;                     $WParam        The first message parameter as hex value ;                    $LParam        The second message parameter as hex value. ; Requirement(s): ; Return Value(s): ; Author(s): ; ;=============================================================================== Func _MsgBoxMove($hWndGUI, $MsgID, $WParam, $LParam)     Local $rc, $n, $buffer     $n += 1     If $n > 25 Then         $n = 25         $buffer = StringTrimLeft($buffer, StringInStr($buffer, @LF))     EndIf     $buffer &= "CBT: " & $hWndGUI & "," & $MsgID & "," & $WParam & "," & $LParam & @LF     ToolTip($buffer)     if    $MsgId = $HCBT_CREATEWND Then Sleep(10000)     If $MsgID = $HCBT_ACTIVATE Then         If $MbRect[0] = 0 Then             $rc = DllStructCreate("int;int;int;int")             DllCall("user32.dll", "int", "GetWindowRect", "hwnd", $WParam, "ptr", DllStructGetPtr($rc))             If $MbRect[3] = 0 Then $MbRect[3] = DllStructGetData($rc, 3) - DllStructGetData($rc, 1)             If $MbRect[4] = 0 Then $MbRect[4] = DllStructGetData($rc, 4) - DllStructGetData($rc, 2)             DllCall("user32.dll", "int", "MoveWindow", "hwnd", $WParam, "int", $MbRect[1], "int", $MbRect[2], "int", $MbRect[3], "int", $MbRect[4], "int", True)             $MbRect[0] = $WParam         EndIf     EndIf     $rc = 0     ;Return $GUI_RUNDEFMSG EndFunc   ;==>_MsgBoxMove

Regards,

eltorro

Edit: added hyperlink to Larry's hook topic.

Edited by eltorro, 09 May 2007 - 06:33 AM.








#2 SmOke_N

SmOke_N

    It's not what you know ... It's what you can prove!

  • Moderators
  • 15,729 posts

Posted 01 July 2006 - 08:23 AM

Really nice job eltorro!

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.


#3 eltorro

eltorro

    more or less the same as the latter of the former.

  • Active Members
  • PipPipPipPipPipPip
  • 596 posts

Posted 01 July 2006 - 03:19 PM

Really nice job eltorro!


Thanks :D

#4 WTS

WTS

    Polymath

  • Active Members
  • PipPipPipPip
  • 247 posts

Posted 01 July 2006 - 04:10 PM

pretty cool eltorrro



I think this should be the path?

$dll = @ScriptDir & "\hook.dll"; Where did that dll go????


#5 eltorro

eltorro

    more or less the same as the latter of the former.

  • Active Members
  • PipPipPipPipPipPip
  • 596 posts

Posted 01 July 2006 - 04:26 PM

pretty cool eltorrro



I think this should be the path?

$dll = @ScriptDir & "\hook.dll"; Where did that dll go????

If that's where you have it. :D

#6 Valuater

Valuater

    www.PayFreeWireless.com

  • MVPs
  • 11,078 posts

Posted 01 July 2006 - 04:36 PM

Nice... added to Autoit Wrappers also

8)

Posted Image

Clic The Pic!!!


#7 eltorro

eltorro

    more or less the same as the latter of the former.

  • Active Members
  • PipPipPipPipPipPip
  • 596 posts

Posted 01 July 2006 - 05:11 PM

Nice... added to Autoit Wrappers also

8)


Great!

@ everyone,
Thanks needs to go to Larry for his dll. As without it... well, the script doesn't work.

Thanks Larry :D

Edited by eltorro, 01 July 2006 - 05:11 PM.


#8 busysignal

busysignal

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 348 posts

Posted 17 July 2006 - 04:30 AM

Great work with the dll hooking. The example worked great.. Thanks Larry & eltorro..

Cheers.. :D




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users