Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/10/2015 in all areas

  1. Hi! Today I want to show you my current AutoIt project: The ISN AutoIt Studio. The ISN AutoIt Studio is a complete IDE made with AutoIt, for AutoIt! It includes a GUI designer, a code editor (with syntax highlighting, auto complete & intelisense), a file viewer, a backup system, trophies and a lot more features!! Here are some screenshots: Here some higlights: -> easy to create/manage/public your AutoIt-projects! ->integrated GUI-Editor (ISN Form Studio 2) ->integrated - file & projectmanager ->auto backupfunction for your Projects ->extendable with plugins! ->available in several languages ->trophies ->Syntax highlighting /Autocomplete / Intelisense ->Dynamic Script ->detailed overview of the project (total working hours, total size...) And much more!!! -> -> Click here to download ISN AutoIt Studio <- <- Here is the link to the german autoit forum where I posted ISN AutoIt Studio the first time: http://autoit.de/index.php?page=Thread&threadID=29742&pageNo=1 For more information visit my Homepage: https://www.isnetwork.at So….have fun with ISN AutoIt Studio! PS: Sorry for my bad English! ^^
    2 points
  2. [New Version] - 27 Jan 22 New: The GUIScrollbar_Ex UDF now recognises Win-D and taskbar desktop clearance commands and runs the correct minimize/restore code automatically. The previous UDF _Minimize and _Restore commands have been superceded by a single _EventMonitor function which runs in the script idle loop. This is a script-breaking change, but I hope that the additional functionality is worth the small effort it will take to alter your scripts. New UDFs, examples in zip file below. Previous changes: Changelog.txt Are you bemused by scrollbars? > Do you find them too difficult to use? > Then you need the GUIScrollbars_Ex UDF! Just download the zip at the end of the post and run this short script with the UDF in the same folder. No tricky calculations, no complicated functions to master - just easy to use, accurate scrollbars with one command! [size=5]#include <guiconstantsex.au3> #include "GUIScrollbars_Ex.au3" ; Create GUI with red background $hGUI = GUICreate("Test", 500, 500) GUISetBkColor(0xFF0000, $hGUI) ; Create a 1000x1000 green label GUICtrlCreateLabel("", 0, 0, 1000, 1000) GUICtrlSetBkColor(-1, 0x00FF00) GUISetState() ; Generate scrollbars - Yes, this is all you need to do!!!!!!!!!!!!!!!!!!!! _GUIScrollbars_Generate($hGUI, 1000, 1000) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd[/size] Try it today and see how easy it is! I have been trying for some time to understand how scrollbars work and how to get them closely to match the area I want to display. After much research and headscratching I have come up with 2 UDFs which I hope will be of use to others. Apologies for the length of this post, but scrollbars are complex beasts and as I did this mainly for the less experienced user I want to make sure that they understand what is going on. The 2 UDFs are: GUIScrollbars_Ex.au3 - This gives you scrollbars sized to your GUI in one simple command - with no other includes or commands needed. The UDF is designed for those who would not normally use scrollbars because the whole process looks too complicated. It also includes a command to enable you to scroll page by page, thus making it easy to scroll to anywhere on the GUI with only simple calulations based on the values you used to create the GUIs. [New] Ability to have recalculated scrollbars on resizeable GUIs. GUIScrollbars_Size.au3 - This calculates the Page and Max numbers for the user to feed into the _GUIScrollbar_SetScrollInfoPage/Max commands. The UDF is aimed at the more experienced user and is particularly useful when you have a GUI with a dynamic scroll size (i.e. adding or subtracting controls to the scrollable area as the script runs). First, a short tutorial for those who are interested in how the scrollbars affect your GUI and what it is that the UDFs calculate: All the files mentioned here are in a downloadable zip file at the end of the post. GUIScrollbars_Size.au3 As mentioned previously, the GUIScrollbars_Size.au3 UDF is aimed at the more experienced user who wants to use the full range of _GUIScrollbar comands, but would like a quick way of getting the required Page and Max values. It uses no other include files so you will need to include GUIScrollbars.au3 yourself, as well as the necessary GUIRegisterMsg and procedures for WM_VSCROLL and WM_HSCROLL. The syntax is simple - the size of the scrollable GUI and either the handle of the GUI you have created to hold the scrollbars or the size of the one you are going to create. It returns a 6-element array including the Page and Max values for the scrollbars and factors to compensate for the "shrinkage" of the GUI if you had already drawn some controls and wished to add others. Of interest, the returned Max value is biased not to clip the edges of the GUI - reducing it by 1 makes a tighter fit but can lead to some clipping. (If that does not make sense, please see the tutorial above for more details) The Size_Example_1 script to show the UDF in action - the "Pass Size" button shows the effect of creating the scrollbars BEFORE the controls, the "Pass Handle" button shows what happens if the scrollbars are created AFTER the controls. If you do not understand why there is a difference - go and read the tutorial above ! You will need to have the GUIScrollbar_Size.au3 UDF in the same folder. Where this UDF really helps is if you have a scrollable GUI of variable size - if the number of controls varies with user selections for example. All you need to do is to rerun the UDF with the new size of the scrollable GUI and it produces a new Max value for you to use. The Size_Example_2 script shows how the function enables you to dynamically size your scrollbars depending on the number of controls required. As before it requires the GUIScrollbar_Size.au3 UDF in the same folder. -------- Now the "simple" GUIScrollbars_Ex.au3 (which is actually the more complex internally as you would expect). This UDF is intended to be the single point of call for creating scrollbars on a GUI - it will automatically add the GUIScrollbars UDF and the WM_VSCROLL and WM_HSCROLL GUIRegisterMsg commands and procedures to your script - so you need no commands other than those within the UDF itself. These commands are _GUIScrollbars_Generate and _GUIScrollbars_Scroll_Page. As you might expect, _GUIScrollbars_Generate generates scrollbars for your GUI. It is usually called AFTER you have added all the controls and all you need to use it is the GUI handle and the size of the underlying GUI you want to scroll. If you so wish, you can also decide to generate the scrollbars BEFORE the controls on the scrollable GUI, and you can choose if you want to risk not quite reaching the edge of the GUI when the scrollbars are at the maximum position. So a basic call could be as simple as: _GUIScrollbars_Generate ($hGUI, 1000, 1000) which would put scrollbars on the $hGUI window allowing a 1000x1000 underlying GUI to be displayed. _GUIScrollbars_Scroll_Page lets you scroll a page at a time. If your GUI was 200 pixels wide, you would have 1000/200 = 5 pages to scroll before reaching the edge - no need to know what the actual Page and Max values are, just use this simple division based on the number you use to draw the GUIs. So: _GUIScrollbars_Scroll_Page ($hGUI, 3) would scroll to the third page - it would display the area between 400 and 600 pixels of the full 1000 pixel width. If you ask for a page over the maximum available, you just scroll to the maximum position - asking for page 1 resets you to the origin. Ex_Example_1 shows the UDF working. You can decide whether to have both or just one scrollbar, whether to create the scrollbars before or after the controls, and whether you want the maximum scroll to be tight to the edge or leave a border. Just select the options you want - the script selects a random width and height for both the scrollbar GUI and the underlying GUI - and press the "Scroll" button to show a single page scroll down and/or right followed by a scroll to the bottom right corner of the GUI. There are labels to let you see the size of the GUI and the accuracy of the page scrolls (please read the tutorial above to understand why these are almost certainly inaccurate). The script requires the GUIScrollbars_Ex.au3 UDF in the same folder. Ex_Example_2 is a really simple example to show how easy generating scrollbars can now become! As you can see - no other includes, no GUIRegisterMsg commands, no WM_H/VSCROLL procedure functions. Just accurate scrolling and proportional thumb sizes. Ex_Example_3 shows the automatic calculation of control positions. Ex_Example_4 shows how to initiate the cursor keys to scroll the GUI as well. [New] Ex_Example_5 shows how to use the new _GUIScrollbarsEx_Resizer function. I hope these 2 UDFs are useful to AutoIt users - I certainly find them so. Here is a zip file with the UDFs and examples: Scrollbars.zip My grateful thanks to the authors of the GUIScrollbars and WinAPI UDFs for their code, some of which I have plundered. And as always I welcome constructive criticism and/or effusive congratulations. M23
    1 point
  3. Melba23

    Google Policy Violations

    As of now please do not post or link to any code or software which allows the downloading of YouTube content. Any such content that is already available on the forum will be removed by the Mods as and when it is discovered. Thank you for your cooperation - whether forced or voluntary. M23
    1 point
  4. Argumentum, Thanks a lot for this, working perfectly
    1 point
  5. there you go: #include <Array.au3> #include <ButtonConstants.au3> #include <ColorConstants.au3> #include <ComboConstants.au3> #include <Constants.au3> #include <Crypt.au3> #include <Date.au3> #include <File.au3> #include <FontConstants.au3> #include <GUIConstantsEx.au3> #include <GuiEdit.au3> #include <GuiListView.au3> #include <Misc.au3> #include <MsgBoxConstants.au3> #include <ProgressConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GuiButton.au3> Global $Images = "C:\Windows\ATL_Laptop\Resources\Images\" Opt("GUIOnEventMode", 1) Global Const $sINIFile = "test.ini" Global $aCheckboxes Global $iRunning = 1 ManualActions() Func ManualActions() Global $ManualActionsGui = GUICreate("Automated Task List Suite", 460, 480, -1, -1) GUISetBkColor(0xFFFFFF) GUICtrlCreatePic($Images & "\SAClogo.jpg", 110, 10, 240, 80) GUICtrlCreateLabel("---MANUAL ACTIONS---", 173, 100, 300, -1) GUICtrlSetFont(-1, 8.5, 700, 0) Local $ResetAll = GUICtrlCreateButton("Reset Everything", 10, 440, 97, 30) Local $SaveAndQuit = GUICtrlCreateButton("Save and Quit", 360, 440, 97, 30) Local $iX = 10, $iY = 120 $aCheckboxes = _ReadINI() For $x = 0 To UBound($aCheckboxes) - 1 Local $idCheckBox = _CreateCheckbox($aCheckboxes[$x][0], $iX, $iY) If _Crypt_HashData($aCheckboxes[$x][0] & "|" & $sINIFile & "|" & $GUI_CHECKED, $CALG_MD5) = $aCheckboxes[$x][1] Then GUICtrlSetState(-1, BitOR($GUI_CHECKED, $GUI_DISABLE)) EndIf $aCheckboxes[$x][0] = $idCheckBox $iY += 20 Next GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $ManualActionsGui) GUICtrlSetOnEvent($ResetAll, "_ResetAll") GUICtrlSetOnEvent($SaveAndQuit, "_Exit") GUISetState() $iRunning = 1 While $iRunning Sleep(10) WEnd GUIDelete($ManualActionsGui) FileDelete($sINIFile) ManualActions() EndFunc ;==>ManualActions Func _ResetAll() $iRunning = 0 EndFunc ;==>_ResetAll Func _Checked() If GUICtrlRead(@GUI_CtrlId) = 1 Then GUICtrlSetState(@GUI_CtrlId, $GUI_DISABLE) EndFunc ;==>_Checked Func _CreateCheckbox($sLabel, $iX, $iY) Local $idCheckBox = GUICtrlCreateCheckbox($sLabel, $iX, $iY, -1, -1) GUICtrlSetOnEvent(-1, "_Checked") Return $idCheckBox EndFunc ;==>_CreateCheckbox Func _Exit() _WriteINI() Exit EndFunc ;==>_Exit Func _GenINIFile() Local $aCheckboxes[14] = ["Put a label with hostname on the computer?", "Check if AHCI is set in the BIOS", "Add all applications in AD?", "Check the installed drivers?", "Customize all desktop icons?", _ "Restore User's data?", "Connect to the VPN once?", "Update Firefox and Google Chrome ?", "Restore user's Bookmarks?", "Deploy CrashPlanPro, remove new licence and send a mail to the Service Desk?", _ "Check if printers the User needs are present?", "Copy SAPlogin.ini from former Computer (if needed)?", "Encrypt the Disk with PGP?", "Update Remedy database?"] FileClose(FileOpen($sINIFile, 2)) For $x = 0 To UBound($aCheckboxes) - 1 IniWrite($sINIFile, "Checkbox_Labels", $x, $aCheckboxes[$x]) IniWrite($sINIFile, "Checkbox_States", $x, "") Next EndFunc ;==>_GenINIFile Func _ReadINI() If Not FileExists($sINIFile) Then _GenINIFile() Local $aCheckbox_Labels = IniReadSection($sINIFile, "Checkbox_Labels") If @error Then Return SetError(1, 0, 0) ;If INIReadSection Failed Set Error = 1 Local $aCheckbox_States = IniReadSection($sINIFile, "Checkbox_States") If @error Then Return SetError(2, 0, 0) ;If INIReadSection Failed Set Error = 2 Local $aCheckboxes[$aCheckbox_Labels[0][0]][2] For $x = 0 To ($aCheckbox_Labels[0][0] - 1) $aCheckboxes[$x][0] = $aCheckbox_Labels[$x + 1][1] $aCheckboxes[$x][1] = $aCheckbox_States[$x + 1][1] Next Return $aCheckboxes EndFunc ;==>_ReadINI Func _WriteINI() For $x = 0 To UBound($aCheckboxes) - 1 IniWrite($sINIFile, "Checkbox_Labels", $x, GUICtrlRead($aCheckboxes[$x][0], 1)) IniWrite($sINIFile, "Checkbox_States", $x, _Crypt_HashData(GUICtrlRead($aCheckboxes[$x][0], 1) & "|" & $sINIFile & "|" & GUICtrlRead($aCheckboxes[$x][0]), $CALG_MD5)) Next EndFunc ;==>_WriteINI .. I just fix the loop problem, the rest of the code I did not tweak/correct
    1 point
  6. Hi I just released an hotfix that should fix the first problems with Autocompleting on keywoards. (And correct it to use it with the enter key) Pleas can you test it. (The update is currently only aviable via online update in the ISN itselfe. I will update the files on my homepage the next week. (Not on my computer on this weekend...)) @kcvinu: The default path for temporary files is %projectdir%Temp. But you can change it in your project settings. (not program settings!) @rex: Thanks a lot dude! I included it already in the hotfix update.
    1 point
  7. Oh it works...i forgot on " " in there. My stupidity. Thx guys, my script is completed thx to u.
    1 point
  8. That would be a good idea. I'm totally new here and didn't know the etiquette. I'll be more careful next time :-) Here is the fixed code: Global $cmarr[10] Global $cmmode = False Global $hkt = TimerInit() Global $hktd = TimerInit() Global $override Global $cmpressable ;; Many of these variables don't need to be Global, but I set it this way to help simplify debugging. HotKeySet ("{1}", "HotKey1") HotKeySet ("{2}", "HotKey2") HotKeySet ("{3}", "HotKey3") HotKeySet ("{4}", "HotKey4") HotKeySet ("{5}", "HotKey5") HotKeySet ("{6}", "HotKey6") HotKeySet ("{7}", "HotKey7") HotKeySet ("{8}", "HotKey8") HotKeySet ("{9}", "HotKey9") HotKeySet ("{0}", "HotKey0") HotKeySet ("{-}", "HotKey11") HotKeySet ("{=}", "HotKey12") While 1 = 1 $hktd = TimerDiff($hkt) ;; Check how much time has passed since the last time the mode was toggled (prevents this script from running before the native applications UI has a chance to display the thumbnail on the screen) If $hktd >= 500 Then $override = False ;; It is now OK for this portion of the script to look at the thumbnail bar and change the mode if necessary. This is here because sometimes the HotKey function will interrupt the For...Next loop below. If that happens, I need the script to know not to make any changes on its own after it goes back from finishing the HotKey function continues where it left off in its looping process. For $cm = 0 to UBound($cmarr) - 1 $cmpressable = PixelGetColor(1290, 876) ;; Check if mode can be changed (Hotkeys 1-3 have a 5 second loading window on occassion, so this variable is necessary to make sure the current task has finished) $xposition = 600 + ($cm * 25) ;; This is for scanning the thumbnail bar. $cmarr[$cm] = PixelGetColor($xposition, 55) ;; check the pixel at location If $cmarr[$cm] = 15636838 And $override = False Then $cmmode = True ExitLoop ElseIf $override = False and $cm = UBound($cmarr) - 1 Then ;; THIS was the problem. I needed to make sure this line only runs on the LAST round going through this loop. Otherwise, my results would be somehting like "False, False, True, False, False, False". The True in the middle was overwritten by a "False" result in the subsequent loops) $cmmode = False EndIf Next EndIf WEnd Func HotKey1() HotKeySet ("{1}") $hktd = TimerDiff($hkt) $cmpressable = PixelGetColor(1290, 876) ;; buttons 1-3 need to check if the option to toggled is available or not If $cmmode = True and $cmpressable = 9013641 Then $hkt = TimerInit() $override = True $cmmode = False Send ("9") Else Send ("{1}") EndIf HotKeySet ("{1}", "HotKey1") EndFunc Func HotKey2() HotKeySet ("{2}") $hktd = TimerDiff($hkt) $cmpressable = PixelGetColor(1290, 876) ;; buttons 1-3 need to check if the option to toggled is available or not If $cmmode = True and $cmpressable = 9013641 Then $hkt = TimerInit() $override = True $cmmode = False Send ("9") Else Send ("2") EndIf HotKeySet ("{2}", "HotKey2") EndFunc Func HotKey3() HotKeySet ("{3}") $hktd = TimerDiff($hkt) $cmpressable = PixelGetColor(1290, 876) ;; buttons 1-3 need to check if the option to toggled is available or not If $cmmode = True and $cmpressable = 9013641 Then $hkt = TimerInit() $override = True $cmmode = False Send ("9") Else Send ("3") EndIf HotKeySet ("{3}", "HotKey3") EndFunc Func HotKey4() HotKeySet ("{4}") If $cmmode = False Then $override = True $cmmode = True Send ("9") $hkt = TimerInit() Else Send ("4") EndIf HotKeySet ("{4}", "HotKey4") EndFunc Func HotKey5() HotKeySet ("{5}") ;If $cmmode = False Then ; $override = True ; $cmmode = True ; Send ("9") ; $hkt = TimerInit() ;Else ; Send ("5") ;EndIf Send ("5") HotKeySet ("{5}", "HotKey5") EndFunc Func HotKey6() HotKeySet ("{6}") If $cmmode = False Then $override = True $cmmode = True Send ("9") $hkt = TimerInit() Else Send ("6") EndIf HotKeySet ("{6}", "HotKey6") EndFunc Func HotKey7() HotKeySet ("{7}") $hktd = TimerDiff($hkt) If $cmmode = False Then $override = True $cmmode = True Send ("9") $hkt = TimerInit() Sleep ( 600 ) Send ("{7}") Else Send ("7") EndIf HotKeySet ("{7}", "HotKey7") EndFunc Func HotKey8() HotKeySet ("{8}") $hktd = TimerDiff($hkt) If $cmmode = False Then $override = True $cmmode = True Send ("9") $hkt = TimerInit() Else Send ("8") EndIf HotKeySet ("{8}", "HotKey8") EndFunc Func HotKey9() HotKeySet ("{9}") Send ("{9}") HotKeySet ("{9}", "HotKey9") EndFunc Func HotKey0() HotKeySet ("{0}") Send ("{0}") HotKeySet ("{0}", "HotKey0") EndFunc Func HotKey11() HotKeySet ("{-}") Send ("{-}") HotKeySet ("{-}", "HotKey11") EndFunc Func HotKey12() HotKeySet ("{=}") Send ("{=}") HotKeySet ("{=}", "HotKey12") EndFunc
    1 point
  9. It is equal to the %APPDATA% enviroment variable. Type that in a Windows Explorer and hit enter or open a CMD window and type Set AppData to see it. Jos
    1 point
  10. This should create the required mail and display it. The user has to press "Send" or cancel the mail. #AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y #include <OutlookEX.au3> Global $sSubject = "Test" Global $iBodyFormat = $olFormatRichText Global $sBody = "TestBody" Global $sTo = "" Global $sAttachments = "" Global $oOL = _OL_Open() If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF", "Error creating a connection to Outlook. @error = " & @error & ", @extended = " & @extended) ; Access the default outbox folder Global $aFolder = _OL_FolderAccess($oOL, "", $olFolderDrafts) If @error Then Exit MsgBox(16, "OutlookEX UDF", "FolderAccess: @error = " & @error & ", @extended = " & @extended) ; Create a mail item in the default folder Global $oItem = _OL_ItemCreate($oOL, $olMailItem, $aFolder[1], "", "Subject=" & $sSubject, "BodyFormat=" & $iBodyFormat) If @error Then Exit MsgBox(16, "OutlookEX UDF", "ItemCreate: @error = " & @error & ", @extended = " & @extended) ; Set the body according to $iBodyFormat If $iBodyFormat = $olFormatHTML Then _OL_ItemModify($oOL, $oItem, Default, "HTMLBody=" & $sBody) Else _OL_ItemModify($oOL, $oItem, Default, "Body=" & $sBody) EndIf If @error Then Exit MsgBox(16, "OutlookEX UDF", "ItemModify: @error = " & @error & ", @extended = " & @extended) ; Add recipient Global $aRecipients $aRecipients = StringSplit($sTo, ";", 2) _OL_ItemRecipientAdd($oOL, $oItem, Default, $olTo, $aRecipients) If @error Then Exit MsgBox(16, "OutlookEX UDF", "RecipientAdd: @error = " & @error & ", @extended = " & @extended) ; Add attachments If $sAttachments <> "" Then Global $aAttachments = StringSplit($sAttachments, ";", 2) _OL_ItemAttachmentAdd($oOL, $oItem, Default, $aAttachments) If @error Then Exit MsgBox(16, "OutlookEX UDF", "AttachmentAdd: @error = " & @error & ", @extended = " & @extended) EndIf ; Display item $oItem.Display ; Send mail ; _OL_ItemSend($oOL, $oItem, Default) ; If @error Then Return SetError(@error + 6000, @extended, 0) _OL_Close($oOL)
    1 point
  11. so then post your fixed code and mark the topic as answered
    1 point
  12. @kcvinu Probably the most promising IDE made in AutoIt is ISN AutoIt Studio by ISI360, check its credits sction for more info. If you wanna implement AutoIt in an IDE, I can help you personally, PM me if you want me to, TD
    1 point
  13. It's such a small download size that I wouldn't expect a single comment. This is also quite a demanding comment and breaks forum etiquette. I don't use it as it doesn't fit my needs and I am not happy with the way you've used Global variables inside a function. Please don't get angry, but you did wanted a comment and I am being honest.
    1 point
  14. ...ok, I'll comment, I've used it. The "if Then" don't do the "If Then" properly proper casing, other than that it behaves well but I'm so used to do my own filling of these that I don't find it as needed. But thanks for sharing.
    1 point
  15. Receipt printers are just small dot matrix printers, virtually identical to the ones used back in the 1980's. They either use tiny metal pins to strike an ink ribbon against the paper or there's a row of tiny heat elements to make marks on the paper. The ones that hit the paper can do multipart forms where there's a carbon-copy of several layers. It can be controlled by standard dot matrix printer commands. You need to have the manual for the printer model to know how to control it, though many of them accept Epson print control codes by default, as that was once a very common dot matrix standard. You may be able to print by simply sending raw data to LPT1 (parallel port) or COM1 (serial port). Though you want to avoid getting Windows and its spooler in the way as you want direct device control without using a "print driver". Dot matrix printers have no concept of a page, they just print lines. You send output to the printer and it prints until the data buffer is empty. The default state of the printer is to simply print characters using a built-in character font. If you want graphics you need to send control codes (looks like Escape-X Escape-G, etc) to tell the printer switch to graphic output, and then you need to send dot patterns representing a vertical line of 9-12 dots, then another vertical line, etc all the way across the line. Large graphics are built up from many strips one after the other. When you're done with sending dot patterns for graphics, you send more control codes (Escape-P Escape-R etc) to go back to basic character printing. In the rare event that your receipt printer has a Windows print driver, then you just print to it like from any other Windows program, formatting text and graphics to fit within a "page frame", and send the complete frame to the printer, and the driver handles graphic data automatically. Though trying to print a full-size page on a 10cm wide roll will be shrunk so small it will be unreadable, and it likely doesn't have any better than 150dpi so it'll just be a smudge on the paper. Need to use custom page sizes that match the actual printing width of the printer, and then the output will look correct. Cash drawers are real simple. There's a power cord that triggers an unlock solenoid, and the drawer is pushed out by a spring. There are any number of ways to do to this, such as a serial port control board that looks for a specific command and fires the solenoid. It can also be triggered directly via the often unused serial / parallel control lines (CTS / DTR).
    1 point
  16. You must have been using it in a way that was never intended or maybe you had a crap version. I think it's time people stopped messing around with all this bigger, better, faster bloat nonesence and actually do some computations. ^^
    1 point
×
×
  • Create New...