Jump to content
Ascend4nt

I/O Port Functions - x64 Parallel Port IO, Keyboard, etc + Restore PC Speaker Beep

Recommended Posts

I/O Port Functions UDF

Windows 7 and x64-compatible!

This is a simple I/O (Input/Output) UDF for interacting with ports. The ability to write to ports was stripped from Windows with Vista+. While many do not miss this ability, there are some uses still in existence:

  • Re-enable the internal PC Speaker - the good ol' "Beep" function can be restored using basic I/O
  • PS/2 Keyboard Functions - Turn it off/on, mess with LED's, inject keys into the keyboard output stream - even thwart UAC prompts! =O
  • Also work with Parallel, Serial (COM), PS/2 mouse, and miscellaneous ports that devices interface through using I/O operations

For some good lists of ports and programming, see:

Chapters from 'The Art of Assembly Language':

On the PS/2 Keyboard and PS/2 Mouse, some more links:

The I/O DLL's, which will install the I/O drivers (they are embedded as a resource in the DLL), come from Phillip Gibbons. His webpage, where more information, and extra downloads are, is available here: InpOut32 and InpOutx64. Note: everything you need is already included in my UDF.

IOInstallx86 and IOInstallx64 are included to help with the install. Run these once to install the DLL's and drivers. (Administrator rights are required!)

In addition to the base _IOFunctions UDF, I've included _IOBeep, which is based on trancexx's _Beep function, and _IOKeyboardFunctions [PS/2 only*]. There are now three examples of the UDF usage included: IOBeepExample, IOCMOSReadExample (based on trancexx's CMOS code), and IOKeyboardExamples. If anyone else has more code suggestions, feel free to add to the thread.

*Update: Some BIOS's allow Legacy USB Port 64/60 Emulation, which may allow the _IOKeyboardFunctions to work for USB (non-PS/2) Keyboards, though this is untested thus far.

While I bundle the binaries with my code, remember they are not my own. However, they are released as freeware. To ensure proper credit goes where it belongs, I've included the Readme files from the download (linked above), as well as a link to the original page.

Ascend4nt's AutoIT Code License agreement

Screw silly licenses.  Just make sure you remember the people you get free stuff from!

 

IOFunctions.zip

UPDATES:

07/11/2013:

- Updated to use (and install) v1.5.0.0 of InpOut32 & InpOutx64

- Version check & compare before install

- Fixed links

- Tiny bug fixes

InpOut32 and InpOutx64 ChangeLog:

v1.5.0.0 New Build (20-Jan-2011):

- Added _stdcall to DlPortReadPortUshort, DlPortWritePortUshort, DlPortReadPortUlong, DlPortWritePortUlong to maintain compatibility with old DLPortIO driver.

v1.4.0.0 New Build (13-Jan-2011):

- Removed references to WinRing0 which was discontinued.

- Fixed uninitialized buffers & return from Inp32 > byte value!

v1.3.0.0 New Build (15-Aug-2010):

- Removed bool's from header (replaced with BOOL). This is to maintain compatibility with other DLL’s (DLPortIO etc.).

 

10/22/2010:

  • Added _IOKeyboardFunctions UDF
  • Added IOKeyboardExamples and IOCMOSReadExample (based on trancexx's CMOS code)
Edited by Ascend4nt

Share this post


Link to post
Share on other sites

Thank you Ascend4nt! I have used InpOut32 for a VB project few years ago and still have it on an old laptop. Unfortunately new ones don't have LPT port... ;)( Do you know if ImpOut32.dll works with USB to LPT port adapter?

M.I.

Share this post


Link to post
Share on other sites

@trancexx: and thank you for the Beep function;) By the way, do you think it makes a difference doing Ceiling vs. Floor for that function?

@taietel: According to the readme:

The InpOut32 device driver support writing to "old fashioned" hardware port addresses.

It does NOT support USB devices such as USB Parallel ports or even PCI parallel ports (as I am lead to believe)

However, I've read that someone had success with a 'true' PCI parallel port.. though I'm not quite clear on the details of that.. sorry

*edit: here's a link for ya:

INPOUT32/X64 Works with SOME PCI cards

Edited by Ascend4nt

Share this post


Link to post
Share on other sites

@trancexx: and thank you for the Beep function;) By the way, do you think it makes a difference doing Ceiling vs. Floor for that function?

It's about rounding, so they are probably as wrong.

Have you tried keyboard?

I asked 400 bucks for the script.

400 dollars I asked, they wouldn't pay ;)

edit: wrong link lol

Edited by trancexx

♡♡♡

.

eMyvnE

Share this post


Link to post
Share on other sites

Hrmm.. I just dug through my old DOS Hardware/programming books, and saw some info on port x60, but I can't seem to force basic keys into the keyboard output buffer.

I was able to screw with the keyboard LED's though:

Anyway.. what's your $400 secret? ;)

*edit: Ahh, nevermind - the $400 secret was actually really simple. See this post.

Y'know.. looking through these books, I sorta miss the old DOS 'interrupt' days.. ok, only a little..

*edit: added input buffer check to function.

--------------------------------------------------------------

Also, on the PS/2 keyboard programming/ports, I found these links:

Chapter Twenty: The PC Keyboard and 8042

Another good link (might as well put them all in one place):

Keyboard scancodes (and commands)

Edited by Ascend4nt

Share this post


Link to post
Share on other sites

I have a little question. I played with On-Board Keyboard Controller Commands to disable and enable my keyboard. My question it's how can I clear the keyboard buffer so after I enable my keyboard to not send keys that I pressed while my keyboard was disable?

My test script to disable/enable keyboards:

#include "_IOFunctions.au3"
_IO_Initialize()
_IO_OutB(0x64,0xAD) ;Disable keyboard
Sleep(5000)
_IO_OutB(0x64,0xAE) ;Enable keyboard
_IO_UnInitialize()
Edited by Andreik

When the words fail... music speaks

Share this post


Link to post
Share on other sites

Andreik, try adding the 'Enable and Clear' command:

_IO_OutB(0x64,0xAD) ; Disable keyboard
Sleep(5000)
_IO_OutB(0x64,0xAE) ; Enable keyboard
_IO_OutB(0x60,0xF4) ; Enable & Clear output buffer

btw, USB keyboards won't be affected at all by these I/O calls


Share this post


Link to post
Share on other sites

So I figured out the 'magic' output sequence to insert keys into the keyboard stream. Be VERY careful about use of this, as it only appears to work with 1-byte sequences (no extended keys seem to work [ones requiring 'e0'], and I don't know how to get them to work. Also, 'break' codes aren't necessary for most keys as no repeat-sequence is initiated. Perhaps trancexx knows how to do extended keys..). Anyway, stick to 1-byte sequences for now, and check this list of scancodes.

Basically, the programmer must make sure the input buffer is clear, send 0xD2 'Write Keyboard Output Register' to port 0x64, and then write the 1-byte sequence to port 0x60.

For example, this will write 'e' 10 times to the keyboard buffer. This, as trancexx pointed out, is the ultimate 'send' - it should work with any program or game that tries to block any tricky input methods:

For $i=1 To 10
    ; Wait for input buffer to clear
    While BitAND(_IO_InB(0x64),2)
        Sleep(5)
    WEnd
    _IO_OutB(0x64,0xD2) ; send 'Write Keyboard Output Register'
    _IO_OutB(0x60,0x12) ; send key scancode (in this case, 'e')
    Sleep(50)   ; Putting in sleeps between key-sends decreases the chance that the O/S will miss certain keypresses
Next

*edit: 2-byte scancodes don't work and the above just sends the standard key (10 times) and doesn't initiate a repeat-sequence for the key.

*Edit again: 'break' codes ARE necessary for keys like 'ctrl', 'alt' and 'shift', so be sure to send the 'break' (release) code for those. Just add 0x80 to the code and you have your break code.

P.S. Its actually possible to thwart Window's UAC prompts using the sendkey code ;)

Edited by Ascend4nt

Share this post


Link to post
Share on other sites

Updated! I took most everything I've learned from keyboard I/O and created a small UDF with it, as well as some examples. Also added trancexx's CMOS code:

UPDATES: 10/22/2010:

  • Added _IOKeyboardFunctions UDF
  • Added IOKeyboardExamples and IOCMOSReadExample (based on trancexx's CMOS code)

Share this post


Link to post
Share on other sites

Anyway.. what's your $400 secret? ;)

*edit: Ahh, nevermind - the $400 secret was actually really simple. See this post.

I just saw the edit :)

No, that's not $400. That's $100.

It likely wouldn't work without ps/2 keyboard plugged in (when starting the system). Try it. For example I use USB keyboard and your solution is not working for me.

That means it wouldn't work on any laptops almost for sure.

You could have added reboot function _IO_OutB(0x64, 0xFE) for the sake of completeness. Maybe disabling/enabling keyboard too.

USB <- that. Do you dare?

Edited by trancexx

♡♡♡

.

eMyvnE

Share this post


Link to post
Share on other sites

Yeah, I already mentioned in a few posts about the I/O functions working only on PS/2 keyboards. USB keyboards aren't affected. Perhaps I should have made it more clear, but I did mention it and it is mentioned in the UDFs.

And speaking of, Enabling/Disabling the keyboard is already part of those UDF's. As far as resetting the CPU.. mmmm, no. lol

Just for reference, here's part of the header from my _IOKeyboardFunctions UDF:

;
; Uses _IOFuntions to manipulate PS/2 keyboards.
;   NOTE: Functions are specific to PS/2 Keyboards and will not affect USB keyboards!
;
; Functions:
;   _IO_KeyboardLED()       ; Simply turns on or off keyboard LED's
;   _IO_KeyboardLEDRestore() ; Restores the LED's to what the O/S currently 'sees' them as
;   _IO_KeyboardDisable()   ; Disables the keyboard (be careful with this!)
;   _IO_KeyboardReEnable()  ; Re-enables the keyboard after a _IO_KeyboardDisable() call
;   _IO_KeySend()           ; Injects a key into the PS/2 keyboard output buffer

As far as USB devices go.. do they even work with I/O functions? I have no idea how they interact with the hardware, but I don't see anything indicating input/output functions work on them..


Share this post


Link to post
Share on other sites

WOW Nice . better than i could EVER do

shame i abonded the project i was making wich needed this :)

gratz anyway :)

It's about rounding, so they are probably as wrong.

Have you tried keyboard?

I asked 400 bucks for the script.

400 dollars I asked, they wouldn't pay ;)

edit: wrong link lol

ahhh ahaha you remembered ;) and heyy i have the money just no plane ticket to get it to you :shocked:

Budweiser + room = warm beerwarm beer + fridge = too long!warm beer + CO2 fire extinguisher = Perfect![quote]Protect the easly offended ... BAN EVERYTHING[/quote]^^ hmm works for me :D

Share this post


Link to post
Share on other sites

Does anyone have a PS/2 mouse? I only have a PS/2 keyboard, so haven't been able to try some I/O functions specific to a PS/2 mouse.

For example, the following should disable the PS/2 mouse for 8 seconds:

MsgBox(0,"Disabling mouse","Disabling mouse..")
_IO_MouseDisable()
Sleep(8000)
_IO_MouseReEnable()

Func _IO_MouseDisable()
    ; Wait for input buffer to clear
    While BitAND(_IO_InB(0x64),2)
        Sleep(5)
    WEnd
    _IO_OutB(0x64,0xA7) ; disable mouse port
EndFunc

Func _IO_MouseReEnable()
    ; Wait for input buffer to clear
    While BitAND(_IO_InB(0x64),2)
        Sleep(5)
    WEnd
    _IO_OutB(0x64,0xA8) ; enable mouse port
EndFunc

If anyone can confirm this is working, I could add a UDF for it. I also have a MouseSend() command, but without a PS/2 mouse installed it sends data incorrectly.. I'm also looking for ways to detect if a PS/2 mouse is even installed..


Share this post


Link to post
Share on other sites

I am trying to configure the serial port. Do not do it.

Someone tell me how to configure the port to send data by rs232.

Share this post


Link to post
Share on other sites

all this stuff sounds really really interesting

remembers me of asm classes!! and stuff like adding mouse feature to a pure DOS command prompt :graduated:

@trancexx: got these hundred bucks clog so far? hehe :(

Edited by hench

Share this post


Link to post
Share on other sites

I totally forgot about this.  I had updated the DLLs and drivers on my machine a while back but didn't update this package.  So, for anyone that is still interested, the first post now has the newest version as well as the installer.

Here's what's changed:

UPDATES:

07/11/2013:

- Updated to use (and install) v1.5.0.0 of InpOut32 & InpOutx64

- Version check & compare before install

- Fixed links

- Tiny bug fixes

InpOut32 and InpOutx64 ChangeLog:
v1.5.0.0 New Build (20-Jan-2011):
- Added _stdcall to DlPortReadPortUshort, DlPortWritePortUshort, DlPortReadPortUlong, DlPortWritePortUlong to maintain compatibility with old DLPortIO driver.
v1.4.0.0 New Build (13-Jan-2011):
- Removed references to WinRing0 which was discontinued.
- Fixed uninitialized buffers & return from Inp32 > byte value!
v1.3.0.0 New Build (15-Aug-2010):
- Removed bool's from header (replaced with BOOL). This is to maintain compatibility with other DLL’s (DLPortIO etc.).

 

license agreement? what license agreement?


Share this post


Link to post
Share on other sites
Posted (edited)

This was a hard to find post xD

My bad completely but I always wished that UDFs posts had the download link first of all instead of bottom xD

So I reinstalled my Win7 PC and used _IOBeep before. Only had the needed UDFs in INCLUDE so I copied them from backup. Got error about missing DLL. Had a backup of System32 too so I copied DLL regsrv'd it, got errors. Came here and saw the link to highrez, went there, donwloaded, installed it, got successful messages... Kept getting the error on script run.

I thought something went wrong when regserving...
/u gave same message about missing entries, not sure if it got registered or unregistered ever. No drivers on Device manager. Installer kept saying successful but my script wont run...

Then somewhere on my backup I found the example and this link and I read through this entire post (I had read it up to the "extra downloads are, is available here: InpOut32 and InpOutx64." I only needed the Beep function) and saw that there was an installer included.

Big facepalm for me, it was way easier than I made it xD

This is what happens when reinstalling in a rush and it's late in the night and you don't need the UDF because you have the two ones that are needed already.

I modified the error message to have this link but wanted to share the story just for laughs 😄

Thanks AscenD4nt! It's great to have my buzzer beeping again independently of headphones in or low volume!

Edited by Ktulu789

AutoIt is a blessing, I don't know how I was able to use my computer before [Auto]It :-S

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

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Colduction
      Hi AutoIt Programmers!, I just looking for a way to change entered keys in English to Russian keys and reverse, i must clear for you to understand. For example:
       
      I write keys on keyboard and i forgot to change input language and then the result will be: Dkflbvbh (Thing we write in fact) ====> Владимир (Thing we want)
       
      And reverse: Владимир  ====> Dkflbvbh

      Is there any solution without writing constant for each words? for example dlls or WinAPIs.
    • By Colduction
      Hello AutoIt Programmers, i was working on my project and i reffered to @KBLayout, @MUILang & @OSLang then i saw that code example of this macro is not too complete, i decided to share my customized _GetLanguage() for you:
      #include <MsgBoxConstants.au3> MsgBox($MB_SYSTEMMODAL, "", "The language of the OS is: " & _GetLanguage() & " (" & LCIDToLocaleName("0x" & @OSLang) & ")") ; Retrieve the language of the operating system. Func _GetLanguage() Switch @OSLang Case "0004" Return "Chinese - Simplified" Case "0401" Return "Arabic - Saudi Arabia" Case "0402" Return "Bulgarian - Bulgaria" Case "0403" Return "Catalan - Spain" Case "0404" Return "Chinese (Traditional) - Taiwan" Case "0405" Return "Czech - Czech Republic" Case "0406" Return "Danish - Denmark" Case "0407" Return "German - Germany" Case "0408" Return "Greek - Greece" Case "0409" Return "English - United States" Case "040A" Return "Spanish - Spain" Case "040B" Return "Finnish - Finland" Case "040C" Return "French - France" Case "040D" Return "Hebrew - Israel" Case "040E" Return "Hungarian - Hungary" Case "040F" Return "Icelandic - Iceland" Case "0410" Return "Italian - Italy" Case "0411" Return "Japanese - Japan" Case "0412" Return "Korean - Korea" Case "0413" Return "Dutch - Netherlands" Case "0414" Return "Norwegian (Bokmål) - Norway" Case "0415" Return "Polish - Poland" Case "0416" Return "Portuguese - Brazil" Case "0417" Return "Romansh - Switzerland" Case "0418" Return "Romanian - Romania" Case "0419" Return "Russian - Russia" Case "041A" Return "Croatian - Croatia" Case "041B" Return "Slovak - Slovakia" Case "041C" Return "Albanian - Albania" Case "041D" Return "Swedish - Sweden" Case "041E" Return "Thai - Thailand" Case "041F" Return "Turkish - Turkey" Case "0420" Return "Urdu - Pakistan" Case "0421" Return "Indonesian - Indonesia" Case "0422" Return "Ukrainian - Ukraine" Case "0423" Return "Belarusian - Belarus" Case "0424" Return "Slovenian - Slovenia" Case "0425" Return "Estonian - Estonia" Case "0426" Return "Latvian - Latvia" Case "0427" Return "Lithuanian - Lithuanian" Case "0428" Return "Tajik (Cyrillic) - Tajikistan" Case "0429" Return "Persian - Iran" Case "042A" Return "Vietnamese - Vietnam" Case "042B" Return "Armenian - Armenia" Case "042C" Return "Azeri (Latin) - Azerbaijan" Case "042D" Return "Basque - Basque" Case "042E" Return "Upper Sorbian - Germany" Case "042F" Return "Macedonian - Macedonia" Case "0432" Return "Setswana / Tswana - South Africa" Case "0434" Return "isiXhosa - South Africa" Case "0435" Return "isiZulu - South Africa" Case "0436" Return "Afrikaans - South Africa" Case "0437" Return "Georgian - Georgia" Case "0438" Return "Faroese - Faroe Islands" Case "0439" Return "Hindi - India" Case "043A" Return "Maltese - Malta" Case "043B" Return "Sami (Northern) - Norway" Case "043e" Return "Malay - Malaysia" Case "043F" Return "Kazakh - Kazakhstan" Case "0440" Return "Kyrgyz - Kyrgyzstan" Case "0441" Return "Swahili - Kenya" Case "0442" Return "Turkmen - Turkmenistan" Case "0443" Return "Uzbek (Latin) - Uzbekistan" Case "0444" Return "Tatar - Russia" Case "0445" Return "Bangla - Bangladesh" Case "0446" Return "Punjabi - India" Case "0447" Return "Gujarati - India" Case "0448" Return "Oriya - India" Case "0449" Return "Tamil - India" Case "044A" Return "Telugu - India" Case "044B" Return "Kannada - India" Case "044C" Return "Malayalam - India" Case "044D" Return "Assamese - India" Case "044E" Return "Marathi - India" Case "044F" Return "Sanskrit - India" Case "0450" Return "Mongolian (Cyrillic) - Mongolia" Case "0451" Return "Tibetan - China" Case "0452" Return "Welsh - United Kingdom" Case "0453" Return "Khmer - Cambodia" Case "0454" Return "Lao - Lao PDR" Case "0456" Return "Galician - Spain" Case "0457" Return "Konkani - India" Case "0459" Return "(reserved) - (reserved)" Case "045A" Return "Syriac - Syria" Case "045B" Return "Sinhala - Sri Lanka" Case "045C" Return "Cherokee - Cherokee" Case "045D" Return "Inuktitut (Canadian_Syllabics) - Canada" Case "045E" Return "Amharic - Ethiopia" Case "0461" Return "Nepali - Nepal" Case "0462" Return "Frisian - Netherlands" Case "0463" Return "Pashto - Afghanistan" Case "0464" Return "Filipino - Philippines" Case "0465" Return "Divehi - Maldives" Case "0468" Return "Hausa - Nigeria" Case "046A" Return "Yoruba - Nigeria" Case "046B" Return "Quechua - Bolivia" Case "046C" Return "Sesotho sa Leboa - South Africa" Case "046D" Return "Bashkir - Russia" Case "046E" Return "Luxembourgish - Luxembourg" Case "046F" Return "Greenlandic - Greenland" Case "0470" Return "Igbo - Nigeria" Case "0473" Return "Tigrinya - Ethiopia" Case "0475" Return "Hawiian - United States" Case "0478" Return "Yi - China" Case "047A" Return "Mapudungun - Chile" Case "047C" Return "Mohawk - Canada" Case "047E" Return "Breton - France" Case "0480" Return "Uyghur - China" Case "0481" Return "Maori - New Zealand" Case "0482" Return "Occitan - France" Case "0483" Return "Corsican - France" Case "0484" Return "Alsatian - France" Case "0485" Return "Sakha - Russia" Case "0486" Return "K'iche - Guatemala" Case "0487" Return "Kinyarwanda - Rwanda" Case "0488" Return "Wolof - Senegal" Case "048C" Return "Dari - Afghanistan" Case "0491" Return "Scottish Gaelic - United Kingdom" Case "0492" Return "Central Kurdish - Iraq" Case "0801" Return "Arabic - Iraq" Case "0803" Return "Valencian - Valencia" Case "0804" Return "Chinese (Simplified) - China" Case "0807" Return "German - Switzerland" Case "0809" Return "English - United Kingdom" Case "080A" Return "Spanish - Mexico" Case "080C" Return "French - Belgium" Case "0810" Return "Italian - Switzerland" Case "0813" Return "Dutch - Belgium" Case "0814" Return "Norwegian (Nynorsk) - Norway" Case "0816" Return "Portuguese - Portugal" Case "081A" Return "Serbian (Latin) - Serbia and Montenegro" Case "081D" Return "Swedish - Finland" Case "0820" Return "Urdu - (reserved)" Case "082C" Return "Azeri (Cyrillic) - Azerbaijan" Case "082E" Return "Lower Sorbian - Germany" Case "0832" Return "Setswana / Tswana - Botswana" Case "083B" Return "Sami (Northern) - Sweden" Case "083C" Return "Irish - Ireland" Case "083E" Return "Malay - Brunei Darassalam" Case "0843" Return "Uzbek (Cyrillic) - Uzbekistan" Case "0845" Return "Bangla - Bangladesh" Case "0846" Return "Punjabi - Pakistan" Case "0849" Return "Tamil - Sri Lanka" Case "0850" Return "Mongolian (Mong) - Mongolia" Case "0859" Return "Sindhi - Pakistan" Case "085D" Return "Inuktitut (Latin) - Canada" Case "085F" Return "Tamazight (Latin) - Algeria" Case "0867" Return "Pular - Senegal" Case "086B" Return "Quechua - Ecuador" Case "0873" Return "(reserved) - (reserved)" Case "0873" Return "Tigrinya - Eritrea" Case "0C01" Return "Arabic - Egypt" Case "0C04" Return "Chinese - Hong Kong SAR" Case "0C07" Return "German - Austria" Case "0C09" Return "English - Australia" Case "0C0A" Return "Spanish - Spain" Case "0C0C" Return "French - Canada" Case "0C1A" Return "Serbian (Cyrillic) - Serbia and Montenegro" Case "0C3B" Return "Sami (Northern) - Finland" Case "0C6B" Return "Quechua - Peru" Case "1001" Return "Arabic - Libya" Case "1004" Return "Chinese - Singapore" Case "1007" Return "German - Luxembourg" Case "1009" Return "English - Canada" Case "100A" Return "Spanish - Guatemala" Case "100C" Return "French - Switzerland" Case "101A" Return "Croatian (Latin) - Bosnia and Herzegovina" Case "103B" Return "Sami (Lule) - Norway" Case "105F" Return "Central Atlas Tamazight (Tifinagh) - Morocco" Case "1401" Return "Arabic - Algeria" Case "1404" Return "Chinese - Macao SAR" Case "1407" Return "German - Liechtenstein" Case "1409" Return "English - New Zealand" Case "140A" Return "Spanish - Costa Rica" Case "140C" Return "French - Luxembourg" Case "141A" Return "Bosnian (Latin) - Bosnia and Herzegovina" Case "143B" Return "Sami (Lule) - Sweden" Case "1801" Return "Arabic - Morocco" Case "1809" Return "English - Ireland" Case "180A" Return "Spanish - Panama" Case "180C" Return "French - Monaco" Case "181A" Return "Serbian (Latin) - Bosnia and Herzegovina" Case "183B" Return "Sami (Southern) - Norway" Case "1C01" Return "Arabic - Tunisia" Case "1c09" Return "English - South Africa" Case "1C0A" Return "Spanish - Dominican Republic" Case "1C1A" Return "Serbian (Cyrillic) - Bosnia and Herzegovina" Case "1C3B" Return "Sami (Southern) - Sweden" Case "2001" Return "Arabic - Oman" Case "2009" Return "English - Jamaica" Case "200A" Return "Spanish - Venezuela" Case "201A" Return "Bosnian (Cyrillic) - Bosnia and Herzegovina" Case "203B" Return "Sami (Skolt) - Finland" Case "2401" Return "Arabic - Yemen" Case "2409" Return "English - Caribbean" Case "240A" Return "Spanish - Colombia" Case "241A" Return "Serbian (Latin) - Serbia" Case "243B" Return "Sami (Inari) - Finland" Case "2801" Return "Arabic - Syria" Case "2809" Return "English - Belize" Case "280A" Return "Spanish - Peru" Case "281A" Return "Serbian (Cyrillic) - Serbia" Case "2C01" Return "Arabic - Jordan" Case "2C09" Return "English - Trinidad and Tobago" Case "2C0A" Return "Spanish - Argentina" Case "2C1A" Return "Serbian (Latin) - Montenegro" Case "3001" Return "Arabic - Lebanon" Case "3009" Return "English - Zimbabwe" Case "300A" Return "Spanish - Ecuador" Case "301A" Return "Serbian (Cyrillic) - Montenegro" Case "3401" Return "Arabic - Kuwait" Case "3409" Return "English - Philippines" Case "340A" Return "Spanish - Chile" Case "3801" Return "Arabic - U.A.E." Case "380A" Return "Spanish - Uruguay" Case "3C01" Return "Arabic - Bahrain" Case "3C0A" Return "Spanish - Paraguay" Case "4001" Return "Arabic - Qatar" Case "4009" Return "English - India" Case "400A" Return "Spanish - Bolivia" Case "4409" Return "English - Malaysia" Case "440A" Return "Spanish - El Salvador" Case "4809" Return "English - Singapore" Case "480A" Return "Spanish - Honduras" Case "4C0A" Return "Spanish - Nicaragua" Case "500A" Return "Spanish - Puerto Rico" Case "540A" Return "Spanish - United States" Case "7C04" Return "Chinese - Traditional" Case Else Return "Other (can't determine with @OSLang directly)" EndSwitch EndFunc ;==>_GetLanguage Func LCIDToLocaleName($iLCID) Local $aRet = DllCall("kernel32.dll", "int", "LCIDToLocaleName", "int", $iLCID, "wstr", "", "int", 85, "dword", 0) Return $aRet[2] EndFunc ;==>LCIDToLocaleName _GetLanguage.au3
      Source: AutoIt Help File (ScITE Editor (F1))

      I hope you enjoy this tiny code.
    • By jantograaf
      Hi all,
      I'm trying to automate the install of a specific networking device. All goes well, I can install the driver on both Windows 7 & 10, rescan for hardware, set the IP-settings and all, but there's one issue. In Windows 10, I can disable all connection protocols using Powershell, but Windows 7 does not offer this Powershell-Cmdlet. So I programmed a way (two years ago) to let AutoIt open the network-adapter properties and then deselect all checkboxes except for the TCP/IP-V4. I recovered this snippet somewhere in my old files and tried to reintegrate this into my latest script, but it doesn't seem to work. On Windows 10 I get a blank screen for a few seconds and that's it, on Windows 7 it makes explorer crash. 
      I think it's quite safe to test this on your own system as long as you're not using IPv6 to connect to the internet and as long as you return to check all the boxes again (so you don't break your connectivity).
      If  anyone has any idea, I'd be glad to hear from you!
      Thanks in advance and stay safe in these Corona-ridden times 🙂
      Kind regards,
      Jan
       

      There are three functions involved:
      DisableAllProtocols($AdapterName)
      This one is the main function that 'should' uncheck all the checkboxes in the adapter's Properties-window.
      Func DisableAllProtocols($AdapterName) OpenNetConnToAdapter($AdapterName) ;Find the IDs of all relevant controls Local $Handle_Window_Properties = WinWaitActive($Adaptername & " Properties","") Local $Handle_Listview_Protocols = ControlGetHandle($Adaptername & " Properties","","[CLASSNN:SysListView321]") Local $Handle_OK_Button = ControlGetHandle($Adaptername & " Properties","","[CLASSNN:Button6]") Local $List_CMN_ID = ControlListView($Adaptername & " Properties","","[CLASSNN:SysListView321]","FindItem","Client for Microsoft Networks") Local $List_FPSMN_ID = ControlListView($Adaptername & " Properties","","[CLASSNN:SysListView321]","FindItem","File and Printer Sharing for Microsoft Networks") Local $List_QOS_ID = ControlListView($Adaptername & " Properties","","[CLASSNN:SysListView321]","FindItem","QoS Packet Scheduler") Local $List_MNAMP_ID = ControlListView($Adaptername & " Properties","","[CLASSNN:SysListView321]","FindItem","Microsoft Network Adapter Multiplexor Protocol") Local $List_MLLDPPD_ID = ControlListView($Adaptername & " Properties","","[CLASSNN:SysListView321]","FindItem","Microsoft LLDP Protocol Driver") Local $List_IPV6_ID = ControlListView($Adaptername & " Properties","","[CLASSNN:SysListView321]","FindItem","Internet Protocol Version 6 (TCP/IPv6)") Local $List_LLTDR_ID = ControlListView($Adaptername & " Properties","","[CLASSNN:SysListView321]","FindItem","Link-Layer Topology Discovery Responder") Local $List_LLTDMIOD_ID = ControlListView($Adaptername & " Properties","","[CLASSNN:SysListView321]","FindItem","Link-Layer Topology Discovery Mapper I/O Driver") ; Disable All Protocols Except IPV4 SetCheckboxState($Handle_Listview_Protocols,$List_CMN_ID,3) SetCheckboxState($Handle_Listview_Protocols,$List_FPSMN_ID,3) SetCheckboxState($Handle_Listview_Protocols,$List_QOS_ID,3) SetCheckboxState($Handle_Listview_Protocols,$List_MNAMP_ID,3) SetCheckBoxState($Handle_Listview_Protocols,$List_MLLDPPD_ID,3) SetCheckboxState($Handle_Listview_Protocols,$List_IPV6_ID,3) SetCheckboxState($Handle_Listview_Protocols,$List_LLTDR_ID,3) SetCheckboxState($Handle_Listview_Protocols,$List_LLTDMIOD_ID,3) ;Click OK ControlClick($Handle_Window_Properties,"","Button6") Sleep(50) WinClose("Network Connections") EndFunc OpenNetConnToAdapter($AdapterName)
      This function opens the network adapter's Properties-page
      Func OpenNetConnToAdapter($AdapterName) ShellExecute("control.exe","ncpa.cpl",@WindowsDir,"",@SW_SHOW) WinWait("Network Connections","") WinActivate("Network Connections","") Local $Handle_Window_NetworkConnections = WinWaitActive("Network Connections","") Send("{F5}") Sleep(250) Local $AdapterNameArray = StringSplit($AdapterName,"") For $i = 1 To $AdapterNameArray[0] Step 1 Send($AdapterNameArray[$i]) Sleep(10) Next Sleep(50) Send("{APPSKEY}") Sleep(50) Send("{R}") Sleep(500) Return EndFunc SetCheckboxState($Handle,$checkbox_id,$wantedstate)
      This function changes the state of a checkbox
      Func SetCheckboxState($handle,$checkbox_id,$wantedstate) ;$handle : SysListView32-handle ;$checkbox_id : The ID of the checkbox you want to control ;$wantedstate : The wanted status (2 for checked, 3 for unchecked) Local $currentstate = _GUICtrlListView_GetItemStateImage($handle,$checkbox_id) If $currentstate = $wantedstate Then Return Else _GUICtrlListView_SetItemSelected($handle,$checkbox_id,True,True) Send("{Space}") Sleep(50) Return EndIf EndFunc  
    • By Fenzik
      Hello,
      i searched the forum for something near, but with no success...
      I have Combobox control with $CBS_DROPDOWNLIST style with some items (for example (one, two, nine).
      When i want to select the item, using keyboard, the items are selected only on First letter base (for example when i type "on", Nine is selected).
      Is there some trick to force the combobox with $CBS_DROPDOWNLIST style to accept more than the First letter during selecting the items from the list?
      Mi wanted result is the same as for example - when you type "fir" on the desktop, Firefox is automatically selected.
      Thank you so much.
      Fenzik
    • By Blueman
      Hey Guys,
      Maybe you can help me with something small.
      It is not terrible but it slows down my script and after a while even crash the script.

      First i explain what i have;
      I have a GUI with a lot of GUICtrlCreateInput controls, lets say 600 pieces.
      All the controls are hidden when the GUI is displayed, i have 3 buttons attached to 200 pieces each.
      When i press button-1 the first 200 controls are showed,
      When i press button-2 the first 200 controls are hidden and the next 200 controls are showed,
      etc, etc.
      This is working perfectly but after a while the GUI is getting slower and slower.
      After a while the controls aren't responding anymore and the script crashes.
      When i compile the script to 64-Bits version the speed is a lot better but you can still see the script slowing down each time i use the buttons.
      I think there has to be a buffer somewhere that is filling each time i show and hide the controls, but how can i clear that buffer without restarting the script?
      Deleting and re-creating the controls didn't help, deleting the entire gui (and controls) and re-creating it didn't help also.
      The only thing that is working is restarting the script.

      Thanks guys!

      PS: If you need a working example i can add it to this topic, just let me know. It is not rocket science, i just create the controls and show/hide them with a while loop and 3 buttons.
       
×
×
  • Create New...