Sign in to follow this  
Followers 0
dwhiting

WINAPI_DrawText

7 posts in this topic

In this script, I have successfully got it to display the text on screen. The only thing I cannot get it to do is remove the text. The text remains onscreen after the script exits. It does not disappear until I refresh the screen or open a new window. I thought the Redraw line would do this for me but is not working. I hope someone can tell me how to remove the text from the screen without having to refresh or open a new window.

Thanks.

#Include<StructureConstants.au3>

#Include <WinAPI.au3>

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#include <FontConstants.au3>

$hDC = _WinAPI_GetDC(0);Gets handle of entire screen

_WinAPI_SetTextColor($hDC, "0x0000FF");Sets color of text

$bkmode = DllCall("GDI32.dll", "int", "SetBkMode", "hwnd", $hDC, "int", "TRANSPARENT");Sets background of text to Transparent

$font = _WinAPI_CreateFont(50,15);Creates a font 50 pixels high and 15 pixels/character wide

_WinAPI_SelectObject($hDC, $font);Selects newly created font

$sText = "Hello world, this is my test message!";Sets actual message to be displayed.

$rect = DllStructCreate($tagRECT);Creates region where text is to be displayed.

DllStructSetData($rect,1,0)

DllStructSetData($rect,2,0)

DllStructSetData($rect,3,1280)

DllStructSetData($rect,4,50)

$iFlags = "$DT_CENTER";Sets how text is positioned in region.

_WinAPI_DrawText($hDC, $sText, $rect, $DT_RIGHT);Draws the text

sleep(1000);Waits 1 second

_WinAPI_RedrawWindow("","","",$RDW_UPDATENOW);Should repaint the entire screen to remove the text but does not work.

Share this post


Link to post
Share on other sites



Just use _WinAPI_GetDesktopWindow() and some more flags :P

_WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(),"","",BitOR($RDW_INVALIDATE,$RDW_UPDATENOW,$RDW_FRAME,$RDW_ALLCHILDREN))


*GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes

Share this post


Link to post
Share on other sites

Just use _WinAPI_GetDesktopWindow() and some more flags :P

_WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(),"","",BitOR($RDW_INVALIDATE,$RDW_UPDATENOW,$RDW_FRAME,$RDW_ALLCHILDREN))

Awesome, thank you very much.

Share this post


Link to post
Share on other sites

Awesome, thank you very much.

Hi, you helped me with my DrawText problem and clearing it off the screen. I now have a new problem. I can't seem to get drawtext to show up over video. Here is my script again. I am just using it to display date and time while watching movies. Do you know how I can get it to work when full screen video is playing?

Thank you again.

#Include<StructureConstants.au3>

#Include <WinAPI.au3>

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#include <FontConstants.au3>

#include <date.au3>

Opt("TrayIconHide", 1)

$hDC = _WinAPI_GetDC(0);Gets handle of entire screen

_WinAPI_SetTextColor($hDC, "0x0000FF");Sets color of text

$bkmode = DllCall("GDI32.dll", "int", "SetBkMode", "hwnd", $hDC, "int", "TRANSPARENT");Sets background of text to Transparent

$font = _WinAPI_CreateFont(80,25,0,0,1500);Creates a font 50 pixels high and 15 pixels/character wide

_WinAPI_SelectObject($hDC, $font);Selects newly created font

$sText = _Now ( );Sets actual message to be displayed.

$rect = DllStructCreate($tagRECT);Creates region where text is to be displayed.

DllStructSetData($rect,1,1340)

DllStructSetData($rect,2,20)

DllStructSetData($rect,3,2440)

DllStructSetData($rect,4,100)

$iFlags = $DT_LEFT;Sets how text is positioned in region.

_WinAPI_DrawText($hDC, $sText, $rect, $iFlags);Draws the text

sleep(10000);Waits 1 second

$hwnd = _WinAPI_GetDesktopWindow();Gets Desktop Handle

_WinAPI_RedrawWindow($hwnd,"","",BitOR($RDW_INVALIDATE,$RDW_UPDATENOW,$RDW_FRAME,$RDW_ALLCHILDREN)) ;Clears the TEXT

Share this post


Link to post
Share on other sites

dwhiting

Example:

#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <FontConstants.au3>

Global Const $TRANSPARENT = 1
Global Const $OPAQUE = 2

HotKeySet("{ESC}", "_Exit")

$string = "Hello world!"

$hDC = DllCall("User32.dll", "hwnd", "GetDC", "hwnd", 0)
$hDC = $hDC[0]

$tRECT = DllStructCreate("dword[4]")

DllStructSetData($tRECT, 1, 5, 1)
DllStructSetData($tRECT, 1, 5, 2)
DllStructSetData($tRECT, 1, 250, 3)
DllStructSetData($tRECT, 1, 50, 4)

Global $hFont = DllCall("gdi32.dll", "hwnd", "CreateFont", "int", 50, "int", 0, _
                       "int", 0, "int", 0, "int", 400, "dword", BitAND(0, 2), _
                       "dword", BitAND(0, 4), "dword", BitAND(0, 8), "int", $DEFAULT_CHARSET, _
                       "int", $OUT_DEFAULT_PRECIS, "int", $CLIP_DEFAULT_PRECIS, "int", $DEFAULT_QUALITY, "int", 0, _
                       "str", "Arial")
                       
$hFont = $hFont[0]

DllCall("gdi32.dll", "int", "SetTextColor", "hwnd", $hDC, "int", 0x0000FF)

DllCall("gdi32.dll", "int", "SetBkColor", "hwnd", $hDC, "int", 0x000000)

Local $OldFont = _WinAPI_SelectObject($hDC, $hFont)

While 1
    _DrawText()
    Sleep(10)
WEnd

_Exit()

Func _DrawText()
    ;DllCall("gdi32.dll", "int", "SetBkMode", "hwnd", $hDC, "int", $TRANSPARENT)
    
    DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $string, "int", StringLen($string), _
            "ptr", DllStructGetPtr($tRECT), "int", $DT_CENTER)
EndFunc
    
Func _Exit()
    _WinAPI_SelectObject($hDC, $OldFont)
    _WinAPI_DeleteObject($hFont)
    _WinAPI_ReleaseDC("", $hDC)
    _WinAPI_InvalidateRect(0, 0)
    Exit
EndFunc

Share this post


Link to post
Share on other sites

dwhiting

Example:

rasim I converted your example to use all possible standard WinAPI functions:

#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <FontConstants.au3>

Global Const $TRANSPARENT = 1
Global Const $OPAQUE = 2

Global $tRECT, $hFont, $OldFont, $hDC 

HotKeySet("{ESC}", "_Exit")

$tRECT = DllStructCreate("dword[4]")
DllStructSetData($tRECT, 1, 5, 1)
DllStructSetData($tRECT, 1, 5, 2)
DllStructSetData($tRECT, 1, 250, 3)
DllStructSetData($tRECT, 1, 50, 4)

$hDC = _WinAPI_GetDC(0)
$hFont = _WinAPI_CreateFont(50, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
            $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial')
$OldFont = _WinAPI_SelectObject($hDC, $hFont)

_WinAPI_SetTextColor($hDC, 0x0000FF)
_WinAPI_SetBkColor($hDC, 0x000000)

While 1
    _DrawText("Hello world!")
    Sleep(100)
WEnd

Func _DrawText($string)
    ;DllCall("gdi32.dll", "int", "SetBkMode", "hwnd", $hDC, "int", $TRANSPARENT)
    _WinAPI_DrawText($hDC, $string, $tRECT, $DT_CENTER)
EndFunc
    Func _Exit()
    _WinAPI_SelectObject($hDC, $OldFont)
    _WinAPI_DeleteObject($hFont)
    _WinAPI_ReleaseDC(0, $hDC)
    _WinAPI_InvalidateRect(0, 0)
    Exit
EndFunc

Share this post


Link to post
Share on other sites

Zedna

I converted your example to use all possible standard WinAPI functions

Ok, my laziness :P

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0