explorerpl Posted October 29, 2015 Posted October 29, 2015 It's been long enough since I started looking for a solution, so I post this with a clear conscious. I am developing an application that would render keystrokes and click on the screen, much like KeyCastr on Mac OS. I did this once in the past. Back then I faced with the same problem - making a nice semitransparent window. I solved it by using Adobe AIR for the interface and Visual Basic for the data. VB was the server capturing the keystrokes and mouse events and passing them via TCP over localhost to Adobe AIR (compiled to exe). This solution worked quite ok. I even tried reviving it few hours before posting it with no success.Important note - this is NOT a keylogger, though it shares some core functionality with such application. I do not ask for tips on capturing keyboards events (though if someone could post something useful I'd be grateful). These are some posts that I've found on the forum:https://www.autoitscript.com/forum/topic/137618-two-questions-about-layered-gui/#comment-963975https://www.autoitscript.com/forum/topic/102961-multiple-png-images-as-gui-elements/https://www.autoitscript.com/forum/topic/47651-png-as-gui-drop-shadows-curved-edges-you-name-it/https://www.autoitscript.com/forum/topic/102920-advanced-gui-udf-design/https://www.autoitscript.com/forum/topic/157841-gui-fun/#comment-1144334https://www.autoitscript.com/forum/topic/140053-just-the-text/#comment-983400and even more...The reason for not using an existing application is that there aren't many for windows, they look ugly, and they do not behave the way I need them too.I've tried these approaches, but I'm either to stupid to understand them fully or I'm simply missing something. The main problem that I'm having is having the window transparent and displaying a label with text on top of it. As you know regular controls will not be transparent. I figured out that making a child window (transparent) on top of the parent transparent window might be the solution (I figured it out myself before finding some posts about it so I'm pretty proud of myself :)). Still... even if I do so the text is not anti-aliased and simply looks ugly.I could really use an example code that creates a window that has a PNG as a background with a nice label on top that has drop shadow (two labels? one black for the shadow and one white for the text). The window should also be dragable with a mouse.Here's a video with my old app running (start watching from 0:50): https://www.youtube.com/watch?v=C7fSpZntpfAHere's a similar application called KeyPose: http://jungsbluth.de/magnus/blog/keypose/keypose.htmlAt some point I thought I'd just create a flash object on my window and make it transparent (I've seen this done even back in Windows 98). The difficulty here is that it's not a binary transparency, but a 32bpc one - real, smooth alpha channel like in a PNG, which is what most of the code I've seen is doing. Unfortunately I wasn't able to check that code, because I fail to create the Shockwave.Shockwave.11 object. I've installed the Flash player and the Shockwave player manually, registered the OCX, but no success.TL;DRHonestly - the solution to all my problems and problems other users are having would be replicating the behavior of such apps, that take an SWF and make a windowless EXE out of them. Just take a look at the attached file. Please note that the BG is semi-transparent, the labels are anti-aliased with a drop shadow. This is my old solution using Adobe AIR (Flash). I'd like to replicate that as closely as possible.I really hope some good soul will help me with this.Thank you.
Moderators Melba23 Posted October 29, 2015 Moderators Posted October 29, 2015 explorerpl,I do not ask for tips on capturing keyboards events (though if someone could post something useful I'd be grateful). Good, because if the thread does stray into that area it will be closed - and anyone posting such code will be sanctioned.M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
explorerpl Posted October 29, 2015 Author Posted October 29, 2015 Good, because if the thread does stray into that area it will be closed - and anyone posting such code will be sanctioned.I've noticed I fully understand the policy, though hooking into system events is a valid programming skill and it would be nice to have some examples and have them stripped out of "keylogging" functionality but have them close enough so that a smart person can figure it out. Still - that wouldn't help me I'm not that smart, that's why I need help, but not with keylogging. I'm solving one problem at a time The solution to my problem (which essentially is creating a nice antialiased text on transparent background) seems so close with all the examples on the forum, yet I can't figure it out. Examples I've seen use a binary transparency (based on one color) which causes nasty edges. 8 bit transparency like with PNG and Layered Windows) use PNG's and that's great, but doesn't help me either.At some point I was thinking about painting the PNG "in memory" (no files required) and then passing the resulting image as a "fake PNG" to use along with the Layered Windows examples. Again - this is to complex for my brain.As for Adobe AIR it seems this is exactly what they are doing to create these nice transparent windows. How else could they do that? There's no single color to be set as transparent, the SWF that is being displayed can be anything and it works. If someone could figure out how to do that we all would be saved and eternaly happy creating out GUIs in Adobe Flash, publish them to SWF, and then put them in out AutoIt apps.But again... The bottom line is that I need a nice antialiased text, with a shadow, on a semi transparent window with rounded corners.Anyone?
explorerpl Posted November 3, 2015 Author Posted November 3, 2015 Ok. I think I'm done. I've seen people asking for good keyboard and mouse hooks UDF's, but due to forum policy such a thing (especially a keyboard hook) would constitute a KeyLogger. Just as mentioned above in this thread my project is NOT a keylogger though it shares many of such application characteristics. Would it be ok if I posted my compiled project so that others could also use it instead of a keylogger UDF? The app sends what it captures to localhost over TCP connection. No source code.
Moderators Melba23 Posted November 3, 2015 Moderators Posted November 3, 2015 explorerpl,Would it be ok if I posted my compiled project so that others could also use it instead of a keylogger UDF? The app sends what it captures to localhost over TCP connection. No source code.You are joking? At least I do hope so. There is no way can you post something that.M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
explorerpl Posted November 3, 2015 Author Posted November 3, 2015 Just wanted to make sure It's somewhat strange to me that while there are examples in the AutoIt documentation on how to do global keyboard hookds it's not considered ethical to post usage of that on the forum. But whatever you say. Don't want to piss anyone off.
UEZ Posted November 3, 2015 Posted November 3, 2015 Here something similar which I had created in the past without text and buttons:expandcollapse popup;coded by UEZ 2013 #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GDIPlus.au3> Global Const $SC_DRAGMOVE = 0xF012 Global Const $iW = 300, $iH = 200 _GDIPlus_Startup() ;text x y text color font font size Global $aText[6][6] = [ [ "Windows Translucent GUI", 10, 12, 0xFFFFFFFF, "Arial", 18 ], _ [ "Connection port:", 10, 80, 0xFFFFFFFF, "Arial", 11 ], _ [ "80", 150, 80, 0xFFFFFFFF, "Arial", 11 ], _ [ "Connection status:", 10, 100, 0xFFFFFFFF, "Arial", 11 ], _ [ "offline", 150, 100, 0xFFFF8080, "Arial", 12 ], _ [ "Coded by UEZ 2015 ;-)", 10, 150, 0xFFFFFFFF, "Comic Sans MS", 15 ]] ; x y w h bmp handle Global $aButtons[2][5] = [ [ 230, 150, 24, 24, _GDIPlus_BitmapCreateFromMemory(_Nok2_24x24png()) ], _ [ 260, 150, 24, 24, _GDIPlus_BitmapCreateFromMemory(_Ok2_24x24png()) ]] Global Const $hGUI = GUICreate("", $iW, $iH, -1, -1, $WS_POPUP, $WS_EX_LAYERED) ;must be set before _GDIPlus_CreateCurvedTranslucentPanel Global Const $aReturn = _GDIPlus_CreateCurvedTranslucentPanel($aText, $aButtons, 0xE04576B2, 0x509FBADC, $iW, $iH) GUISetState() _WinAPI_BitmapSetTransparent($hGUI, $aReturn[0]) GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN") Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE _GDIPlus_BitmapDispose($aReturn[0]) _GDIPlus_Shutdown() GUIDelete($hGUI) Exit Case $aReturn[1] ;cancel MsgBox(0, "Info", "Cancel was pressed") Case $aReturn[2] ;ok MsgBox(0, "Info", "Ok was pressed") EndSwitch Until False Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam) _SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) EndFunc ;==>_WM_LBUTTONDOWN Func _GDIPlus_CreateCurvedTranslucentPanel($aText, $aButtons, $iColorBG, $iColorFrame, $iW, $iH, $iRadiusCorner = 20, $bTextShadow = True) ;build 2015-11-03 by UEZ Local Const $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) Local Const $hCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetSmoothingMode($hCtxt, 2) _GDIPlus_GraphicsSetInterpolationMode($hCtxt, 7) _GDIPlus_GraphicsSetPixelOffsetMode($hCtxt, 2) _GDIPlus_GraphicsSetTextRenderingHint($hCtxt, 5) Local Const $hPath = _GDIPlus_PathCreate() Local Const $hPath_Shape = _GDIPlus_PathCreate() Local $iPenSize = 2 _GDIPlus_PathAddArc($hPath, $iW - ($iRadiusCorner * 2), 0, $iRadiusCorner * 2, $iRadiusCorner * 2, 270, 90) _GDIPlus_PathAddArc($hPath, $iW - ($iRadiusCorner * 2), $iH - ($iRadiusCorner * 2), $iRadiusCorner * 2, $iRadiusCorner * 2, 0, 90) _GDIPlus_PathAddArc($hPath, 0, $iH - ($iRadiusCorner * 2), $iRadiusCorner * 2, $iRadiusCorner * 2, 90, 90) _GDIPlus_PathAddArc($hPath, 0, 0, $iRadiusCorner * 2, $iRadiusCorner * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath) Local $iColorBG2 = BitAND(0xFF000000, $iColorBG) + BitAND(0x00FF0000, $iColorBG) - 0x200000 + BitAND(0x0000FF00, $iColorBG) - 0x2000 + BitAND(0x000000FF, $iColorBG) - 0x20 Local $hBrush_Bg = _GDIPlus_LineBrushCreate($iW / 2, 0, $iW / 2, $iH, $iColorBG2, $iColorBG) _GDIPlus_GraphicsFillPath($hCtxt, $hPath, $hBrush_Bg) Local $hBrush_Shape = _GDIPlus_LineBrushCreate($iW / 2, $iH / 5 + 7, $iW / 2, 0, $iColorFrame, 0xA0FFFFFF) _GDIPlus_PathAddArc($hPath_Shape, 0, 0, $iRadiusCorner * 2, $iRadiusCorner * 2, 180, 90) _GDIPlus_PathAddArc($hPath_Shape, $iW - ($iRadiusCorner * 2), 0, $iRadiusCorner * 2, $iRadiusCorner * 2, 270, 90) _GDIPlus_PathAddLine($hPath_Shape, 0, $iRadiusCorner, 0, $iH / 5) _GDIPlus_PathAddLine($hPath_Shape, 0, $iH / 5, $iW / 2, $iH / 5 + 7) _GDIPlus_PathAddLine($hPath_Shape, $iW, $iH / 5, $iW, $iRadiusCorner) _GDIPlus_PathCloseFigure($hPath_Shape) _GDIPlus_GraphicsFillPath($hCtxt, $hPath_Shape, $hBrush_Shape) Local $hPen = _GDIPlus_PenCreate(0xF0000000 + $iColorFrame, $iPenSize) _GDIPlus_GraphicsDrawPath($hCtxt, $hPath, $hPen) _GDIPlus_PathReset($hPath) Local $i, $hBrush, $hFamily, $hFormat, $tLayout Local $hBrush_Shadow = _GDIPlus_BrushCreateSolid(0xFF101010) For $i = 0 To UBound($aText) - 1 $hBrush = _GDIPlus_BrushCreateSolid($aText[$i][3]) ;color $hFamily = _GDIPlus_FontFamilyCreate($aText[$i][4]) ;font $hFormat = _GDIPlus_StringFormatCreate() _GDIPlus_StringFormatSetAlign($hFormat, 0) ;alignment $tLayout = _GDIPlus_RectFCreate($aText[$i][1] + $aText[$i][5] / 8, $aText[$i][2] + $aText[$i][5] / 8) _GDIPlus_PathAddString($hPath, $aText[$i][0], $tLayout, $hFamily, 0, $aText[$i][5], $hFormat) _GDIPlus_GraphicsFillPath($hCtxt, $hPath, $hBrush_Shadow) ;draw shadow _GDIPlus_PathReset($hPath) $tLayout = _GDIPlus_RectFCreate($aText[$i][1], $aText[$i][2]) _GDIPlus_PathAddString($hPath, $aText[$i][0], $tLayout, $hFamily, 0, $aText[$i][5], $hFormat) _GDIPlus_GraphicsFillPath($hCtxt, $hPath, $hBrush) _GDIPlus_PathReset($hPath) _GDIPlus_BrushDispose($hBrush) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) Next Local $aReturn[UBound($aButtons) + 1] $aReturn[0] = $hBitmap For $i = 0 To UBound($aButtons) - 1 _GDIPlus_GraphicsDrawImageRect($hCtxt, $aButtons[$i][4], $aButtons[$i][0], $aButtons[$i][1], $aButtons[$i][2], $aButtons[$i][3]) _GDIPlus_ImageDispose($aButtons[$i][4]) $aReturn[$i + 1] = GUICtrlCreateLabel("", $aButtons[$i][0], $aButtons[$i][1], $aButtons[$i][2], $aButtons[$i][3]) Next _GDIPlus_PathDispose($hPath) _GDIPlus_PathDispose($hPath_Shape) _GDIPlus_PenDispose($hPen) _GDIPlus_BrushDispose($hBrush_Bg) _GDIPlus_BrushDispose($hBrush_Shape) _GDIPlus_BrushDispose($hBrush_Shadow) _GDIPlus_GraphicsDispose($hCtxt) Return $aReturn EndFunc ;==>_GDIPlus_CreateCurvedTranslucentPanel Func _WinAPI_BitmapSetTransparent($hGUI, $hImage, $iOpacity = 0xFF) Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend $hScrDC = _WinAPI_GetDC(0) $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap) $tSize = DllStructCreate($tagSIZE) $pSize = DllStructGetPtr($tSize) DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage)) DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage)) $tSource = DllStructCreate($tagPOINT) $pSource = DllStructGetPtr($tSource) $tBlend = DllStructCreate($tagBLENDFUNCTION) $pBlend = DllStructGetPtr($tBlend) DllStructSetData($tBlend, "Alpha", $iOpacity) DllStructSetData($tBlend, "Format", 1) _WinAPI_UpdateLayeredWindow($hGUI, $hMemDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA) _WinAPI_ReleaseDC(0, $hScrDC) _WinAPI_SelectObject($hMemDC, $hOld) _WinAPI_DeleteObject($hBitmap) _WinAPI_DeleteDC($hMemDC) EndFunc ;==>_WinAPI_BitmapSetTransparent ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2015-09-19 Func _Nok2_24x24png($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Nok2_24x24png $Nok2_24x24png &= 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAABzpAAAc6QHh0LjlAAAFfUlEQVRIiYWWX2hbVxLGf+dKWDWKrJRYSuLIJVFCtFuZQLsPtpsGTO04pfQp1JSExSkJCwFTSltvk4fmqQ8l7D40gRKHPnm9mBaVFNqH4KQtBTe4gppiGpOVG0qwLNeSLNfXsixfSefOPpwospP9MzDc0WjON/PNnXvOUSLCNhHxoJQLSCmbjS1PTp5ev3nzeO2rrw6rfD4IINGo7T1xYm5HX9/t1hdeGPfv2ZMCFCIWSumtcGpbAtf1YFm6XCjsT4+NfVB5++2BnX19vuCJE/ieeQaPzweVCrpQwEmlsG/eZDWVcpquXk20nzp1qbm19UEd48kEpnKdSyb/vNDVNbLvtdf84fPnRR044CKi2NxUlMuKchkcR3AcoVgUmZuzcqOjKgOlyPj4+XBn5z/rWI0EDx2Z27eHC/39f/vDtWtuU3+/i9YeWV1VamMDNjfBcczzoUqlgtJa2NzUlelp61+JhLVrYuKv+/r7/17HVK7repRSOptMDma7ukY7xsZqVleXJSsrltrYgGrVAJbLjSTlMlQqxl5fN4lc13Xn5927N254d09Nndnd1fUPcV2PEhHK+fyhe+HwdPzy5Rbfyy+7FAoWjmMAbBtqNdAa6kyqVVhdNerzGV+pBOA6v/5qzW5srP3x22//1BwO37cA0onEpbYjR1p8nZ01WVy0sG34/XfI5eC556C5GdJpKBaNzs1BNAqDg3D/Piwvg20j2azlCwRqbbOzLekvvrgEoIqLi/EHbW3J+JUrfnXwoLC6qqhUYG0Nenuho8NUev06/PKLYfHss/DmmxAMwnffwblzsHevSa61SC6nZsPh0v5btzqt5WRyIAh+tWuXlmxWsbYGS0vQ3W3AtYadO+HMGchmTUuGhgy41tDTAx99BHfugOMguZxSgYAOzs76l3/8ccBb+v773vaTJ6FUUsq2zaJ79+DBA2hvN5VpDXv2wMcfg9cLTz9tfB6Pac/XX5tRX1lB5fPg86kgkJ6a6vX8xXEu7z140O956ikoFhUzM/DZZzA9DfPz8OKL0NICIoZJIGBsyzLgFy7AyAhEIoY5wNoaClTW621mBqq1s2dFLlwQOXnSfBWhkEg0auxXXhFJp0VERLQ2KiKyuChy6pSJqcdu0RrITChUtQAz1+k03LgBoRDk843tIxg0rXhcajUoFIxdqTz5f11+OnYs5/T0iDz/vPuogkjEPM+eFcnnTcWuK4+kziKT2c66wcB1QH7q6clx9+LFSduA6m2Bb73VAK/VGm2pt6vuy2RMIVvXRiLaBrl78eKk5e/u/sYGaGoy214gYKgdOwatrdun5b33zIguLRmf1tDWBsePmzWBAALg94sN+Lu7v6GYycR/jsfX3YfUtrXoyy9NlbmcyBtvNFowMGDYiJiYrWt6elz3pZfk51hsvZjJxBERUiMjo7+BSCxWdesgdbqJhMjwcGNa6kBDQyKffrot1n31VZF33qn+BpK6dm304U4tbGSzh6aPHLE3QyGRUEg/8bJDoYZd/731pUYihuGHH+rN11+X6WjU3shmD4kIuFp7RISlqanBGRAdj1clFNKPmESj28Hq4HXf0aPivv++yPXrWr/7bnUGZGlqalBEcLX2ICKI63pEhIWJieEZECca1RKLVQXcR4ke12hU3KEhkU8+cWVsrOoMDekZkIVbt4a3Yv7nI/PcuZF9s7P+cCgkKhBwqVQUoPD7FQcOQEeHcPiwsGOHyPy8lRsfV5mVlVLk88//y5H5+KGfz+9PJxIfVK5eHdiZSvmCgO/oUTzRKOzejfZ6cRYWsCcmWM3nnaYrVxLtp0//n0O/LluvLUtLseVk8vT6nTvHa5OTh9UPP5hrSyxme/v65nb09t5u7e7+n9eWfwNJOhRLmn3GvAAAAABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($Nok2_24x24png) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Nok2_24x24.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Nok2_24x24png Func _Ok2_24x24png($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Ok2_24x24png $Ok2_24x24png &= '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' $Ok2_24x24png &= 'q/EHl86Mnv3wcOOdxk08FI3lD/b40N+P8Pf7r5TWPv16Pl3YacuM6koVyBoZtDIRCDpxh4V2LXqwcP/irdvXTkx9MvkB57wEL3hi6K8UAYjZj/a2ebuLfu8LGcfZZqpUSQlJO2pXqtXqxOS9u6OMB2OcIwRP4gX/t7b8DwlNcnxkhYu3AAAAAElFTkSuQmCC' Local $bString = _WinAPI_Base64Decode($Ok2_24x24png) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Ok2_24x24.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Ok2_24x24png Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode Parsix 1 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
explorerpl Posted November 7, 2015 Author Posted November 7, 2015 Wow! Thanks UEZ. Once again you save the day. I have already completed the project using Adobe AIR and AutoIt, but your code will most certainly come in handy. I'm using TCP to get the applications talking, though I can only make a one way connection, but that's luckily enough. Now I'm struggling with an unfortunate memory leak. To bad I can't post the code so that someone could help me with the project. I'm an educator and the tool is designed to show all my keyboard shourcuts and mouse button combinations, but it does without a doubt a keylogger in nature.Thanks again for your code.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now