Understanding Hexadecimal Values in Visual Basic (Classic)

By CodeMaster VBC | Created on 2025-08-28 19:57:00

Written with a persuasive tone 🗣️ | Model: qwen2.5-coder:14b

0:00 / 0:00

Welcome to the world of Visual Basic Classic! Today, we'll dive into a common question that often arises: what do &H1, &H8000, and other hexadecimal values represent? These values are crucial for various operations, especially when dealing with keyboard states or bitwise operations. Let's break it down!

Hexadecimal Basics

&H is a prefix in Visual Basic that indicates a hexadecimal number. Hexadecimal is a base-16 number system, which means it uses 16 different symbols: 0-9 and A-F.

  • &H1: This represents the decimal value 1 in hexadecimal form.
  • &H8000: This represents the decimal value 32768. In binary, it's written as 1000000000000000, which means the highest bit (16th bit) is set to 1.

GetKeyState Function and &H8000

The GetKeyState function in Visual Basic Classic is used to determine the state of a virtual key. It returns a SHORT value (a 16-bit integer) that can be interpreted as follows:

  • If the high-order bit (the 16th bit, or &H8000) is set to 1, the key is currently pressed.
  • If the low-order bit is set to 1, it indicates a toggled key state (like Caps Lock).

Example: Detecting Shift Key Press

To check if the Shift key is pressed, you can use &H10 as the virtual key code for Shift and &H8000 to determine its state:

```vb Public Const VK_SHIFT = &H10 Dim IsShifted As Boolean ' Check if the Shift key is pressed IsShifted = (GetKeyState(VK_SHIFT) And &H8000) > 0 ```

In this example, GetKeyState(VK_SHIFT) returns a value where the high-order bit is set to 1 if the Shift key is pressed. By performing a bitwise AND with &H8000, you isolate the highest bit and determine if it's set.

Checking for Other Keys

You can use a similar approach to check for other keys. For example, to detect when both Alt (VK_ALT = &H12) and X are pressed simultaneously, you can write:

```vb Public Const VK_ALT = &H12 Dim IsALT As Boolean Dim tempVKCodeHolder As Integer ' Check if the Alt key is pressed IsALT = (GetKeyState(VK_ALT) And &H8000) > 0 ' Assuming HookStruct.vkCode contains the virtual key code of the current key press tempVKCodeHolder = correctedInputValues(CInt(Trim(HookStruct.vkCode))) ' Check if Alt and X are pressed together If IsALT AndAlso tempVKCodeHolder = Asc("X") Then ' Copy user input to clipboard Clipboard.Clear Clipboard.SetText(strUserInput) End If ```

In this code snippet:

  • GetKeyState(VK_ALT) And &H8000 checks if the Alt key is pressed.
  • tempVKCodeHolder = Asc("X") compares the current key press with the ASCII value of 'X' (which is 88 in decimal).
  • If both conditions are met, the user's input is copied to the clipboard.

Conclusion

Hexadecimal values like &H1 and &H8000 are essential for low-level operations such as detecting key states in Visual Basic Classic. By understanding how these values work, you can enhance your programs to handle keyboard inputs more effectively. Whether it's copying text to the clipboard or implementing other complex functionalities, a solid grasp of hexadecimal numbers will prove invaluable.

If you have any further questions or need more examples, feel free to ask in the comments below!



Sources:
- [What are &H1, &H8000, etc.? | Tek-Tips] (https://www.tek-tips.com/threads/what-are-h1-h8000-etc.1080522/)
- [Why does font-size not inherit ? | Tek-Tips] (https://www.tek-tips.com/threads/why-does-font-size-not-inherit.1050326/)
- [Error: Only content controls are allowed directly in a ... - Tek-Tips] (https://www.tek-tips.com/threads/error-only-content-controls-are-allowed-directly-in-a-content-page.1504551/)
- [Moving Aplications to a new screen in C# | Tek-Tips] (https://www.tek-tips.com/threads/moving-aplications-to-a-new-screen-in-c.1416749/)
- [Coverage Paths | Tek-Tips] (https://www.tek-tips.com/threads/coverage-paths.1632312/)
- [Launch .VBS file from button on HTML page | Tek-Tips] (https://www.tek-tips.com/threads/launch-vbs-file-from-button-on-html-page.931380/)
- [Microsoft VBScript runtime error '800a01b6' | Tek-Tips] (https://www.tek-tips.com/threads/microsoft-vbscript-runtime-error-800a01b6.419805/)
- [Send 8-bit data over serial port; values over 3F are being set to 3F] (https://www.tek-tips.com/threads/send-8-bit-data-over-serial-port-values-over-3f-are-being-set-to-3f.1672795/)
- [how do i keep sections from moving when i minimize window?] (https://www.tek-tips.com/threads/how-do-i-keep-sections-from-moving-when-i-minimize-window.1611893/)
- [Forwarding one internal extension to External number | Tek-Tips] (https://www.tek-tips.com/threads/forwarding-one-internal-extension-to-external-number.1574548/)
- [HTML h1 to h6 tag - W3Schools] (https://www.w3schools.com/tags/tag_hn.asp)
- [Creating a Healthier Future | H1] (https://h1.co/)
- [H1 Unlimited – Home of the World's Fastest Boats] (http://www.h1unlimited.com/)
- [

: The HTML Section Heading elements - MDN Web Docs] (https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements)
- [H1 Inc. - Wikipedia] (https://en.wikipedia.org/wiki/H1_Inc.)
- [H-1B Specialty Occupations - USCIS] (https://www.uscis.gov/working-in-the-united-states/h-1b-specialty-occupations)
- [Amazon EC2 H1 Instances] (https://aws.amazon.com/ec2/instance-types/h1/)
- [Universal humanoid robot H1_Bipedal Robot_Humanoid ... - unitree] (https://www.unitree.com/h1)
- [Our Trapped Ion Quantum Computers | System Model H1] (https://www.quantinuum.com/products-solutions/quantinuum-systems/system-model-h1)
- [H1 - LinkedIn] (https://www.linkedin.com/company/h1co)