Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/19/2017 in all areas

  1. Automate all windows and browser applications with one UDF function library. Based on the microsoft automation API this library high level supports Recognition of conttrols from EDGE, Chrome, FF, Opera, Safari and Windows native apps Small testing framework to split object repository from coding away Introduction Quickstart - Getting started quickly Simple scripts With this module you can automate all applications/programs that support ui automation and/or accesibility api from microsoft you can recognize more controls than AutoIT can recognize "out of the box" you can use concepts from other testing frameworks like http://download.freedesktop.org/ldtp/doc/ldtp-tutorial.pdf http://safsdev.sourceforge.net/Default.htm coded ui testing from microsoft Some of those controls / applications are chrome browser (partly mainwindow has to be done with MSAA for navigating) chrome://accessibility in the adress bar of chrome or start with "--force-renderer-accessibility" silverlight controls Ribbon control controlbars of Excel/Word IE and FF browsers Windows Media Player Windows clock AFX .. controls (partly) .... Based on the initial AIO Object I now have made the interface file to work with objCreateInterface function which is in the latest beta's automate clicking and querying basic information It gives you a lot of basic information to be able to automate clicking, querying basic information where it goes further in certain situations than AutoIt is identifying Starting threads for background on the ui automation api of microsoft (not for starters) http://en.wikipedia.org/wiki/Microsoft_UI_Automation http://msdn.microsoft.com/en-us/library/ms747327.aspx Previous threads in general help/support Interface AutoItObject IUIAutomation ObjCreateInterface and struct tagPoint in method ElementFromPoint Be aware that API is not allways installed under XP/Vista see http://support.microsoft.com/kb/971513 Within Windows 7 and Windows 8 it should be preinstalled by default. Be aware on 32 and 64 bits way of running your script #AutoIt3Wrapper_UseX64=Y or N Basic example of usage / showing and retrieving the default information, will post multiple examples later Hover your mouse to an area of interest and press ctrl+w and information will be shown in the edit box of the form Simple spy demo (see simplespy.au3 or use latest ZIP attachment for latest version) Main features Recognize windows and html controls for the major browsers Logical and physical description for controls (UI mapping, Application map) Simple repository logic to abstract logical and physical descriptions Store Runtime Type Information in RTI. variables Rubberbanding/highlighting of objects Simple spy to help in making / identifying the physical description Support of regular expression(s) in identifying objects recognize objects on multiple properties supported properties: name ,title, automationid, classname, class, iaccessiblevalue, iaccessiblechildId, controltype, processid, acceleratorkey The actions provided so far "leftclick", "left", "click", "leftdoubleclick", "leftdouble", "doubleclick", _ "rightclick", "right", "rightdoubleclick", "rightdouble", _ "middleclick", "middle", "middledoubleclick", "middledouble", "mousemove", "movemouse" "setvalue","settextvalue" "setvalue using keys" "setValue using clipboard" "getvalue" "sendkeys", "enterstring", "type", "typetext" "invoke" "focus", "setfocus", "activate" "close" "move","setposition" "resize" "minimize", "maximize", "normal", "close", "exist", "exists" "searchcontext", "context" "highlight" "getobject","object" "attach" "capture","screenshot", "takescreenshot" "dump", "dumpthemall" "propertyvalue", "property" match on multiple properties like: name:=((Zoeken.*)|(Find.*)); ControlType:=Button; acceleratorkey:=Ctrl+F Support for 117 different properties see $UIA_propertiesSupportedArray in uiawrappers like for example title, regexptitle, class, regexpclass, iaccessiblevalue, iaccessiblechildid, name, accesskey, automationid, classname IAccessible, IAccessible2, ISimpleDom interfaces debuglogging to a file log.txt (no output in scitewindow) Examples Example 1 Iterating thru the different ways of representing the objects in the tree (#comment-1105548) Example 2 Finding the taskbar and clicking on the start menu button (#comment-1105680) Example 3 Clicking a litlle more and in the end displaying all items from the clock (thats not directly possible with AU3Info) (#comment-1108849) Example 4 that demonstrates the calculator Example 5 Automating chrome Example 6 Demonstrates all stuff within chrome to navigate html pages, find hyperlink, click hyperlink, find picture, click picture, enter data in inputbox Example 7 The chrome example modified to a firefox example Example 8 The other major browser Internet Explorer automated (made on Example 6 and 7) Example 9 Windows media player Example 10 Automating mach 3 (AFX windows and other hard to get recognized by AutoIT) Lot of links are broken due to forum upgrade just search for the text like "Example 11 Demonstrate Word, Notepad and Calculator actions" Example 11 Demonstrate Word, Notepad and Calculator actions ... Example 13 Details 1 about the right pane of the windows explorer Example 14 Details 2 about the right pane of the windows explorer Example 15 Details 3 about the right pane of the windows explorer Example 16 Details 4 about the right pane of the windows explorer Example 17 Details 5 about the right pane of the windows explorer WITH CACHING Example 18 Details 6 about the right pane of the windows explorer WITH VIRTUAL ITEMS Example 19 Eventhandling examples Example 20 Eventhandling examples Example 21a Eventhandling examples Internet Explorer Example 21b Eventhandling examples Internet Explorer Example 22 Eventhandling examples Follow focus Example 23 Eventhandling examples structure changed Example 24 Eventhandling examples IUIAutomationEventHandler Example 25 SAFEARRAYS Example 26 IACCESSIBLE / MSAA Example 27 IACCESSIBLE2 / MSAA Example 28 IACCESSIBLE / MSAA events Example 29 IACCESSIBLE2 events Example 30 ISimpleDOM Example 31 Notepad window move, maximize, minimize Example 32 Three browsers doing the same stuff with small differences in scripting only .. TODO Build recorder Enhance the spy with a nicer UI UI for the repository (now in the script with dot notation) Enhance mapping / identifying on multiple properties instead of 1 combined with index If speed becomes an issue use the caching logic of the MS UIA framework Add the other patterns later Generalize the concept of System Under Test of starting the SUT (for testing framework purposes) Remote running of scripts Fix issue on finding within dynamic context ... edit august 18th 2013 initial post Only zip files are needed to download , just unzip in 1 directory edit july 2016 Made V0_63 and examples works with AutoIt v3.3.14 Windows 10 tested Simple spy gives some basic code as a present Chrome latest versions seems to be having issues with IUIAutomation on tabs/buttons of mainwindow use MSAA for accessing tabsheets / buttons more cleanup to be in UDF style More comments in the source see changelog.txt for previous changes edit september 2017 All examples fixed for the IE, Firefox and Chrome browser Some small but essential fixes in UIAWrappers edit april 2018 Enhanced logic on fallback / dynamic search, still not perfect, to slow Retested with latest Chrome, FF, Edge and IE11 and some extensions to show how to get text from the webpage (examples 5,6,7) Some small bugfixes Some comments as given in forum incorporated edit may 2019 Speed enhancements on especially fallback searching UIA.CFG works now in a better way to turn on/off debug, highlighting, debug2file More stable and consistent behavior Internal cleanup and refactoring of bigger functions Checked with W10 (not tested on W7) Added some W10 properties Run with 3.3.14.5 on W10 UIA_V0_51.zip EXAMPLES_V0_5.zip UIA_V0_63.zip EXAMPLES_V0_63.zip UIA_V0_64.zip EXAMPLES_V0_64.zip EXAMPLES_V0_66.zip UIA_V0_66.zip EXAMPLES_V0_70.zip UIA_V0_70.zip
    1 point
  2. @All This version covers... CLR Cleanup : 1. Fix the CRL_CreateObject to be CLR_CreateObject : Done (- Name change I will up to you guys, I don't mind either way) 6. Cleanup of clr.au3 (no debugging messages) : Done Including the correction of the error in post 88 7. Combine the examples see also point 14 below, 14 Example : Done Questions and Documentation: To Do CLRv1.zip
    1 point
  3. Sometimes I like to solve the problem elegantly. More often I need to solve it quickly. That is when the BFI methods come in to play. BFI - Brute Force and Ignorance. "Git er Done"
    1 point
  4. In many windows boxes you can use the TAB key to move between input fields. So you might be back to the SEND("{TAB 5}") idea.
    1 point
  5. Can you use : Send("{Down 20}") to move the cursor/selection down 20 times? put whatever number if lines/menu items in you need instead of the 20.
    1 point
  6. Thanks, it helped kill a couple of hours lol I kind of want to redo the syntax and make it exactly like a regular autoit conditional statement. Like SleepUntil("TimerDiff($iTimer) >= 2000 and Not $bRunning") And I started doing this, but it got very complex. What if the conditional statement start with a variable instead of a function? How do I parse a string like that? I tried looking into how to make your own language to see how they execute something like this, but it looks very complex and time consuming. Maybe in the future. I tried to make it a bit forgiving in the syntax too. I did mix function call syntax (Func = TimerDiff and Func: ConsoleWrite3Times). That should work for |Args = {Arg1}| and |Args: {Arg1}| or even just doing |{Arg1}, {Arg2}| That's why I went with the Regular Expression to capture the valid function characters (_a-zA-Z0-9). And then validate the function before going into the While loop.
    1 point
  7. or just read $i #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <MsgBoxConstants.au3> Example() Func Example() GUICreate("ListView Item Deletion", 400, 500) Local $idListview = GUICtrlCreateListView("Col 1 |Col 2 |Col 3 ", 10, 10, 380, 480, $LVS_SHOWSELALWAYS) GUISetState(@SW_SHOW) For $i = 0 To 9 GUICtrlCreateListViewItem("Native Item " & $i & "|Item " & "-1|Item " & "-2", $idListview) Next ;For $i = 10 To 20 ; _GUICtrlListView_AddItem($idListview, "UDF Item " & $i, -1, 1000 + $i) ; _GUICtrlListView_AddSubItem($idListview, $i, "Item " & $i & "-1", 1) ; _GUICtrlListView_AddSubItem($idListview, $i, "Item " & $i & "-2", 2) ;Next ; Pass the controlID of a native-created ListView to delete both native- and UDF-created Items ;MsgBox($MB_SYSTEMMODAL, "Delete item", "Deleting UDF-created Item 12") ;_GUICtrlListView_DeleteItem($idListview, 12) ;~ MsgBox($MB_SYSTEMMODAL, "Single", "Deleting native-created Item 9") For $i = 0 To 8 $read = GUICtrlRead($i) Sleep(100) _GUICtrlListView_DeleteItem($idListview, $read) ConsoleWrite(@error) Next ; Loop until the user exits While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd ; Delete the previous GUI and all controls. GUIDelete() EndFunc ;==>Example
    1 point
  8. I dont really know your condition to delete LV items so here's what I've got. #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <MsgBoxConstants.au3> Example() Func Example() $GUI = GUICreate("ListView Item Deletion", 400, 500) $INPUT = GUICtrlCreateInput("", 10, 10, 100, 20) $button = GUICtrlCreateButton("Delete", 115, 10, 50, 20) $button1 = GUICtrlCreateButton("Load", 175, 10, 50, 20) Local $idListview = GUICtrlCreateListView("Col 1 |Col 2 |Col 3 ", 10, 75, 380, 480, $LVS_SHOWSELALWAYS) GUISetState(@SW_SHOW) For $i = 0 To 9 $lv = GUICtrlCreateListViewItem("Native Item " & $i & "|Item " & "-1|Item " & "-2", $idListview) Next ;For $i = 10 To 20 ; _GUICtrlListView_AddItem($idListview, "UDF Item " & $i, -1, 1000 + $i) ; _GUICtrlListView_AddSubItem($idListview, $i, "Item " & $i & "-1", 1) ; _GUICtrlListView_AddSubItem($idListview, $i, "Item " & $i & "-2", 2) ;Next ; Pass the controlID of a native-created ListView to delete both native- and UDF-created Items ;MsgBox($MB_SYSTEMMODAL, "Delete item", "Deleting UDF-created Item 12") ;_GUICtrlListView_DeleteItem($idListview, 12) ; Loop until the user exits While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $button $read = GUICtrlRead($INPUT) _GUICtrlListView_DeleteItem($idListview, $read) Case $button1 _GUICtrlListView_DeleteAllItems($idListview) For $i = 0 To 9 $lv = GUICtrlCreateListViewItem("Native Item " & $i & "|Item " & "-1|Item " & "-2", $idListview) Next EndSwitch WEnd ; Delete the previous GUI and all controls. GUIDelete() EndFunc ;==>Example
    1 point
  9. Subz

    Re-Number in txt file

    What about: #include <Array.au3> Local $x = 1, $sFindData = 'datatofindall="1"' Local $sFileName = @ScriptDir & "\Filename.txt" Local $aFileName = FileReadToArray($sFileName) Local $hFileOpen = FileOpen(@ScriptDir & "FileData.txt", 2) _ArrayDisplay($aFileName, "Before") For $i = 0 To UBound($aFileName) - 1 If StringInStr($aFileName[$i], $sFindData) Then $aFileName[$i] = StringReplace($aFileName[$i], $sFindData, StringReplace($sFindData, "1", $x)) $x += 1 EndIf FileWrite($hFileOpen, $aFileName[$i] & @CRLF) Next FileClose($hFileOpen) _ArrayDisplay($aFileName, "After")
    1 point
  10. Tekk

    deleting listview item

    For $i = _GUICtrlListView_GetItemCount($idListview) - 2 To 0 Step - 1 _GUICtrlListView_DeleteItem($idListview, $i) Next or Local $nItems = _GUICtrlListView_GetItemCount($idListview) _DeleteRange($idListview, 0, $nItems - 1) Func _DeleteRange($idListview, $nStart, $nCount) _GUICtrlListView_BeginUpdate($idListview) While $nCount > 0 _GUICtrlListView_DeleteItem($idListview, $nStart) $nCount -= 1 WEnd _GUICtrlListView_EndUpdate($idListview) EndFunc
    1 point
  11. Subz

    Re-Number in txt file

    Another way: #include <Array.au3> Local $x = 1, $sFindData = 'datatofindall="' Local $sFileName = @ScriptDir & "\Filename.txt" Local $aFileName = FileReadToArray($sFileName) Local $hFileOpen = FileOpen(@ScriptDir & "FileData.txt", 2) _ArrayDisplay($aFileName, "Before") For $i = 0 To UBound($aFileName) - 1 If StringInStr($aFileName[$i], $sFindData) Then $aFileName[$i] = $sFindData & $x & '"' $x += 1 EndIf FileWrite($hFileOpen, $aFileName[$i] & @CRLF) Next FileClose($hFileOpen) _ArrayDisplay($aFileName, "After")
    1 point
  12. jchd

    Re-Number in txt file

    Something like that? $s = _StringRepeat('datatofindall="1"' & @CRLF, 12) ConsoleWrite("Before" & @LF & $s & @LF) $s = Execute('"' & StringRegExpReplace($s, '"\d+"', '""" & _Incr() & """') & '"') ConsoleWrite("After" & @LF & $s) Func _Incr() Static $n = 0 $n +=1 Return $n EndFunc
    1 point
  13. Tekk

    deleting listview item

    To delete a range of items you need to do so in reverse order or else when you delete item one, item two becomes the new item one and so on. For $i = 8 To 0 Step -1 _GUICtrlListView_DeleteItem($idListview, $i) Next
    1 point
  14. 1 point
  15. Hey Deye, that's great! First time ever someone published a mod for one of my scripts. Glad to hear you find CodeCrypter useful, and apologies for the original list of encryptable sections not being satsifactory. When I have a spare moment, I'll have a good look at your amendation and see if (with your permission of course; I presume you'd have no objection) I can incorporate it into the next release (this may be a while though; just started a new project and I'm slightly drowning at the moment). In the meantime, thanks a lot for sharing.
    1 point
  16. @Khyzha not sure if this will help you more: I did compiled it this way. Kind of something funny but it worked. #include <File.au3> Global $ifile = @ScriptDir & "\Filename.txt" $countline = _FileCountLines($ifile) For $i = 1 to $countline $line = FileReadLine($ifile, $i) $sString = StringReplace($line, " ", "") _FileWriteToLine($ifile,$i,$sString,True) For $a = 1 to $countline $aline = FileReadLine($ifile, $a) $sString = StringReplace($aline, " ", "") _FileWriteToLine($ifile,$a,$sString,True) $aString = StringLeft($aline, 1) For $o = 1 to $aString If $aString <> "7" Then $insert = FileReadLine($ifile, $aString) _FileWriteToLine($ifile, $aString, $insert&"-",True) EndIf Next Next Next From text file: 79 09386007913 7909386111337 7909386222194 7 909 29 9990302 790929993 7390 7890182354540 909173571078 ; Not 7 in start 7909299152663 909386106395 ; Not 7 in start 7909386183839 Output is this: 7909386007913 7909386111337 7909386222194 7909299990302 7909299937390 7890182354540 909173571078---- ; inserted with "----" 7909299152663 909386106395---- ; inserted with "----" 7909386183839 Anyway, since you have found your path then good luck! KS15
    1 point
  17. I'm sure this should be $ColG = $oExcel.Rows("2:10") $ColG.RowHeight = 41.43
    1 point
  18. Use the RowHeight property of the row.
    1 point
  19. Can you post your Filename.txt file, I used your example above and it worked fine. Can you also specify which version of AutoIt you have?
    1 point
  20. So, the major issue here is going to be whether or not the server IP and port are in fact internet accessible. Is the "server" in the cloud/accessible from the internet as far as you know? If the "server" sits behind a firewall (i.e. via business or home ISP), the firewall will need to be configured to pass traffic to the server (i.e. port forwarding/triggering, DMZ, etc.)
    1 point
  21. Added in a debug messagebox...just set the checks, and then close the box, and it will set the INI...it's setting the ini with the state, and not with True/False for checked/unchecked Example() Func Example() $hGUI = GUICreate("Example", 1800, 900) $idClose1 = GUICtrlCreateButton("Close", 1750,850) For $i = 0 To 23 Assign("b"&$i, GUICtrlCreateCheckbox($i, 10, 30 + (20 * $i), 65, 17)) Next GUISetState(@SW_SHOW, $hGUI) $idMsg = GUIGetMsg() MsgBox(1,1,"set the checkboxes") For $i = 0 To 23 If GuiCtrlRead(Eval("b"&$i)) = $GUI_CHECKED Then Assign("v"&$i,2) Assign("bs" & $i, GUICtrlRead(Eval("b" & $i))) IniWrite("Config.txt","Section1","sec" & $i,Eval("bs"&$i)) Next GUIDelete($hGUI) EndFunc
    1 point
  22. I'm only going to be able to guess what you are trying to do...Too many syntax errors up there...not efficient to keep passing around the same values to new variables either, but I kept it as you provided it: Example() Func Example() $hGUI = GUICreate("Example", 1800, 900) $idClose1 = GUICtrlCreateButton("Close", 1750,850) For $i = 0 To 23 Assign("b"&$i, GUICtrlCreateCheckbox($i, 10, 30 + (20 * $i), 65, 17)) Next GUISetState(@SW_SHOW, $hGUI) $idMsg = GUIGetMsg() For $i = 0 To 23 If GuiCtrlRead(Eval("b"&$i)) = $GUI_CHECKED Then Assign("v"&$i,2) Assign("bs" & $i, GUICtrlRead(Eval("b" & $i))) IniWrite("Config.txt","Section1","sec" & $i,Eval("bs"&$i)) Next GUIDelete($hGUI) EndFunc
    1 point
  23. JLogan3o13

    VMware

    @jdelaney one of these days I am going to sit down and devote the time to a native UDF for PowerCLI, would be such a great addition.
    1 point
  24. Another way: $s = "79 09386007913" & @CRLF & _ " 7909386111337" & @CRLF & _ "7909386222194 " & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "7 909 29 9990302" & @CRLF & _ "790929993 7390 " & @CRLF & _ "" & @CRLF & _ " 7890182354540" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "7909173571078" & @CRLF & _ "7909299152663" & @CRLF & _ "7909386106395" & @CRLF & _ "7909386183839" ConsoleWrite(StringRegExpReplace(StringRegExpReplace($s,"\h",""),"\v+",@CRLF) & @CRLF)
    1 point
  25. Try something like: #include <Array.au3> Local $sFileName = @ScriptDir & "\Filename.txt" Local $aFileName = FileReadToArray($sFileName) _ArrayDisplay($aFileName) For $i = UBound($aFileName) - 1 To 0 Step - 1 If StringStripWS($aFileName[$i], 8) = "" Then _ArrayDelete($aFileName, $i) ContinueLoop EndIf $aFileName[$i] = StringStripWS($aFileName[$i], 8) If StringLeft($aFileName[$i], 1) <> "7" Then $aFileName[$i] = "----" & $aFileName[$i] Next _ArrayDisplay($aFileName)
    1 point
  26. The function _FileCopy already exists so there is no need for the other function for example: #include <GUIConstantsEx.au3> $Form1 = GUICreate("Form1", 380, 169, 192, 154) $Button1 = GUICtrlCreateButton("Copy", 72, 88, 177, 57) $idSource = GUICtrlCreateInput(@ScriptFullPath, 24, 8, 313, 21) $idTarget = GUICtrlCreateInput(@ScriptDir & "\ScriptCopy\", 24, 40, 313, 21) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $button1 $sSource = GUICtrlRead($idSource) $sTarget = GUICtrlRead($idTarget) If FileExists($sSource) = 0 Or $sTarget = "" Then ContinueLoop _FileCopy($sSource, $sTarget) EndSwitch WEnd Func _FileCopy($sCopySource,$sCopyTargetDir) Local $FOF_RESPOND_YES = 16 Local $FOF_SIMPLEPROGRESS = 256 If Not FileExists($sCopyTargetDir) Then DirCreate($sCopyTargetDir) $winShell = ObjCreate("shell.application") $winShell.namespace($sCopyTargetDir).CopyHere($sCopySource,$FOF_RESPOND_YES) EndFunc
    1 point
  27. Hi RTFC, With some help I got from Melba Here I have added to the "Encryptable Code Sections" GUI a filter where you can easily find the functions you want as selected It was real eye pain for me to find the functions I needed ,and so .. Hope you don't mind me sharing the edits I have included in with codecrypter-mod.au3 Thanks
    1 point
  28. Can you give an example, I replaced the MsgBox with RunWait("Notepad.exe") and it worked fine. Also regards your OP if you used the following it should also work, the issue previously is that you were reading ToolTip which just returned 0. #include <Array.au3> #include <Date.au3> Global $infotime timer() Func timer () $sTime = _DateAdd("s", 30, _NowCalc()) $aTime = StringSplit($sTime, " ") $infotime = InputBox ('Time', 'What time to execute?', $aTime[2] & ":000") Do $sRawTimer = @Hour & ':' & @Min & ':' & @Sec & ':' & _MSec() ToolTip($sRawTimer) Until $sRawTimer = $infotime If $sRawTimer = $infotime Then MsgBox(0,'Worked','Worked') EndFunc Func _MSec() Local $stSystemTime = DllStructCreate('ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort') DllCall('kernel32.dll', 'none', 'GetSystemTime', 'ptr', DllStructGetPtr($stSystemTime)) $sMilliSeconds = StringFormat('%03d', DllStructGetData($stSystemTime, 8)) $stSystemTime = 0 Return $sMilliSeconds EndFunc ,
    1 point
  29. guinness

    Maps (beta)

    Here... Local $aInternal = [99, "Problems"] Local $aArray = [$aInternal] ConsoleWrite(($aArray[0])[0] & " " & ($aArray[0])[1] & @CRLF)
    1 point
  30. martin

    Array / For loop help

    As a general point about looping through an array - If you loop through an array and possibly delete an element as you go then you must loop from the last to the first. (Or you complicate the code as M23's example.) Otherwise you will loose track of where you are in the array and the final value for the array element will be invalid if any elements were removed. #include <array.au3> Local $array[5]; $array[0] = "c" $array[1] = "b" $array[2] = "e" $array[3] = "c" $array[4] = "f" For $n = UBound($array) - 1 to 0 step -1 If $array[$n] = "c" Then _ArrayDelete($array, $n) EndIf Next ConsoleWrite("result===================" & @CRLF) For $element IN $array ConsoleWrite($element & @CRLF) Next
    1 point
  31. You have more options: 1. Create a GUI with $TOP_MOST ex-style and minimize Task Manager 2. Disable from registry CTRL key or other key And probably more options.
    1 point
×
×
  • Create New...