Is there a way to make multiple windows “active” at one time? in Windows?












2














Let's say a program that I created, an on-screen keyboard. I want to make it active so that it can receive my keyboard inputs, even while another program such as Google Chrome, or Notepad.exe is receiving my keyboard inputs as well. I mainly want my keyboard to run like "Nohboard" I am having trouble because once I get my keyboard looking and working like I want it, whenever I open another window, my keyboard will not work as long as "Windows 7" is focused on the "notepad.exe" for example. The reason I am making this is to monitor my keystrokes on-screen using my own software. I am trying to design my keyboard with gm studio 1.4 but without having the ability to make multiple windows active at once, my keyboard becomes useless everytime I click away from the keyboard program that I can create.
Is there any workarounds that can be used? Maybe a 3rd party script created by another program to allow my program's window to be "active" and receive keyboard keystroke inputs while another program is also active and receiving keyboard keystroke inputs?
Thanks in advance for anyone who can think of a solution that would be at all helpful.
A Picture of how my keyboard program can look.



Space::
SetTitleMatchMode, 2
ControlSend, , {Space Down}, Typing Lessons
ControlSend, , {Space Down}, kb
Keywait, Space
ControlSend, , {Space Up}, kb
ControlSend, , {Space Up}, Typing Lessons
Return


One thing that I've just figured out how to do, with autohotkey scripts is send keys to multiple programs. Is there a way to send it to the "last active window" and the "current active window" using autohotkey?










share|improve this question
























  • How can I have a window that rejects activation but still receives pointer input?
    – IInspectable
    Nov 23 at 6:34










  • That allows the on-screen keyboard to be used, while another application has input focus. If you also need to monitor keyboard input, while your application doesn't have input focus, set up a low-level keyboard hook (that's apparently what NohBoard does). If you want to see how NohBoard is implemented, it is published on GitHub.
    – IInspectable
    Nov 23 at 11:30
















2














Let's say a program that I created, an on-screen keyboard. I want to make it active so that it can receive my keyboard inputs, even while another program such as Google Chrome, or Notepad.exe is receiving my keyboard inputs as well. I mainly want my keyboard to run like "Nohboard" I am having trouble because once I get my keyboard looking and working like I want it, whenever I open another window, my keyboard will not work as long as "Windows 7" is focused on the "notepad.exe" for example. The reason I am making this is to monitor my keystrokes on-screen using my own software. I am trying to design my keyboard with gm studio 1.4 but without having the ability to make multiple windows active at once, my keyboard becomes useless everytime I click away from the keyboard program that I can create.
Is there any workarounds that can be used? Maybe a 3rd party script created by another program to allow my program's window to be "active" and receive keyboard keystroke inputs while another program is also active and receiving keyboard keystroke inputs?
Thanks in advance for anyone who can think of a solution that would be at all helpful.
A Picture of how my keyboard program can look.



Space::
SetTitleMatchMode, 2
ControlSend, , {Space Down}, Typing Lessons
ControlSend, , {Space Down}, kb
Keywait, Space
ControlSend, , {Space Up}, kb
ControlSend, , {Space Up}, Typing Lessons
Return


One thing that I've just figured out how to do, with autohotkey scripts is send keys to multiple programs. Is there a way to send it to the "last active window" and the "current active window" using autohotkey?










share|improve this question
























  • How can I have a window that rejects activation but still receives pointer input?
    – IInspectable
    Nov 23 at 6:34










  • That allows the on-screen keyboard to be used, while another application has input focus. If you also need to monitor keyboard input, while your application doesn't have input focus, set up a low-level keyboard hook (that's apparently what NohBoard does). If you want to see how NohBoard is implemented, it is published on GitHub.
    – IInspectable
    Nov 23 at 11:30














2












2








2







Let's say a program that I created, an on-screen keyboard. I want to make it active so that it can receive my keyboard inputs, even while another program such as Google Chrome, or Notepad.exe is receiving my keyboard inputs as well. I mainly want my keyboard to run like "Nohboard" I am having trouble because once I get my keyboard looking and working like I want it, whenever I open another window, my keyboard will not work as long as "Windows 7" is focused on the "notepad.exe" for example. The reason I am making this is to monitor my keystrokes on-screen using my own software. I am trying to design my keyboard with gm studio 1.4 but without having the ability to make multiple windows active at once, my keyboard becomes useless everytime I click away from the keyboard program that I can create.
Is there any workarounds that can be used? Maybe a 3rd party script created by another program to allow my program's window to be "active" and receive keyboard keystroke inputs while another program is also active and receiving keyboard keystroke inputs?
Thanks in advance for anyone who can think of a solution that would be at all helpful.
A Picture of how my keyboard program can look.



Space::
SetTitleMatchMode, 2
ControlSend, , {Space Down}, Typing Lessons
ControlSend, , {Space Down}, kb
Keywait, Space
ControlSend, , {Space Up}, kb
ControlSend, , {Space Up}, Typing Lessons
Return


One thing that I've just figured out how to do, with autohotkey scripts is send keys to multiple programs. Is there a way to send it to the "last active window" and the "current active window" using autohotkey?










share|improve this question















Let's say a program that I created, an on-screen keyboard. I want to make it active so that it can receive my keyboard inputs, even while another program such as Google Chrome, or Notepad.exe is receiving my keyboard inputs as well. I mainly want my keyboard to run like "Nohboard" I am having trouble because once I get my keyboard looking and working like I want it, whenever I open another window, my keyboard will not work as long as "Windows 7" is focused on the "notepad.exe" for example. The reason I am making this is to monitor my keystrokes on-screen using my own software. I am trying to design my keyboard with gm studio 1.4 but without having the ability to make multiple windows active at once, my keyboard becomes useless everytime I click away from the keyboard program that I can create.
Is there any workarounds that can be used? Maybe a 3rd party script created by another program to allow my program's window to be "active" and receive keyboard keystroke inputs while another program is also active and receiving keyboard keystroke inputs?
Thanks in advance for anyone who can think of a solution that would be at all helpful.
A Picture of how my keyboard program can look.



Space::
SetTitleMatchMode, 2
ControlSend, , {Space Down}, Typing Lessons
ControlSend, , {Space Down}, kb
Keywait, Space
ControlSend, , {Space Up}, kb
ControlSend, , {Space Up}, Typing Lessons
Return


One thing that I've just figured out how to do, with autohotkey scripts is send keys to multiple programs. Is there a way to send it to the "last active window" and the "current active window" using autohotkey?







windows keyboard focus autohotkey pc






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 22 at 23:52

























asked Nov 22 at 20:09









Iroamalone Atnight

326




326












  • How can I have a window that rejects activation but still receives pointer input?
    – IInspectable
    Nov 23 at 6:34










  • That allows the on-screen keyboard to be used, while another application has input focus. If you also need to monitor keyboard input, while your application doesn't have input focus, set up a low-level keyboard hook (that's apparently what NohBoard does). If you want to see how NohBoard is implemented, it is published on GitHub.
    – IInspectable
    Nov 23 at 11:30


















  • How can I have a window that rejects activation but still receives pointer input?
    – IInspectable
    Nov 23 at 6:34










  • That allows the on-screen keyboard to be used, while another application has input focus. If you also need to monitor keyboard input, while your application doesn't have input focus, set up a low-level keyboard hook (that's apparently what NohBoard does). If you want to see how NohBoard is implemented, it is published on GitHub.
    – IInspectable
    Nov 23 at 11:30
















How can I have a window that rejects activation but still receives pointer input?
– IInspectable
Nov 23 at 6:34




How can I have a window that rejects activation but still receives pointer input?
– IInspectable
Nov 23 at 6:34












That allows the on-screen keyboard to be used, while another application has input focus. If you also need to monitor keyboard input, while your application doesn't have input focus, set up a low-level keyboard hook (that's apparently what NohBoard does). If you want to see how NohBoard is implemented, it is published on GitHub.
– IInspectable
Nov 23 at 11:30




That allows the on-screen keyboard to be used, while another application has input focus. If you also need to monitor keyboard input, while your application doesn't have input focus, set up a low-level keyboard hook (that's apparently what NohBoard does). If you want to see how NohBoard is implemented, it is published on GitHub.
– IInspectable
Nov 23 at 11:30












2 Answers
2






active

oldest

votes


















1














On a Windows System it is not possible to activate Multiple Windows at the same Time.



Only One Window can be Active. (Focused)



But there are two Ways that can help to Solved your Problem.



1 - You can for example your Onscreen Keyboard Window, to let ignore/disable Focus that Keyboard Window. (No Focus) (No activate + +E0x08000000)



Try This Ahk Script.



Note: This is a onscreen Keys Strip from F1 to F12



Example1.ahk



Gui, +LastFound +AlwaysOnTop +ToolWindow -Caption +Border +E0x08000000
Gui, Font, s07, Arial
Loop, 12
Gui, Add, Button, % "x" 5+(A_Index-1)*60 " y5 w60 h25 vF" A_Index " gButton", F%A_Index%
Gui, Show, y0 w730 h35 NoActivate
Return

Button:
SendInput, % "{" A_GuiControl "}"
Return

GuiClose:
ExitApp
Return

~esc::exitapp


2 - Or You can Use a 3rd party script,



note : run these 2 Scripts together. (KeypressValueToREG + ShowKeypressValue)



The First one is a Large Script but you can do many things, It Will Put All your Mouse and Keyboard Movements into Only One Windows Registry Key.



The Power of this KeypressValueToREG script is, you can run it in the background, and then you can use it in other Applications or other Languages Visual Studio/Visual Basic/c++/Python/Autohotkey/? They only need to Acces/Read that One Registry Key.



keypressvalue to windows registry key



KeypressValueToREG.ahk



;KeypressValueToREG.ahk comes from KeypressOSD.ahk that was Created by Author RaptorX
; Open this Script in Wordpad and For Changelog look to the Bottom of the script.
;This code works with a getkeyname from a Dllcall (See Bottom Script- by Lexikos)
;you can press the esc key to exit.

#SingleInstance force
#NoEnv
SetBatchLines, -1
ListLines, Off

; Settings
global TransN := 200 ; 0~255
global ShowSingleKey := True
global ShowMouseButton := True
global ShowSingleModifierKey := True
global ShowModifierKeyCount := true
global ShowStickyModKeyCount := false
global DisplayTime := 2000 ; In milliseconds
global GuiPosition := "Bottom" ; Top or Bottom
global FontSize := 50
global GuiHeight := 115

CreateGUI()
CreateHotkey()
return

OnKeyPressed:
try {
key := GetKeyStr()
ShowHotkey(key)
SetTimer, HideGUI, % -1 * DisplayTime
}
return

OnKeyUp:
return

_OnKeyUp:
tickcount_start := A_TickCount
return


CreateGUI() {
global

Gui, +AlwaysOnTop -Caption +Owner +LastFound +E0x20
Gui, Margin, 0, 0
Gui, Color, Black
Gui, Font, cWhite s%FontSize% bold, Arial
Gui, Add, Text, vHotkeyText Center y20

WinSet, Transparent, %TransN%
}

CreateHotkey() {
Loop, 95
{
k := Chr(A_Index + 31)
k := (k = " ") ? "Space" : k

Hotkey, % "~*" k, OnKeyPressed
Hotkey, % "~*" k " Up", _OnKeyUp
}

Loop, 24 ; F1-F24
{
Hotkey, % "~*F" A_Index, OnKeyPressed
Hotkey, % "~*F" A_Index " Up", _OnKeyUp
}

Loop, 10 ; Numpad0 - Numpad9
{
Hotkey, % "~*Numpad" A_Index - 1, OnKeyPressed
Hotkey, % "~*Numpad" A_Index - 1 " Up", _OnKeyUp
}

Otherkeys := "WheelDown|WheelUp|WheelLeft|WheelRight|XButton1|XButton2|Browser_Forward|Browser_Back|Browser_Refresh|Browser_Stop|Browser_Search|Browser_Favorites|Browser_Home|Volume_Mute|Volume_Down|Volume_Up|Media_Next|Media_Prev|Media_Stop|Media_Play_Pause|Launch_Mail|Launch_Media|Launch_App1|Launch_App2|Help|Sleep|PrintScreen|CtrlBreak|Break|AppsKey|NumpadDot|NumpadDiv|NumpadMult|NumpadAdd|NumpadSub|NumpadEnter|Tab|Enter|Esc|BackSpace"
. "|Del|Insert|Home|End|PgUp|PgDn|Up|Down|Left|Right|ScrollLock|CapsLock|NumLock|Pause|sc145|sc146|sc046|sc123"
Loop, parse, Otherkeys, |
{
Hotkey, % "~*" A_LoopField, OnKeyPressed
Hotkey, % "~*" A_LoopField " Up", _OnKeyUp
}

If ShowMouseButton {
Loop, Parse, % "LButton|MButton|RButton", |
Hotkey, % "~*" A_LoopField, OnKeyPressed
}

for i, mod in ["Ctrl", "Shift", "Alt"] {
Hotkey, % "~*" mod, OnKeyPressed
Hotkey, % "~*" mod " Up", OnKeyUp
}
for i, mod in ["LWin", "RWin"]
Hotkey, % "~*" mod, OnKeyPressed
}

ShowHotkey(HotkeyStr) {
WinGetPos, ActWin_X, ActWin_Y, ActWin_W, ActWin_H, A
if !ActWin_W
throw

text_w := (ActWin_W > A_ScreenWidth) ? A_ScreenWidth : ActWin_W

;remove this gui codeline if you want only to Write the Value to Windows registry
;GuiControl, , HotkeyText, %HotkeyStr%
;GuiControl, , HotkeyText, %HotkeyStr%

RegWrite, REG_SZ, HKEY_CURRENT_USER,softwareGetKeypressValue,KeypressValue,%HotkeyStr%

;remove this gui codeline if you want only to Write the Value to Windows registry
;GuiControl, Move, HotkeyText, w%text_w% Center
;GuiControl, Move, HotkeyText, w%text_w% Center

if (GuiPosition = "Top")
gui_y := ActWin_Y
else
gui_y := (ActWin_Y+ActWin_H) - 115 - 50

;remove this gui codeline if you want only to Write the Value to Windows registry
;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
}

GetKeyStr() {
static modifiers := ["Ctrl", "Shift", "Alt", "LWin", "RWin"]
static repeatCount := 1

for i, mod in modifiers {
if GetKeyState(mod)
prefix .= mod " + "
}

if (!prefix && !ShowSingleKey)
throw

key := SubStr(A_ThisHotkey, 3)

if (key ~= "i)^(Ctrl|Shift|Alt|LWin|RWin)$") {
if !ShowSingleModifierKey {
throw
}
key := ""
prefix := RTrim(prefix, "+ ")

if ShowModifierKeyCount {
if !InStr(prefix, "+") && IsDoubleClickEx() {
if (A_ThisHotKey != A_PriorHotKey) || ShowStickyModKeyCount {
if (++repeatCount > 1) {
prefix .= " ( * " repeatCount " )"
}
} else {
repeatCount := 0
}
} else {
repeatCount := 1
}
}
} else {
if ( StrLen(key) = 1 ) {
key := GetKeyChar(key, "A")
} else if ( SubStr(key, 1, 2) = "sc" ) {
key := SpecialSC(key)
} else if (key = "LButton") && IsDoubleClick() {
key := "Double-Click"
}
_key := (key = "Double-Click") ? "LButton" : key

static pre_prefix, pre_key, keyCount := 1
global tickcount_start
if (prefix && pre_prefix) && (A_TickCount-tickcount_start < 300) {
if (prefix != pre_prefix) {
result := pre_prefix pre_key ", " prefix key
} else {
keyCount := (key=pre_key) ? (keyCount+1) : 1
key := (keyCount>2) ? (key " (" keyCount ")") : (pre_key ", " key)
}
} else {
keyCount := 1
}

pre_prefix := prefix
pre_key := _key

repeatCount := 1
}
return result ? result : prefix . key
}

SpecialSC(sc) {
static k := {sc046: "ScrollLock", sc145: "NumLock", sc146: "Pause", sc123: "Genius LuxeMate Scroll"}
return k[sc]
}

; by Lexikos - https://autohotkey.com/board/topic/110808-getkeyname-for-other-languages/#entry682236
GetKeyChar(Key, WinTitle:=0) {
thread := WinTitle=0 ? 0
: DllCall("GetWindowThreadProcessId", "ptr", WinExist(WinTitle), "ptr", 0)
hkl := DllCall("GetKeyboardLayout", "uint", thread, "ptr")
vk := GetKeyVK(Key), sc := GetKeySC(Key)
VarSetCapacity(state, 256, 0)
VarSetCapacity(char, 4, 0)
n := DllCall("ToUnicodeEx", "uint", vk, "uint", sc
, "ptr", &state, "ptr", &char, "int", 2, "uint", 0, "ptr", hkl)
return StrGet(&char, n, "utf-16")
}

IsDoubleClick(MSec = 300) {
Return (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < MSec)
}

IsDoubleClickEx(MSec = 300) {
preHotkey := RegExReplace(A_PriorHotkey, "i) Up$")
Return (A_ThisHotKey = preHotkey) && (A_TimeSincePriorHotkey < MSec)
}

HideGUI() {
Gui, Hide
}

~esc::exitapp
;---------------------------------------------
; ChangeLog : v2.22 (2017-02-25) - Now pressing the same combination keys continuously more than 2 times,
; for example press Ctrl+V 3 times, will displayed as "Ctrl + v (3)"
; v2.21 (2017-02-24) - Fixed LWin/RWin not poping up start menu
; v2.20 (2017-02-24) - Added displaying continuous-pressed combination keys.
; e.g.: With CTRL key held down, pressing K and U continuously will shown as "Ctrl + k, u"
; v2.10 (2017-01-22) - Added ShowStickyModKeyCount option
; v2.09 (2017-01-22) - Added ShowModifierKeyCount option
; v2.08 (2017-01-19) - Fixed a bug
; v2.07 (2017-01-19) - Added ShowSingleModifierKey option (default is True)
; v2.06 (2016-11-23) - Added more keys. Thanks to SashaChernykh.
; v2.05 (2016-10-01) - Fixed not detecting "Ctrl + ScrollLock/NumLock/Pause". Thanks to lexikos.
; v2.04 (2016-10-01) - Added NumpadDot and AppsKey
; v2.03 (2016-09-17) - Added displaying "Double-Click" of the left mouse button.
; v2.02 (2016-09-16) - Added displaying mouse button, and 3 settings (ShowMouseButton, FontSize, GuiHeight)
; v2.01 (2016-09-11) - Display non english keyboard layout characters when combine with modifer keys.
; v2.00 (2016-09-01) - Removed the "Fade out" effect because of its buggy.
; - Added support for non english keyboard layout.
; - Added GuiPosition setting.
; v1.00 (2013-10-11) - First release.
;--------------------------------------------


And the Second One it will Show Visual On your Desktop Screen All your Mouse and Keyboard Movements, You can Change this Script a little bit and then make your own keyboard that can show Visual all your keyboard Movements,



and if you use the trick from Example1.ahk then you can make a Professional Onscreen Keyboard Without focus the Window.



show keyboard movements



ShowKeypressValue.ahk



#SingleInstance force
Gui, +AlwaysOnTop -MaximizeBox ; -Caption +Resize -MinimizeBox +Disabled -SysMenu -Owner +OwnDialogs
Gui, Add, Text, center y10 h50 w300 vVar, %KeypressValue%
Gui, Color, White
Gui, show
size=20
Gui, Font, s%size%
GuiControl, Font, var

;run KeypressValueToREG.ahk - together with ShowKeypressValue.ahk
;The Features Are:
; - It will Show On your Screen, [All your Mouse Movements] and [All Keyboard Shortcuts Movement]
; - You can Make Scripts, that can do actions with MultiClicks on All Keyboard Shortcuts Clicks, How Cool Is that.

loop
{
RegRead, KeypressValue, HKEY_CURRENT_USER,softwareGetKeypressValue,KeypressValue ; read KeypressValue
sleep 50
GuiControl,, var, %KeypressValue%



if (KeypressValue="Alt ( * 2 )") ;use this for [1x=Alt][2x=Alt ( * 2 )][3x=Alt ( * 3 )] [and many more]
{
;Here you can put any AHK CODE
msgbox you did click Alt 2x Times
}

if (KeypressValue="Alt ( * 3 )") ;use this for [1x=Alt][2x=Alt ( * 2 )][3x=Alt ( * 3 )] [and many more]
{
;Here you can put any AHK CODE
msgbox you did click Alt 3x Times
}


} ;End Loop

~esc::exitapp





share|improve this answer























  • This is fantastic looking, which part would I need to edit, to re-direct keystrokes to "kb.exe"? @stevecody
    – Iroamalone Atnight
    Nov 30 at 8:10












  • @Iroamalone Atnight - there are two ways to re-direct the keystrokes - 1:you can edit ShowKeypressValue.ahk and re-direct the keystrokes to kb.exe - 2:or you can use an other languages that can acces only that Windows Registry Key (ps - i am not sure did you make kb.exe with gamemaker studio 1.4 if it is you will need to find out if that languages is able to read that Windows Registry key)
    – stevecody
    Nov 30 at 9:40










  • @Iroamalone Atnight - if the gamemaker studio 1.4 Languages is not able to acces that Windows Registry Key then you can think about a ThirdPart Automation Software, i am using Buttoncommander - with this you can create very simple Button icons on your Desktop that can execute any kind of Autohotkey Scripts - you can then do this, if the Windows Registry Key value is "a" then Highlight Button icon a
    – stevecody
    Nov 30 at 11:35










  • @Iroamalone Atnight - Autohotkey Together With Buttoncommander you can Make many thinks more watch to these Videos and you now why Toolbars,Clipboards,Virtual keyboards,Monitor keyboards,Launchpads,Enterpads,Intelligence Google Search Buttons
    – stevecody
    Nov 30 at 11:38










  • Would you be interested in designing it for me? How much would you charge? this stuff is very confusing for me, I don't think I can do it currently without a lot of training. E-mail at "Bladevampirek@aol.com" if you are interested, I can send you the program in order to see if you're able to do it or not.
    – Iroamalone Atnight
    Dec 26 at 7:28



















0














Try this .



#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
#InstallKeybdHook
#UseHook

; Add the keys you want send to the last active window in this array:
Keys := ["a","b","c","1","2","3","space",",",".","-","_","F3"] ; ...
for each, key in Keys
Hotkey, %key%, send_key_to_last_active_window, on

SetTimer get_last_active_window, 300 ; you can decrease this period (number of milliseconds that pass before the timer is executed)
return

send_key_to_last_active_window:
Send, {%A_ThisHotkey%}
; WinGetTitle, Title, ahk_id %LastActive_ID%
; WinGetClass, Class, ahk_id %LastActive_ID%
; ToolTip, last_active_window=%Title% ahk_class %Class%,,, 2
; If Class in Notepad,WordPadClass ; if the last active window is Notepad or WordPad
ControlSend,, {%A_ThisHotkey%}, ahk_id %LastActive_ID%
return

get_last_active_window:
WinGet, CurrentActive_ID, ID, A
If (CurrentActive_ID != NewActive_ID)
{
LastActive_ID = %NewActive_ID%
NewActive_ID := CurrentActive_ID
; WinGetTitle, NewActiveTitle, ahk_id %NewActive_ID%
; WinGetTitle, LastActiveTitle, ahk_id %LastActive_ID%
SetTimer get_last_active_window, off
; CoordMode, ToolTip, Screen
; ToolTip, Current active window:`nTitle: %NewActiveTitle%`nID: %NewActive_ID%`n`nLast active window:`nTitle: %LastActiveTitle%`nID: %LastActive_ID%, 0, 0, 1
WinWaitNotActive, ahk_id %NewActive_ID%
SetTimer get_last_active_window, on
}
return


See For-Loop, Hotkey and SetTimer in the documentation.






share|improve this answer























  • Totally unreliable, with lots of flicker going about. This is not useful, not even as a proof-of-concept (unless you are trying to prove, that this is not a solution).
    – IInspectable
    Nov 23 at 11:26










  • On my system it's working. The tooltips are only for testing.
    – user3419297
    Nov 23 at 11:47












  • Works on My Machine certification is no indication, that code is correct. Clearly, that script runs a timer with arbitrary time, to employ polling. Polling is a way of sampling. As with all sampling, you are missing all events that occur in between sampling points. No, I'm afraid, this is just a kludge, not a solution. The solution is given in comments.
    – IInspectable
    Nov 23 at 11:57










  • Logically, If it doesn't work on your system/program, something is wrong or missing in it or in the way you're using it. As far as I can see in your profile, you may be an expert in other domains, but not in AHK. And the user asked for a solution in AHK
    – user3419297
    Nov 23 at 13:17












  • I just explained one of many failure modes (polling). It doesn't matter, whether I answer AHK questions here or not. I am in a fairly comfortable position to know the system AHK runs on, and I provided the system-level solution to the question the OP appears to have asked. The system makes the rules that any program needs to follow, AHK being no exception. Contrast your proposed solution with my comments to the question, and you'll quickly see, which approach is more likely to produce a reliable solution. A solution need not fail on my system for me to see how it can fail.
    – IInspectable
    Nov 23 at 13:21











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53437494%2fis-there-a-way-to-make-multiple-windows-active-at-one-time-in-windows%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














On a Windows System it is not possible to activate Multiple Windows at the same Time.



Only One Window can be Active. (Focused)



But there are two Ways that can help to Solved your Problem.



1 - You can for example your Onscreen Keyboard Window, to let ignore/disable Focus that Keyboard Window. (No Focus) (No activate + +E0x08000000)



Try This Ahk Script.



Note: This is a onscreen Keys Strip from F1 to F12



Example1.ahk



Gui, +LastFound +AlwaysOnTop +ToolWindow -Caption +Border +E0x08000000
Gui, Font, s07, Arial
Loop, 12
Gui, Add, Button, % "x" 5+(A_Index-1)*60 " y5 w60 h25 vF" A_Index " gButton", F%A_Index%
Gui, Show, y0 w730 h35 NoActivate
Return

Button:
SendInput, % "{" A_GuiControl "}"
Return

GuiClose:
ExitApp
Return

~esc::exitapp


2 - Or You can Use a 3rd party script,



note : run these 2 Scripts together. (KeypressValueToREG + ShowKeypressValue)



The First one is a Large Script but you can do many things, It Will Put All your Mouse and Keyboard Movements into Only One Windows Registry Key.



The Power of this KeypressValueToREG script is, you can run it in the background, and then you can use it in other Applications or other Languages Visual Studio/Visual Basic/c++/Python/Autohotkey/? They only need to Acces/Read that One Registry Key.



keypressvalue to windows registry key



KeypressValueToREG.ahk



;KeypressValueToREG.ahk comes from KeypressOSD.ahk that was Created by Author RaptorX
; Open this Script in Wordpad and For Changelog look to the Bottom of the script.
;This code works with a getkeyname from a Dllcall (See Bottom Script- by Lexikos)
;you can press the esc key to exit.

#SingleInstance force
#NoEnv
SetBatchLines, -1
ListLines, Off

; Settings
global TransN := 200 ; 0~255
global ShowSingleKey := True
global ShowMouseButton := True
global ShowSingleModifierKey := True
global ShowModifierKeyCount := true
global ShowStickyModKeyCount := false
global DisplayTime := 2000 ; In milliseconds
global GuiPosition := "Bottom" ; Top or Bottom
global FontSize := 50
global GuiHeight := 115

CreateGUI()
CreateHotkey()
return

OnKeyPressed:
try {
key := GetKeyStr()
ShowHotkey(key)
SetTimer, HideGUI, % -1 * DisplayTime
}
return

OnKeyUp:
return

_OnKeyUp:
tickcount_start := A_TickCount
return


CreateGUI() {
global

Gui, +AlwaysOnTop -Caption +Owner +LastFound +E0x20
Gui, Margin, 0, 0
Gui, Color, Black
Gui, Font, cWhite s%FontSize% bold, Arial
Gui, Add, Text, vHotkeyText Center y20

WinSet, Transparent, %TransN%
}

CreateHotkey() {
Loop, 95
{
k := Chr(A_Index + 31)
k := (k = " ") ? "Space" : k

Hotkey, % "~*" k, OnKeyPressed
Hotkey, % "~*" k " Up", _OnKeyUp
}

Loop, 24 ; F1-F24
{
Hotkey, % "~*F" A_Index, OnKeyPressed
Hotkey, % "~*F" A_Index " Up", _OnKeyUp
}

Loop, 10 ; Numpad0 - Numpad9
{
Hotkey, % "~*Numpad" A_Index - 1, OnKeyPressed
Hotkey, % "~*Numpad" A_Index - 1 " Up", _OnKeyUp
}

Otherkeys := "WheelDown|WheelUp|WheelLeft|WheelRight|XButton1|XButton2|Browser_Forward|Browser_Back|Browser_Refresh|Browser_Stop|Browser_Search|Browser_Favorites|Browser_Home|Volume_Mute|Volume_Down|Volume_Up|Media_Next|Media_Prev|Media_Stop|Media_Play_Pause|Launch_Mail|Launch_Media|Launch_App1|Launch_App2|Help|Sleep|PrintScreen|CtrlBreak|Break|AppsKey|NumpadDot|NumpadDiv|NumpadMult|NumpadAdd|NumpadSub|NumpadEnter|Tab|Enter|Esc|BackSpace"
. "|Del|Insert|Home|End|PgUp|PgDn|Up|Down|Left|Right|ScrollLock|CapsLock|NumLock|Pause|sc145|sc146|sc046|sc123"
Loop, parse, Otherkeys, |
{
Hotkey, % "~*" A_LoopField, OnKeyPressed
Hotkey, % "~*" A_LoopField " Up", _OnKeyUp
}

If ShowMouseButton {
Loop, Parse, % "LButton|MButton|RButton", |
Hotkey, % "~*" A_LoopField, OnKeyPressed
}

for i, mod in ["Ctrl", "Shift", "Alt"] {
Hotkey, % "~*" mod, OnKeyPressed
Hotkey, % "~*" mod " Up", OnKeyUp
}
for i, mod in ["LWin", "RWin"]
Hotkey, % "~*" mod, OnKeyPressed
}

ShowHotkey(HotkeyStr) {
WinGetPos, ActWin_X, ActWin_Y, ActWin_W, ActWin_H, A
if !ActWin_W
throw

text_w := (ActWin_W > A_ScreenWidth) ? A_ScreenWidth : ActWin_W

;remove this gui codeline if you want only to Write the Value to Windows registry
;GuiControl, , HotkeyText, %HotkeyStr%
;GuiControl, , HotkeyText, %HotkeyStr%

RegWrite, REG_SZ, HKEY_CURRENT_USER,softwareGetKeypressValue,KeypressValue,%HotkeyStr%

;remove this gui codeline if you want only to Write the Value to Windows registry
;GuiControl, Move, HotkeyText, w%text_w% Center
;GuiControl, Move, HotkeyText, w%text_w% Center

if (GuiPosition = "Top")
gui_y := ActWin_Y
else
gui_y := (ActWin_Y+ActWin_H) - 115 - 50

;remove this gui codeline if you want only to Write the Value to Windows registry
;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
}

GetKeyStr() {
static modifiers := ["Ctrl", "Shift", "Alt", "LWin", "RWin"]
static repeatCount := 1

for i, mod in modifiers {
if GetKeyState(mod)
prefix .= mod " + "
}

if (!prefix && !ShowSingleKey)
throw

key := SubStr(A_ThisHotkey, 3)

if (key ~= "i)^(Ctrl|Shift|Alt|LWin|RWin)$") {
if !ShowSingleModifierKey {
throw
}
key := ""
prefix := RTrim(prefix, "+ ")

if ShowModifierKeyCount {
if !InStr(prefix, "+") && IsDoubleClickEx() {
if (A_ThisHotKey != A_PriorHotKey) || ShowStickyModKeyCount {
if (++repeatCount > 1) {
prefix .= " ( * " repeatCount " )"
}
} else {
repeatCount := 0
}
} else {
repeatCount := 1
}
}
} else {
if ( StrLen(key) = 1 ) {
key := GetKeyChar(key, "A")
} else if ( SubStr(key, 1, 2) = "sc" ) {
key := SpecialSC(key)
} else if (key = "LButton") && IsDoubleClick() {
key := "Double-Click"
}
_key := (key = "Double-Click") ? "LButton" : key

static pre_prefix, pre_key, keyCount := 1
global tickcount_start
if (prefix && pre_prefix) && (A_TickCount-tickcount_start < 300) {
if (prefix != pre_prefix) {
result := pre_prefix pre_key ", " prefix key
} else {
keyCount := (key=pre_key) ? (keyCount+1) : 1
key := (keyCount>2) ? (key " (" keyCount ")") : (pre_key ", " key)
}
} else {
keyCount := 1
}

pre_prefix := prefix
pre_key := _key

repeatCount := 1
}
return result ? result : prefix . key
}

SpecialSC(sc) {
static k := {sc046: "ScrollLock", sc145: "NumLock", sc146: "Pause", sc123: "Genius LuxeMate Scroll"}
return k[sc]
}

; by Lexikos - https://autohotkey.com/board/topic/110808-getkeyname-for-other-languages/#entry682236
GetKeyChar(Key, WinTitle:=0) {
thread := WinTitle=0 ? 0
: DllCall("GetWindowThreadProcessId", "ptr", WinExist(WinTitle), "ptr", 0)
hkl := DllCall("GetKeyboardLayout", "uint", thread, "ptr")
vk := GetKeyVK(Key), sc := GetKeySC(Key)
VarSetCapacity(state, 256, 0)
VarSetCapacity(char, 4, 0)
n := DllCall("ToUnicodeEx", "uint", vk, "uint", sc
, "ptr", &state, "ptr", &char, "int", 2, "uint", 0, "ptr", hkl)
return StrGet(&char, n, "utf-16")
}

IsDoubleClick(MSec = 300) {
Return (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < MSec)
}

IsDoubleClickEx(MSec = 300) {
preHotkey := RegExReplace(A_PriorHotkey, "i) Up$")
Return (A_ThisHotKey = preHotkey) && (A_TimeSincePriorHotkey < MSec)
}

HideGUI() {
Gui, Hide
}

~esc::exitapp
;---------------------------------------------
; ChangeLog : v2.22 (2017-02-25) - Now pressing the same combination keys continuously more than 2 times,
; for example press Ctrl+V 3 times, will displayed as "Ctrl + v (3)"
; v2.21 (2017-02-24) - Fixed LWin/RWin not poping up start menu
; v2.20 (2017-02-24) - Added displaying continuous-pressed combination keys.
; e.g.: With CTRL key held down, pressing K and U continuously will shown as "Ctrl + k, u"
; v2.10 (2017-01-22) - Added ShowStickyModKeyCount option
; v2.09 (2017-01-22) - Added ShowModifierKeyCount option
; v2.08 (2017-01-19) - Fixed a bug
; v2.07 (2017-01-19) - Added ShowSingleModifierKey option (default is True)
; v2.06 (2016-11-23) - Added more keys. Thanks to SashaChernykh.
; v2.05 (2016-10-01) - Fixed not detecting "Ctrl + ScrollLock/NumLock/Pause". Thanks to lexikos.
; v2.04 (2016-10-01) - Added NumpadDot and AppsKey
; v2.03 (2016-09-17) - Added displaying "Double-Click" of the left mouse button.
; v2.02 (2016-09-16) - Added displaying mouse button, and 3 settings (ShowMouseButton, FontSize, GuiHeight)
; v2.01 (2016-09-11) - Display non english keyboard layout characters when combine with modifer keys.
; v2.00 (2016-09-01) - Removed the "Fade out" effect because of its buggy.
; - Added support for non english keyboard layout.
; - Added GuiPosition setting.
; v1.00 (2013-10-11) - First release.
;--------------------------------------------


And the Second One it will Show Visual On your Desktop Screen All your Mouse and Keyboard Movements, You can Change this Script a little bit and then make your own keyboard that can show Visual all your keyboard Movements,



and if you use the trick from Example1.ahk then you can make a Professional Onscreen Keyboard Without focus the Window.



show keyboard movements



ShowKeypressValue.ahk



#SingleInstance force
Gui, +AlwaysOnTop -MaximizeBox ; -Caption +Resize -MinimizeBox +Disabled -SysMenu -Owner +OwnDialogs
Gui, Add, Text, center y10 h50 w300 vVar, %KeypressValue%
Gui, Color, White
Gui, show
size=20
Gui, Font, s%size%
GuiControl, Font, var

;run KeypressValueToREG.ahk - together with ShowKeypressValue.ahk
;The Features Are:
; - It will Show On your Screen, [All your Mouse Movements] and [All Keyboard Shortcuts Movement]
; - You can Make Scripts, that can do actions with MultiClicks on All Keyboard Shortcuts Clicks, How Cool Is that.

loop
{
RegRead, KeypressValue, HKEY_CURRENT_USER,softwareGetKeypressValue,KeypressValue ; read KeypressValue
sleep 50
GuiControl,, var, %KeypressValue%



if (KeypressValue="Alt ( * 2 )") ;use this for [1x=Alt][2x=Alt ( * 2 )][3x=Alt ( * 3 )] [and many more]
{
;Here you can put any AHK CODE
msgbox you did click Alt 2x Times
}

if (KeypressValue="Alt ( * 3 )") ;use this for [1x=Alt][2x=Alt ( * 2 )][3x=Alt ( * 3 )] [and many more]
{
;Here you can put any AHK CODE
msgbox you did click Alt 3x Times
}


} ;End Loop

~esc::exitapp





share|improve this answer























  • This is fantastic looking, which part would I need to edit, to re-direct keystrokes to "kb.exe"? @stevecody
    – Iroamalone Atnight
    Nov 30 at 8:10












  • @Iroamalone Atnight - there are two ways to re-direct the keystrokes - 1:you can edit ShowKeypressValue.ahk and re-direct the keystrokes to kb.exe - 2:or you can use an other languages that can acces only that Windows Registry Key (ps - i am not sure did you make kb.exe with gamemaker studio 1.4 if it is you will need to find out if that languages is able to read that Windows Registry key)
    – stevecody
    Nov 30 at 9:40










  • @Iroamalone Atnight - if the gamemaker studio 1.4 Languages is not able to acces that Windows Registry Key then you can think about a ThirdPart Automation Software, i am using Buttoncommander - with this you can create very simple Button icons on your Desktop that can execute any kind of Autohotkey Scripts - you can then do this, if the Windows Registry Key value is "a" then Highlight Button icon a
    – stevecody
    Nov 30 at 11:35










  • @Iroamalone Atnight - Autohotkey Together With Buttoncommander you can Make many thinks more watch to these Videos and you now why Toolbars,Clipboards,Virtual keyboards,Monitor keyboards,Launchpads,Enterpads,Intelligence Google Search Buttons
    – stevecody
    Nov 30 at 11:38










  • Would you be interested in designing it for me? How much would you charge? this stuff is very confusing for me, I don't think I can do it currently without a lot of training. E-mail at "Bladevampirek@aol.com" if you are interested, I can send you the program in order to see if you're able to do it or not.
    – Iroamalone Atnight
    Dec 26 at 7:28
















1














On a Windows System it is not possible to activate Multiple Windows at the same Time.



Only One Window can be Active. (Focused)



But there are two Ways that can help to Solved your Problem.



1 - You can for example your Onscreen Keyboard Window, to let ignore/disable Focus that Keyboard Window. (No Focus) (No activate + +E0x08000000)



Try This Ahk Script.



Note: This is a onscreen Keys Strip from F1 to F12



Example1.ahk



Gui, +LastFound +AlwaysOnTop +ToolWindow -Caption +Border +E0x08000000
Gui, Font, s07, Arial
Loop, 12
Gui, Add, Button, % "x" 5+(A_Index-1)*60 " y5 w60 h25 vF" A_Index " gButton", F%A_Index%
Gui, Show, y0 w730 h35 NoActivate
Return

Button:
SendInput, % "{" A_GuiControl "}"
Return

GuiClose:
ExitApp
Return

~esc::exitapp


2 - Or You can Use a 3rd party script,



note : run these 2 Scripts together. (KeypressValueToREG + ShowKeypressValue)



The First one is a Large Script but you can do many things, It Will Put All your Mouse and Keyboard Movements into Only One Windows Registry Key.



The Power of this KeypressValueToREG script is, you can run it in the background, and then you can use it in other Applications or other Languages Visual Studio/Visual Basic/c++/Python/Autohotkey/? They only need to Acces/Read that One Registry Key.



keypressvalue to windows registry key



KeypressValueToREG.ahk



;KeypressValueToREG.ahk comes from KeypressOSD.ahk that was Created by Author RaptorX
; Open this Script in Wordpad and For Changelog look to the Bottom of the script.
;This code works with a getkeyname from a Dllcall (See Bottom Script- by Lexikos)
;you can press the esc key to exit.

#SingleInstance force
#NoEnv
SetBatchLines, -1
ListLines, Off

; Settings
global TransN := 200 ; 0~255
global ShowSingleKey := True
global ShowMouseButton := True
global ShowSingleModifierKey := True
global ShowModifierKeyCount := true
global ShowStickyModKeyCount := false
global DisplayTime := 2000 ; In milliseconds
global GuiPosition := "Bottom" ; Top or Bottom
global FontSize := 50
global GuiHeight := 115

CreateGUI()
CreateHotkey()
return

OnKeyPressed:
try {
key := GetKeyStr()
ShowHotkey(key)
SetTimer, HideGUI, % -1 * DisplayTime
}
return

OnKeyUp:
return

_OnKeyUp:
tickcount_start := A_TickCount
return


CreateGUI() {
global

Gui, +AlwaysOnTop -Caption +Owner +LastFound +E0x20
Gui, Margin, 0, 0
Gui, Color, Black
Gui, Font, cWhite s%FontSize% bold, Arial
Gui, Add, Text, vHotkeyText Center y20

WinSet, Transparent, %TransN%
}

CreateHotkey() {
Loop, 95
{
k := Chr(A_Index + 31)
k := (k = " ") ? "Space" : k

Hotkey, % "~*" k, OnKeyPressed
Hotkey, % "~*" k " Up", _OnKeyUp
}

Loop, 24 ; F1-F24
{
Hotkey, % "~*F" A_Index, OnKeyPressed
Hotkey, % "~*F" A_Index " Up", _OnKeyUp
}

Loop, 10 ; Numpad0 - Numpad9
{
Hotkey, % "~*Numpad" A_Index - 1, OnKeyPressed
Hotkey, % "~*Numpad" A_Index - 1 " Up", _OnKeyUp
}

Otherkeys := "WheelDown|WheelUp|WheelLeft|WheelRight|XButton1|XButton2|Browser_Forward|Browser_Back|Browser_Refresh|Browser_Stop|Browser_Search|Browser_Favorites|Browser_Home|Volume_Mute|Volume_Down|Volume_Up|Media_Next|Media_Prev|Media_Stop|Media_Play_Pause|Launch_Mail|Launch_Media|Launch_App1|Launch_App2|Help|Sleep|PrintScreen|CtrlBreak|Break|AppsKey|NumpadDot|NumpadDiv|NumpadMult|NumpadAdd|NumpadSub|NumpadEnter|Tab|Enter|Esc|BackSpace"
. "|Del|Insert|Home|End|PgUp|PgDn|Up|Down|Left|Right|ScrollLock|CapsLock|NumLock|Pause|sc145|sc146|sc046|sc123"
Loop, parse, Otherkeys, |
{
Hotkey, % "~*" A_LoopField, OnKeyPressed
Hotkey, % "~*" A_LoopField " Up", _OnKeyUp
}

If ShowMouseButton {
Loop, Parse, % "LButton|MButton|RButton", |
Hotkey, % "~*" A_LoopField, OnKeyPressed
}

for i, mod in ["Ctrl", "Shift", "Alt"] {
Hotkey, % "~*" mod, OnKeyPressed
Hotkey, % "~*" mod " Up", OnKeyUp
}
for i, mod in ["LWin", "RWin"]
Hotkey, % "~*" mod, OnKeyPressed
}

ShowHotkey(HotkeyStr) {
WinGetPos, ActWin_X, ActWin_Y, ActWin_W, ActWin_H, A
if !ActWin_W
throw

text_w := (ActWin_W > A_ScreenWidth) ? A_ScreenWidth : ActWin_W

;remove this gui codeline if you want only to Write the Value to Windows registry
;GuiControl, , HotkeyText, %HotkeyStr%
;GuiControl, , HotkeyText, %HotkeyStr%

RegWrite, REG_SZ, HKEY_CURRENT_USER,softwareGetKeypressValue,KeypressValue,%HotkeyStr%

;remove this gui codeline if you want only to Write the Value to Windows registry
;GuiControl, Move, HotkeyText, w%text_w% Center
;GuiControl, Move, HotkeyText, w%text_w% Center

if (GuiPosition = "Top")
gui_y := ActWin_Y
else
gui_y := (ActWin_Y+ActWin_H) - 115 - 50

;remove this gui codeline if you want only to Write the Value to Windows registry
;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
}

GetKeyStr() {
static modifiers := ["Ctrl", "Shift", "Alt", "LWin", "RWin"]
static repeatCount := 1

for i, mod in modifiers {
if GetKeyState(mod)
prefix .= mod " + "
}

if (!prefix && !ShowSingleKey)
throw

key := SubStr(A_ThisHotkey, 3)

if (key ~= "i)^(Ctrl|Shift|Alt|LWin|RWin)$") {
if !ShowSingleModifierKey {
throw
}
key := ""
prefix := RTrim(prefix, "+ ")

if ShowModifierKeyCount {
if !InStr(prefix, "+") && IsDoubleClickEx() {
if (A_ThisHotKey != A_PriorHotKey) || ShowStickyModKeyCount {
if (++repeatCount > 1) {
prefix .= " ( * " repeatCount " )"
}
} else {
repeatCount := 0
}
} else {
repeatCount := 1
}
}
} else {
if ( StrLen(key) = 1 ) {
key := GetKeyChar(key, "A")
} else if ( SubStr(key, 1, 2) = "sc" ) {
key := SpecialSC(key)
} else if (key = "LButton") && IsDoubleClick() {
key := "Double-Click"
}
_key := (key = "Double-Click") ? "LButton" : key

static pre_prefix, pre_key, keyCount := 1
global tickcount_start
if (prefix && pre_prefix) && (A_TickCount-tickcount_start < 300) {
if (prefix != pre_prefix) {
result := pre_prefix pre_key ", " prefix key
} else {
keyCount := (key=pre_key) ? (keyCount+1) : 1
key := (keyCount>2) ? (key " (" keyCount ")") : (pre_key ", " key)
}
} else {
keyCount := 1
}

pre_prefix := prefix
pre_key := _key

repeatCount := 1
}
return result ? result : prefix . key
}

SpecialSC(sc) {
static k := {sc046: "ScrollLock", sc145: "NumLock", sc146: "Pause", sc123: "Genius LuxeMate Scroll"}
return k[sc]
}

; by Lexikos - https://autohotkey.com/board/topic/110808-getkeyname-for-other-languages/#entry682236
GetKeyChar(Key, WinTitle:=0) {
thread := WinTitle=0 ? 0
: DllCall("GetWindowThreadProcessId", "ptr", WinExist(WinTitle), "ptr", 0)
hkl := DllCall("GetKeyboardLayout", "uint", thread, "ptr")
vk := GetKeyVK(Key), sc := GetKeySC(Key)
VarSetCapacity(state, 256, 0)
VarSetCapacity(char, 4, 0)
n := DllCall("ToUnicodeEx", "uint", vk, "uint", sc
, "ptr", &state, "ptr", &char, "int", 2, "uint", 0, "ptr", hkl)
return StrGet(&char, n, "utf-16")
}

IsDoubleClick(MSec = 300) {
Return (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < MSec)
}

IsDoubleClickEx(MSec = 300) {
preHotkey := RegExReplace(A_PriorHotkey, "i) Up$")
Return (A_ThisHotKey = preHotkey) && (A_TimeSincePriorHotkey < MSec)
}

HideGUI() {
Gui, Hide
}

~esc::exitapp
;---------------------------------------------
; ChangeLog : v2.22 (2017-02-25) - Now pressing the same combination keys continuously more than 2 times,
; for example press Ctrl+V 3 times, will displayed as "Ctrl + v (3)"
; v2.21 (2017-02-24) - Fixed LWin/RWin not poping up start menu
; v2.20 (2017-02-24) - Added displaying continuous-pressed combination keys.
; e.g.: With CTRL key held down, pressing K and U continuously will shown as "Ctrl + k, u"
; v2.10 (2017-01-22) - Added ShowStickyModKeyCount option
; v2.09 (2017-01-22) - Added ShowModifierKeyCount option
; v2.08 (2017-01-19) - Fixed a bug
; v2.07 (2017-01-19) - Added ShowSingleModifierKey option (default is True)
; v2.06 (2016-11-23) - Added more keys. Thanks to SashaChernykh.
; v2.05 (2016-10-01) - Fixed not detecting "Ctrl + ScrollLock/NumLock/Pause". Thanks to lexikos.
; v2.04 (2016-10-01) - Added NumpadDot and AppsKey
; v2.03 (2016-09-17) - Added displaying "Double-Click" of the left mouse button.
; v2.02 (2016-09-16) - Added displaying mouse button, and 3 settings (ShowMouseButton, FontSize, GuiHeight)
; v2.01 (2016-09-11) - Display non english keyboard layout characters when combine with modifer keys.
; v2.00 (2016-09-01) - Removed the "Fade out" effect because of its buggy.
; - Added support for non english keyboard layout.
; - Added GuiPosition setting.
; v1.00 (2013-10-11) - First release.
;--------------------------------------------


And the Second One it will Show Visual On your Desktop Screen All your Mouse and Keyboard Movements, You can Change this Script a little bit and then make your own keyboard that can show Visual all your keyboard Movements,



and if you use the trick from Example1.ahk then you can make a Professional Onscreen Keyboard Without focus the Window.



show keyboard movements



ShowKeypressValue.ahk



#SingleInstance force
Gui, +AlwaysOnTop -MaximizeBox ; -Caption +Resize -MinimizeBox +Disabled -SysMenu -Owner +OwnDialogs
Gui, Add, Text, center y10 h50 w300 vVar, %KeypressValue%
Gui, Color, White
Gui, show
size=20
Gui, Font, s%size%
GuiControl, Font, var

;run KeypressValueToREG.ahk - together with ShowKeypressValue.ahk
;The Features Are:
; - It will Show On your Screen, [All your Mouse Movements] and [All Keyboard Shortcuts Movement]
; - You can Make Scripts, that can do actions with MultiClicks on All Keyboard Shortcuts Clicks, How Cool Is that.

loop
{
RegRead, KeypressValue, HKEY_CURRENT_USER,softwareGetKeypressValue,KeypressValue ; read KeypressValue
sleep 50
GuiControl,, var, %KeypressValue%



if (KeypressValue="Alt ( * 2 )") ;use this for [1x=Alt][2x=Alt ( * 2 )][3x=Alt ( * 3 )] [and many more]
{
;Here you can put any AHK CODE
msgbox you did click Alt 2x Times
}

if (KeypressValue="Alt ( * 3 )") ;use this for [1x=Alt][2x=Alt ( * 2 )][3x=Alt ( * 3 )] [and many more]
{
;Here you can put any AHK CODE
msgbox you did click Alt 3x Times
}


} ;End Loop

~esc::exitapp





share|improve this answer























  • This is fantastic looking, which part would I need to edit, to re-direct keystrokes to "kb.exe"? @stevecody
    – Iroamalone Atnight
    Nov 30 at 8:10












  • @Iroamalone Atnight - there are two ways to re-direct the keystrokes - 1:you can edit ShowKeypressValue.ahk and re-direct the keystrokes to kb.exe - 2:or you can use an other languages that can acces only that Windows Registry Key (ps - i am not sure did you make kb.exe with gamemaker studio 1.4 if it is you will need to find out if that languages is able to read that Windows Registry key)
    – stevecody
    Nov 30 at 9:40










  • @Iroamalone Atnight - if the gamemaker studio 1.4 Languages is not able to acces that Windows Registry Key then you can think about a ThirdPart Automation Software, i am using Buttoncommander - with this you can create very simple Button icons on your Desktop that can execute any kind of Autohotkey Scripts - you can then do this, if the Windows Registry Key value is "a" then Highlight Button icon a
    – stevecody
    Nov 30 at 11:35










  • @Iroamalone Atnight - Autohotkey Together With Buttoncommander you can Make many thinks more watch to these Videos and you now why Toolbars,Clipboards,Virtual keyboards,Monitor keyboards,Launchpads,Enterpads,Intelligence Google Search Buttons
    – stevecody
    Nov 30 at 11:38










  • Would you be interested in designing it for me? How much would you charge? this stuff is very confusing for me, I don't think I can do it currently without a lot of training. E-mail at "Bladevampirek@aol.com" if you are interested, I can send you the program in order to see if you're able to do it or not.
    – Iroamalone Atnight
    Dec 26 at 7:28














1












1








1






On a Windows System it is not possible to activate Multiple Windows at the same Time.



Only One Window can be Active. (Focused)



But there are two Ways that can help to Solved your Problem.



1 - You can for example your Onscreen Keyboard Window, to let ignore/disable Focus that Keyboard Window. (No Focus) (No activate + +E0x08000000)



Try This Ahk Script.



Note: This is a onscreen Keys Strip from F1 to F12



Example1.ahk



Gui, +LastFound +AlwaysOnTop +ToolWindow -Caption +Border +E0x08000000
Gui, Font, s07, Arial
Loop, 12
Gui, Add, Button, % "x" 5+(A_Index-1)*60 " y5 w60 h25 vF" A_Index " gButton", F%A_Index%
Gui, Show, y0 w730 h35 NoActivate
Return

Button:
SendInput, % "{" A_GuiControl "}"
Return

GuiClose:
ExitApp
Return

~esc::exitapp


2 - Or You can Use a 3rd party script,



note : run these 2 Scripts together. (KeypressValueToREG + ShowKeypressValue)



The First one is a Large Script but you can do many things, It Will Put All your Mouse and Keyboard Movements into Only One Windows Registry Key.



The Power of this KeypressValueToREG script is, you can run it in the background, and then you can use it in other Applications or other Languages Visual Studio/Visual Basic/c++/Python/Autohotkey/? They only need to Acces/Read that One Registry Key.



keypressvalue to windows registry key



KeypressValueToREG.ahk



;KeypressValueToREG.ahk comes from KeypressOSD.ahk that was Created by Author RaptorX
; Open this Script in Wordpad and For Changelog look to the Bottom of the script.
;This code works with a getkeyname from a Dllcall (See Bottom Script- by Lexikos)
;you can press the esc key to exit.

#SingleInstance force
#NoEnv
SetBatchLines, -1
ListLines, Off

; Settings
global TransN := 200 ; 0~255
global ShowSingleKey := True
global ShowMouseButton := True
global ShowSingleModifierKey := True
global ShowModifierKeyCount := true
global ShowStickyModKeyCount := false
global DisplayTime := 2000 ; In milliseconds
global GuiPosition := "Bottom" ; Top or Bottom
global FontSize := 50
global GuiHeight := 115

CreateGUI()
CreateHotkey()
return

OnKeyPressed:
try {
key := GetKeyStr()
ShowHotkey(key)
SetTimer, HideGUI, % -1 * DisplayTime
}
return

OnKeyUp:
return

_OnKeyUp:
tickcount_start := A_TickCount
return


CreateGUI() {
global

Gui, +AlwaysOnTop -Caption +Owner +LastFound +E0x20
Gui, Margin, 0, 0
Gui, Color, Black
Gui, Font, cWhite s%FontSize% bold, Arial
Gui, Add, Text, vHotkeyText Center y20

WinSet, Transparent, %TransN%
}

CreateHotkey() {
Loop, 95
{
k := Chr(A_Index + 31)
k := (k = " ") ? "Space" : k

Hotkey, % "~*" k, OnKeyPressed
Hotkey, % "~*" k " Up", _OnKeyUp
}

Loop, 24 ; F1-F24
{
Hotkey, % "~*F" A_Index, OnKeyPressed
Hotkey, % "~*F" A_Index " Up", _OnKeyUp
}

Loop, 10 ; Numpad0 - Numpad9
{
Hotkey, % "~*Numpad" A_Index - 1, OnKeyPressed
Hotkey, % "~*Numpad" A_Index - 1 " Up", _OnKeyUp
}

Otherkeys := "WheelDown|WheelUp|WheelLeft|WheelRight|XButton1|XButton2|Browser_Forward|Browser_Back|Browser_Refresh|Browser_Stop|Browser_Search|Browser_Favorites|Browser_Home|Volume_Mute|Volume_Down|Volume_Up|Media_Next|Media_Prev|Media_Stop|Media_Play_Pause|Launch_Mail|Launch_Media|Launch_App1|Launch_App2|Help|Sleep|PrintScreen|CtrlBreak|Break|AppsKey|NumpadDot|NumpadDiv|NumpadMult|NumpadAdd|NumpadSub|NumpadEnter|Tab|Enter|Esc|BackSpace"
. "|Del|Insert|Home|End|PgUp|PgDn|Up|Down|Left|Right|ScrollLock|CapsLock|NumLock|Pause|sc145|sc146|sc046|sc123"
Loop, parse, Otherkeys, |
{
Hotkey, % "~*" A_LoopField, OnKeyPressed
Hotkey, % "~*" A_LoopField " Up", _OnKeyUp
}

If ShowMouseButton {
Loop, Parse, % "LButton|MButton|RButton", |
Hotkey, % "~*" A_LoopField, OnKeyPressed
}

for i, mod in ["Ctrl", "Shift", "Alt"] {
Hotkey, % "~*" mod, OnKeyPressed
Hotkey, % "~*" mod " Up", OnKeyUp
}
for i, mod in ["LWin", "RWin"]
Hotkey, % "~*" mod, OnKeyPressed
}

ShowHotkey(HotkeyStr) {
WinGetPos, ActWin_X, ActWin_Y, ActWin_W, ActWin_H, A
if !ActWin_W
throw

text_w := (ActWin_W > A_ScreenWidth) ? A_ScreenWidth : ActWin_W

;remove this gui codeline if you want only to Write the Value to Windows registry
;GuiControl, , HotkeyText, %HotkeyStr%
;GuiControl, , HotkeyText, %HotkeyStr%

RegWrite, REG_SZ, HKEY_CURRENT_USER,softwareGetKeypressValue,KeypressValue,%HotkeyStr%

;remove this gui codeline if you want only to Write the Value to Windows registry
;GuiControl, Move, HotkeyText, w%text_w% Center
;GuiControl, Move, HotkeyText, w%text_w% Center

if (GuiPosition = "Top")
gui_y := ActWin_Y
else
gui_y := (ActWin_Y+ActWin_H) - 115 - 50

;remove this gui codeline if you want only to Write the Value to Windows registry
;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
}

GetKeyStr() {
static modifiers := ["Ctrl", "Shift", "Alt", "LWin", "RWin"]
static repeatCount := 1

for i, mod in modifiers {
if GetKeyState(mod)
prefix .= mod " + "
}

if (!prefix && !ShowSingleKey)
throw

key := SubStr(A_ThisHotkey, 3)

if (key ~= "i)^(Ctrl|Shift|Alt|LWin|RWin)$") {
if !ShowSingleModifierKey {
throw
}
key := ""
prefix := RTrim(prefix, "+ ")

if ShowModifierKeyCount {
if !InStr(prefix, "+") && IsDoubleClickEx() {
if (A_ThisHotKey != A_PriorHotKey) || ShowStickyModKeyCount {
if (++repeatCount > 1) {
prefix .= " ( * " repeatCount " )"
}
} else {
repeatCount := 0
}
} else {
repeatCount := 1
}
}
} else {
if ( StrLen(key) = 1 ) {
key := GetKeyChar(key, "A")
} else if ( SubStr(key, 1, 2) = "sc" ) {
key := SpecialSC(key)
} else if (key = "LButton") && IsDoubleClick() {
key := "Double-Click"
}
_key := (key = "Double-Click") ? "LButton" : key

static pre_prefix, pre_key, keyCount := 1
global tickcount_start
if (prefix && pre_prefix) && (A_TickCount-tickcount_start < 300) {
if (prefix != pre_prefix) {
result := pre_prefix pre_key ", " prefix key
} else {
keyCount := (key=pre_key) ? (keyCount+1) : 1
key := (keyCount>2) ? (key " (" keyCount ")") : (pre_key ", " key)
}
} else {
keyCount := 1
}

pre_prefix := prefix
pre_key := _key

repeatCount := 1
}
return result ? result : prefix . key
}

SpecialSC(sc) {
static k := {sc046: "ScrollLock", sc145: "NumLock", sc146: "Pause", sc123: "Genius LuxeMate Scroll"}
return k[sc]
}

; by Lexikos - https://autohotkey.com/board/topic/110808-getkeyname-for-other-languages/#entry682236
GetKeyChar(Key, WinTitle:=0) {
thread := WinTitle=0 ? 0
: DllCall("GetWindowThreadProcessId", "ptr", WinExist(WinTitle), "ptr", 0)
hkl := DllCall("GetKeyboardLayout", "uint", thread, "ptr")
vk := GetKeyVK(Key), sc := GetKeySC(Key)
VarSetCapacity(state, 256, 0)
VarSetCapacity(char, 4, 0)
n := DllCall("ToUnicodeEx", "uint", vk, "uint", sc
, "ptr", &state, "ptr", &char, "int", 2, "uint", 0, "ptr", hkl)
return StrGet(&char, n, "utf-16")
}

IsDoubleClick(MSec = 300) {
Return (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < MSec)
}

IsDoubleClickEx(MSec = 300) {
preHotkey := RegExReplace(A_PriorHotkey, "i) Up$")
Return (A_ThisHotKey = preHotkey) && (A_TimeSincePriorHotkey < MSec)
}

HideGUI() {
Gui, Hide
}

~esc::exitapp
;---------------------------------------------
; ChangeLog : v2.22 (2017-02-25) - Now pressing the same combination keys continuously more than 2 times,
; for example press Ctrl+V 3 times, will displayed as "Ctrl + v (3)"
; v2.21 (2017-02-24) - Fixed LWin/RWin not poping up start menu
; v2.20 (2017-02-24) - Added displaying continuous-pressed combination keys.
; e.g.: With CTRL key held down, pressing K and U continuously will shown as "Ctrl + k, u"
; v2.10 (2017-01-22) - Added ShowStickyModKeyCount option
; v2.09 (2017-01-22) - Added ShowModifierKeyCount option
; v2.08 (2017-01-19) - Fixed a bug
; v2.07 (2017-01-19) - Added ShowSingleModifierKey option (default is True)
; v2.06 (2016-11-23) - Added more keys. Thanks to SashaChernykh.
; v2.05 (2016-10-01) - Fixed not detecting "Ctrl + ScrollLock/NumLock/Pause". Thanks to lexikos.
; v2.04 (2016-10-01) - Added NumpadDot and AppsKey
; v2.03 (2016-09-17) - Added displaying "Double-Click" of the left mouse button.
; v2.02 (2016-09-16) - Added displaying mouse button, and 3 settings (ShowMouseButton, FontSize, GuiHeight)
; v2.01 (2016-09-11) - Display non english keyboard layout characters when combine with modifer keys.
; v2.00 (2016-09-01) - Removed the "Fade out" effect because of its buggy.
; - Added support for non english keyboard layout.
; - Added GuiPosition setting.
; v1.00 (2013-10-11) - First release.
;--------------------------------------------


And the Second One it will Show Visual On your Desktop Screen All your Mouse and Keyboard Movements, You can Change this Script a little bit and then make your own keyboard that can show Visual all your keyboard Movements,



and if you use the trick from Example1.ahk then you can make a Professional Onscreen Keyboard Without focus the Window.



show keyboard movements



ShowKeypressValue.ahk



#SingleInstance force
Gui, +AlwaysOnTop -MaximizeBox ; -Caption +Resize -MinimizeBox +Disabled -SysMenu -Owner +OwnDialogs
Gui, Add, Text, center y10 h50 w300 vVar, %KeypressValue%
Gui, Color, White
Gui, show
size=20
Gui, Font, s%size%
GuiControl, Font, var

;run KeypressValueToREG.ahk - together with ShowKeypressValue.ahk
;The Features Are:
; - It will Show On your Screen, [All your Mouse Movements] and [All Keyboard Shortcuts Movement]
; - You can Make Scripts, that can do actions with MultiClicks on All Keyboard Shortcuts Clicks, How Cool Is that.

loop
{
RegRead, KeypressValue, HKEY_CURRENT_USER,softwareGetKeypressValue,KeypressValue ; read KeypressValue
sleep 50
GuiControl,, var, %KeypressValue%



if (KeypressValue="Alt ( * 2 )") ;use this for [1x=Alt][2x=Alt ( * 2 )][3x=Alt ( * 3 )] [and many more]
{
;Here you can put any AHK CODE
msgbox you did click Alt 2x Times
}

if (KeypressValue="Alt ( * 3 )") ;use this for [1x=Alt][2x=Alt ( * 2 )][3x=Alt ( * 3 )] [and many more]
{
;Here you can put any AHK CODE
msgbox you did click Alt 3x Times
}


} ;End Loop

~esc::exitapp





share|improve this answer














On a Windows System it is not possible to activate Multiple Windows at the same Time.



Only One Window can be Active. (Focused)



But there are two Ways that can help to Solved your Problem.



1 - You can for example your Onscreen Keyboard Window, to let ignore/disable Focus that Keyboard Window. (No Focus) (No activate + +E0x08000000)



Try This Ahk Script.



Note: This is a onscreen Keys Strip from F1 to F12



Example1.ahk



Gui, +LastFound +AlwaysOnTop +ToolWindow -Caption +Border +E0x08000000
Gui, Font, s07, Arial
Loop, 12
Gui, Add, Button, % "x" 5+(A_Index-1)*60 " y5 w60 h25 vF" A_Index " gButton", F%A_Index%
Gui, Show, y0 w730 h35 NoActivate
Return

Button:
SendInput, % "{" A_GuiControl "}"
Return

GuiClose:
ExitApp
Return

~esc::exitapp


2 - Or You can Use a 3rd party script,



note : run these 2 Scripts together. (KeypressValueToREG + ShowKeypressValue)



The First one is a Large Script but you can do many things, It Will Put All your Mouse and Keyboard Movements into Only One Windows Registry Key.



The Power of this KeypressValueToREG script is, you can run it in the background, and then you can use it in other Applications or other Languages Visual Studio/Visual Basic/c++/Python/Autohotkey/? They only need to Acces/Read that One Registry Key.



keypressvalue to windows registry key



KeypressValueToREG.ahk



;KeypressValueToREG.ahk comes from KeypressOSD.ahk that was Created by Author RaptorX
; Open this Script in Wordpad and For Changelog look to the Bottom of the script.
;This code works with a getkeyname from a Dllcall (See Bottom Script- by Lexikos)
;you can press the esc key to exit.

#SingleInstance force
#NoEnv
SetBatchLines, -1
ListLines, Off

; Settings
global TransN := 200 ; 0~255
global ShowSingleKey := True
global ShowMouseButton := True
global ShowSingleModifierKey := True
global ShowModifierKeyCount := true
global ShowStickyModKeyCount := false
global DisplayTime := 2000 ; In milliseconds
global GuiPosition := "Bottom" ; Top or Bottom
global FontSize := 50
global GuiHeight := 115

CreateGUI()
CreateHotkey()
return

OnKeyPressed:
try {
key := GetKeyStr()
ShowHotkey(key)
SetTimer, HideGUI, % -1 * DisplayTime
}
return

OnKeyUp:
return

_OnKeyUp:
tickcount_start := A_TickCount
return


CreateGUI() {
global

Gui, +AlwaysOnTop -Caption +Owner +LastFound +E0x20
Gui, Margin, 0, 0
Gui, Color, Black
Gui, Font, cWhite s%FontSize% bold, Arial
Gui, Add, Text, vHotkeyText Center y20

WinSet, Transparent, %TransN%
}

CreateHotkey() {
Loop, 95
{
k := Chr(A_Index + 31)
k := (k = " ") ? "Space" : k

Hotkey, % "~*" k, OnKeyPressed
Hotkey, % "~*" k " Up", _OnKeyUp
}

Loop, 24 ; F1-F24
{
Hotkey, % "~*F" A_Index, OnKeyPressed
Hotkey, % "~*F" A_Index " Up", _OnKeyUp
}

Loop, 10 ; Numpad0 - Numpad9
{
Hotkey, % "~*Numpad" A_Index - 1, OnKeyPressed
Hotkey, % "~*Numpad" A_Index - 1 " Up", _OnKeyUp
}

Otherkeys := "WheelDown|WheelUp|WheelLeft|WheelRight|XButton1|XButton2|Browser_Forward|Browser_Back|Browser_Refresh|Browser_Stop|Browser_Search|Browser_Favorites|Browser_Home|Volume_Mute|Volume_Down|Volume_Up|Media_Next|Media_Prev|Media_Stop|Media_Play_Pause|Launch_Mail|Launch_Media|Launch_App1|Launch_App2|Help|Sleep|PrintScreen|CtrlBreak|Break|AppsKey|NumpadDot|NumpadDiv|NumpadMult|NumpadAdd|NumpadSub|NumpadEnter|Tab|Enter|Esc|BackSpace"
. "|Del|Insert|Home|End|PgUp|PgDn|Up|Down|Left|Right|ScrollLock|CapsLock|NumLock|Pause|sc145|sc146|sc046|sc123"
Loop, parse, Otherkeys, |
{
Hotkey, % "~*" A_LoopField, OnKeyPressed
Hotkey, % "~*" A_LoopField " Up", _OnKeyUp
}

If ShowMouseButton {
Loop, Parse, % "LButton|MButton|RButton", |
Hotkey, % "~*" A_LoopField, OnKeyPressed
}

for i, mod in ["Ctrl", "Shift", "Alt"] {
Hotkey, % "~*" mod, OnKeyPressed
Hotkey, % "~*" mod " Up", OnKeyUp
}
for i, mod in ["LWin", "RWin"]
Hotkey, % "~*" mod, OnKeyPressed
}

ShowHotkey(HotkeyStr) {
WinGetPos, ActWin_X, ActWin_Y, ActWin_W, ActWin_H, A
if !ActWin_W
throw

text_w := (ActWin_W > A_ScreenWidth) ? A_ScreenWidth : ActWin_W

;remove this gui codeline if you want only to Write the Value to Windows registry
;GuiControl, , HotkeyText, %HotkeyStr%
;GuiControl, , HotkeyText, %HotkeyStr%

RegWrite, REG_SZ, HKEY_CURRENT_USER,softwareGetKeypressValue,KeypressValue,%HotkeyStr%

;remove this gui codeline if you want only to Write the Value to Windows registry
;GuiControl, Move, HotkeyText, w%text_w% Center
;GuiControl, Move, HotkeyText, w%text_w% Center

if (GuiPosition = "Top")
gui_y := ActWin_Y
else
gui_y := (ActWin_Y+ActWin_H) - 115 - 50

;remove this gui codeline if you want only to Write the Value to Windows registry
;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
}

GetKeyStr() {
static modifiers := ["Ctrl", "Shift", "Alt", "LWin", "RWin"]
static repeatCount := 1

for i, mod in modifiers {
if GetKeyState(mod)
prefix .= mod " + "
}

if (!prefix && !ShowSingleKey)
throw

key := SubStr(A_ThisHotkey, 3)

if (key ~= "i)^(Ctrl|Shift|Alt|LWin|RWin)$") {
if !ShowSingleModifierKey {
throw
}
key := ""
prefix := RTrim(prefix, "+ ")

if ShowModifierKeyCount {
if !InStr(prefix, "+") && IsDoubleClickEx() {
if (A_ThisHotKey != A_PriorHotKey) || ShowStickyModKeyCount {
if (++repeatCount > 1) {
prefix .= " ( * " repeatCount " )"
}
} else {
repeatCount := 0
}
} else {
repeatCount := 1
}
}
} else {
if ( StrLen(key) = 1 ) {
key := GetKeyChar(key, "A")
} else if ( SubStr(key, 1, 2) = "sc" ) {
key := SpecialSC(key)
} else if (key = "LButton") && IsDoubleClick() {
key := "Double-Click"
}
_key := (key = "Double-Click") ? "LButton" : key

static pre_prefix, pre_key, keyCount := 1
global tickcount_start
if (prefix && pre_prefix) && (A_TickCount-tickcount_start < 300) {
if (prefix != pre_prefix) {
result := pre_prefix pre_key ", " prefix key
} else {
keyCount := (key=pre_key) ? (keyCount+1) : 1
key := (keyCount>2) ? (key " (" keyCount ")") : (pre_key ", " key)
}
} else {
keyCount := 1
}

pre_prefix := prefix
pre_key := _key

repeatCount := 1
}
return result ? result : prefix . key
}

SpecialSC(sc) {
static k := {sc046: "ScrollLock", sc145: "NumLock", sc146: "Pause", sc123: "Genius LuxeMate Scroll"}
return k[sc]
}

; by Lexikos - https://autohotkey.com/board/topic/110808-getkeyname-for-other-languages/#entry682236
GetKeyChar(Key, WinTitle:=0) {
thread := WinTitle=0 ? 0
: DllCall("GetWindowThreadProcessId", "ptr", WinExist(WinTitle), "ptr", 0)
hkl := DllCall("GetKeyboardLayout", "uint", thread, "ptr")
vk := GetKeyVK(Key), sc := GetKeySC(Key)
VarSetCapacity(state, 256, 0)
VarSetCapacity(char, 4, 0)
n := DllCall("ToUnicodeEx", "uint", vk, "uint", sc
, "ptr", &state, "ptr", &char, "int", 2, "uint", 0, "ptr", hkl)
return StrGet(&char, n, "utf-16")
}

IsDoubleClick(MSec = 300) {
Return (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < MSec)
}

IsDoubleClickEx(MSec = 300) {
preHotkey := RegExReplace(A_PriorHotkey, "i) Up$")
Return (A_ThisHotKey = preHotkey) && (A_TimeSincePriorHotkey < MSec)
}

HideGUI() {
Gui, Hide
}

~esc::exitapp
;---------------------------------------------
; ChangeLog : v2.22 (2017-02-25) - Now pressing the same combination keys continuously more than 2 times,
; for example press Ctrl+V 3 times, will displayed as "Ctrl + v (3)"
; v2.21 (2017-02-24) - Fixed LWin/RWin not poping up start menu
; v2.20 (2017-02-24) - Added displaying continuous-pressed combination keys.
; e.g.: With CTRL key held down, pressing K and U continuously will shown as "Ctrl + k, u"
; v2.10 (2017-01-22) - Added ShowStickyModKeyCount option
; v2.09 (2017-01-22) - Added ShowModifierKeyCount option
; v2.08 (2017-01-19) - Fixed a bug
; v2.07 (2017-01-19) - Added ShowSingleModifierKey option (default is True)
; v2.06 (2016-11-23) - Added more keys. Thanks to SashaChernykh.
; v2.05 (2016-10-01) - Fixed not detecting "Ctrl + ScrollLock/NumLock/Pause". Thanks to lexikos.
; v2.04 (2016-10-01) - Added NumpadDot and AppsKey
; v2.03 (2016-09-17) - Added displaying "Double-Click" of the left mouse button.
; v2.02 (2016-09-16) - Added displaying mouse button, and 3 settings (ShowMouseButton, FontSize, GuiHeight)
; v2.01 (2016-09-11) - Display non english keyboard layout characters when combine with modifer keys.
; v2.00 (2016-09-01) - Removed the "Fade out" effect because of its buggy.
; - Added support for non english keyboard layout.
; - Added GuiPosition setting.
; v1.00 (2013-10-11) - First release.
;--------------------------------------------


And the Second One it will Show Visual On your Desktop Screen All your Mouse and Keyboard Movements, You can Change this Script a little bit and then make your own keyboard that can show Visual all your keyboard Movements,



and if you use the trick from Example1.ahk then you can make a Professional Onscreen Keyboard Without focus the Window.



show keyboard movements



ShowKeypressValue.ahk



#SingleInstance force
Gui, +AlwaysOnTop -MaximizeBox ; -Caption +Resize -MinimizeBox +Disabled -SysMenu -Owner +OwnDialogs
Gui, Add, Text, center y10 h50 w300 vVar, %KeypressValue%
Gui, Color, White
Gui, show
size=20
Gui, Font, s%size%
GuiControl, Font, var

;run KeypressValueToREG.ahk - together with ShowKeypressValue.ahk
;The Features Are:
; - It will Show On your Screen, [All your Mouse Movements] and [All Keyboard Shortcuts Movement]
; - You can Make Scripts, that can do actions with MultiClicks on All Keyboard Shortcuts Clicks, How Cool Is that.

loop
{
RegRead, KeypressValue, HKEY_CURRENT_USER,softwareGetKeypressValue,KeypressValue ; read KeypressValue
sleep 50
GuiControl,, var, %KeypressValue%



if (KeypressValue="Alt ( * 2 )") ;use this for [1x=Alt][2x=Alt ( * 2 )][3x=Alt ( * 3 )] [and many more]
{
;Here you can put any AHK CODE
msgbox you did click Alt 2x Times
}

if (KeypressValue="Alt ( * 3 )") ;use this for [1x=Alt][2x=Alt ( * 2 )][3x=Alt ( * 3 )] [and many more]
{
;Here you can put any AHK CODE
msgbox you did click Alt 3x Times
}


} ;End Loop

~esc::exitapp






share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 24 at 10:30

























answered Nov 24 at 9:06









stevecody

389113




389113












  • This is fantastic looking, which part would I need to edit, to re-direct keystrokes to "kb.exe"? @stevecody
    – Iroamalone Atnight
    Nov 30 at 8:10












  • @Iroamalone Atnight - there are two ways to re-direct the keystrokes - 1:you can edit ShowKeypressValue.ahk and re-direct the keystrokes to kb.exe - 2:or you can use an other languages that can acces only that Windows Registry Key (ps - i am not sure did you make kb.exe with gamemaker studio 1.4 if it is you will need to find out if that languages is able to read that Windows Registry key)
    – stevecody
    Nov 30 at 9:40










  • @Iroamalone Atnight - if the gamemaker studio 1.4 Languages is not able to acces that Windows Registry Key then you can think about a ThirdPart Automation Software, i am using Buttoncommander - with this you can create very simple Button icons on your Desktop that can execute any kind of Autohotkey Scripts - you can then do this, if the Windows Registry Key value is "a" then Highlight Button icon a
    – stevecody
    Nov 30 at 11:35










  • @Iroamalone Atnight - Autohotkey Together With Buttoncommander you can Make many thinks more watch to these Videos and you now why Toolbars,Clipboards,Virtual keyboards,Monitor keyboards,Launchpads,Enterpads,Intelligence Google Search Buttons
    – stevecody
    Nov 30 at 11:38










  • Would you be interested in designing it for me? How much would you charge? this stuff is very confusing for me, I don't think I can do it currently without a lot of training. E-mail at "Bladevampirek@aol.com" if you are interested, I can send you the program in order to see if you're able to do it or not.
    – Iroamalone Atnight
    Dec 26 at 7:28


















  • This is fantastic looking, which part would I need to edit, to re-direct keystrokes to "kb.exe"? @stevecody
    – Iroamalone Atnight
    Nov 30 at 8:10












  • @Iroamalone Atnight - there are two ways to re-direct the keystrokes - 1:you can edit ShowKeypressValue.ahk and re-direct the keystrokes to kb.exe - 2:or you can use an other languages that can acces only that Windows Registry Key (ps - i am not sure did you make kb.exe with gamemaker studio 1.4 if it is you will need to find out if that languages is able to read that Windows Registry key)
    – stevecody
    Nov 30 at 9:40










  • @Iroamalone Atnight - if the gamemaker studio 1.4 Languages is not able to acces that Windows Registry Key then you can think about a ThirdPart Automation Software, i am using Buttoncommander - with this you can create very simple Button icons on your Desktop that can execute any kind of Autohotkey Scripts - you can then do this, if the Windows Registry Key value is "a" then Highlight Button icon a
    – stevecody
    Nov 30 at 11:35










  • @Iroamalone Atnight - Autohotkey Together With Buttoncommander you can Make many thinks more watch to these Videos and you now why Toolbars,Clipboards,Virtual keyboards,Monitor keyboards,Launchpads,Enterpads,Intelligence Google Search Buttons
    – stevecody
    Nov 30 at 11:38










  • Would you be interested in designing it for me? How much would you charge? this stuff is very confusing for me, I don't think I can do it currently without a lot of training. E-mail at "Bladevampirek@aol.com" if you are interested, I can send you the program in order to see if you're able to do it or not.
    – Iroamalone Atnight
    Dec 26 at 7:28
















This is fantastic looking, which part would I need to edit, to re-direct keystrokes to "kb.exe"? @stevecody
– Iroamalone Atnight
Nov 30 at 8:10






This is fantastic looking, which part would I need to edit, to re-direct keystrokes to "kb.exe"? @stevecody
– Iroamalone Atnight
Nov 30 at 8:10














@Iroamalone Atnight - there are two ways to re-direct the keystrokes - 1:you can edit ShowKeypressValue.ahk and re-direct the keystrokes to kb.exe - 2:or you can use an other languages that can acces only that Windows Registry Key (ps - i am not sure did you make kb.exe with gamemaker studio 1.4 if it is you will need to find out if that languages is able to read that Windows Registry key)
– stevecody
Nov 30 at 9:40




@Iroamalone Atnight - there are two ways to re-direct the keystrokes - 1:you can edit ShowKeypressValue.ahk and re-direct the keystrokes to kb.exe - 2:or you can use an other languages that can acces only that Windows Registry Key (ps - i am not sure did you make kb.exe with gamemaker studio 1.4 if it is you will need to find out if that languages is able to read that Windows Registry key)
– stevecody
Nov 30 at 9:40












@Iroamalone Atnight - if the gamemaker studio 1.4 Languages is not able to acces that Windows Registry Key then you can think about a ThirdPart Automation Software, i am using Buttoncommander - with this you can create very simple Button icons on your Desktop that can execute any kind of Autohotkey Scripts - you can then do this, if the Windows Registry Key value is "a" then Highlight Button icon a
– stevecody
Nov 30 at 11:35




@Iroamalone Atnight - if the gamemaker studio 1.4 Languages is not able to acces that Windows Registry Key then you can think about a ThirdPart Automation Software, i am using Buttoncommander - with this you can create very simple Button icons on your Desktop that can execute any kind of Autohotkey Scripts - you can then do this, if the Windows Registry Key value is "a" then Highlight Button icon a
– stevecody
Nov 30 at 11:35












@Iroamalone Atnight - Autohotkey Together With Buttoncommander you can Make many thinks more watch to these Videos and you now why Toolbars,Clipboards,Virtual keyboards,Monitor keyboards,Launchpads,Enterpads,Intelligence Google Search Buttons
– stevecody
Nov 30 at 11:38




@Iroamalone Atnight - Autohotkey Together With Buttoncommander you can Make many thinks more watch to these Videos and you now why Toolbars,Clipboards,Virtual keyboards,Monitor keyboards,Launchpads,Enterpads,Intelligence Google Search Buttons
– stevecody
Nov 30 at 11:38












Would you be interested in designing it for me? How much would you charge? this stuff is very confusing for me, I don't think I can do it currently without a lot of training. E-mail at "Bladevampirek@aol.com" if you are interested, I can send you the program in order to see if you're able to do it or not.
– Iroamalone Atnight
Dec 26 at 7:28




Would you be interested in designing it for me? How much would you charge? this stuff is very confusing for me, I don't think I can do it currently without a lot of training. E-mail at "Bladevampirek@aol.com" if you are interested, I can send you the program in order to see if you're able to do it or not.
– Iroamalone Atnight
Dec 26 at 7:28













0














Try this .



#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
#InstallKeybdHook
#UseHook

; Add the keys you want send to the last active window in this array:
Keys := ["a","b","c","1","2","3","space",",",".","-","_","F3"] ; ...
for each, key in Keys
Hotkey, %key%, send_key_to_last_active_window, on

SetTimer get_last_active_window, 300 ; you can decrease this period (number of milliseconds that pass before the timer is executed)
return

send_key_to_last_active_window:
Send, {%A_ThisHotkey%}
; WinGetTitle, Title, ahk_id %LastActive_ID%
; WinGetClass, Class, ahk_id %LastActive_ID%
; ToolTip, last_active_window=%Title% ahk_class %Class%,,, 2
; If Class in Notepad,WordPadClass ; if the last active window is Notepad or WordPad
ControlSend,, {%A_ThisHotkey%}, ahk_id %LastActive_ID%
return

get_last_active_window:
WinGet, CurrentActive_ID, ID, A
If (CurrentActive_ID != NewActive_ID)
{
LastActive_ID = %NewActive_ID%
NewActive_ID := CurrentActive_ID
; WinGetTitle, NewActiveTitle, ahk_id %NewActive_ID%
; WinGetTitle, LastActiveTitle, ahk_id %LastActive_ID%
SetTimer get_last_active_window, off
; CoordMode, ToolTip, Screen
; ToolTip, Current active window:`nTitle: %NewActiveTitle%`nID: %NewActive_ID%`n`nLast active window:`nTitle: %LastActiveTitle%`nID: %LastActive_ID%, 0, 0, 1
WinWaitNotActive, ahk_id %NewActive_ID%
SetTimer get_last_active_window, on
}
return


See For-Loop, Hotkey and SetTimer in the documentation.






share|improve this answer























  • Totally unreliable, with lots of flicker going about. This is not useful, not even as a proof-of-concept (unless you are trying to prove, that this is not a solution).
    – IInspectable
    Nov 23 at 11:26










  • On my system it's working. The tooltips are only for testing.
    – user3419297
    Nov 23 at 11:47












  • Works on My Machine certification is no indication, that code is correct. Clearly, that script runs a timer with arbitrary time, to employ polling. Polling is a way of sampling. As with all sampling, you are missing all events that occur in between sampling points. No, I'm afraid, this is just a kludge, not a solution. The solution is given in comments.
    – IInspectable
    Nov 23 at 11:57










  • Logically, If it doesn't work on your system/program, something is wrong or missing in it or in the way you're using it. As far as I can see in your profile, you may be an expert in other domains, but not in AHK. And the user asked for a solution in AHK
    – user3419297
    Nov 23 at 13:17












  • I just explained one of many failure modes (polling). It doesn't matter, whether I answer AHK questions here or not. I am in a fairly comfortable position to know the system AHK runs on, and I provided the system-level solution to the question the OP appears to have asked. The system makes the rules that any program needs to follow, AHK being no exception. Contrast your proposed solution with my comments to the question, and you'll quickly see, which approach is more likely to produce a reliable solution. A solution need not fail on my system for me to see how it can fail.
    – IInspectable
    Nov 23 at 13:21
















0














Try this .



#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
#InstallKeybdHook
#UseHook

; Add the keys you want send to the last active window in this array:
Keys := ["a","b","c","1","2","3","space",",",".","-","_","F3"] ; ...
for each, key in Keys
Hotkey, %key%, send_key_to_last_active_window, on

SetTimer get_last_active_window, 300 ; you can decrease this period (number of milliseconds that pass before the timer is executed)
return

send_key_to_last_active_window:
Send, {%A_ThisHotkey%}
; WinGetTitle, Title, ahk_id %LastActive_ID%
; WinGetClass, Class, ahk_id %LastActive_ID%
; ToolTip, last_active_window=%Title% ahk_class %Class%,,, 2
; If Class in Notepad,WordPadClass ; if the last active window is Notepad or WordPad
ControlSend,, {%A_ThisHotkey%}, ahk_id %LastActive_ID%
return

get_last_active_window:
WinGet, CurrentActive_ID, ID, A
If (CurrentActive_ID != NewActive_ID)
{
LastActive_ID = %NewActive_ID%
NewActive_ID := CurrentActive_ID
; WinGetTitle, NewActiveTitle, ahk_id %NewActive_ID%
; WinGetTitle, LastActiveTitle, ahk_id %LastActive_ID%
SetTimer get_last_active_window, off
; CoordMode, ToolTip, Screen
; ToolTip, Current active window:`nTitle: %NewActiveTitle%`nID: %NewActive_ID%`n`nLast active window:`nTitle: %LastActiveTitle%`nID: %LastActive_ID%, 0, 0, 1
WinWaitNotActive, ahk_id %NewActive_ID%
SetTimer get_last_active_window, on
}
return


See For-Loop, Hotkey and SetTimer in the documentation.






share|improve this answer























  • Totally unreliable, with lots of flicker going about. This is not useful, not even as a proof-of-concept (unless you are trying to prove, that this is not a solution).
    – IInspectable
    Nov 23 at 11:26










  • On my system it's working. The tooltips are only for testing.
    – user3419297
    Nov 23 at 11:47












  • Works on My Machine certification is no indication, that code is correct. Clearly, that script runs a timer with arbitrary time, to employ polling. Polling is a way of sampling. As with all sampling, you are missing all events that occur in between sampling points. No, I'm afraid, this is just a kludge, not a solution. The solution is given in comments.
    – IInspectable
    Nov 23 at 11:57










  • Logically, If it doesn't work on your system/program, something is wrong or missing in it or in the way you're using it. As far as I can see in your profile, you may be an expert in other domains, but not in AHK. And the user asked for a solution in AHK
    – user3419297
    Nov 23 at 13:17












  • I just explained one of many failure modes (polling). It doesn't matter, whether I answer AHK questions here or not. I am in a fairly comfortable position to know the system AHK runs on, and I provided the system-level solution to the question the OP appears to have asked. The system makes the rules that any program needs to follow, AHK being no exception. Contrast your proposed solution with my comments to the question, and you'll quickly see, which approach is more likely to produce a reliable solution. A solution need not fail on my system for me to see how it can fail.
    – IInspectable
    Nov 23 at 13:21














0












0








0






Try this .



#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
#InstallKeybdHook
#UseHook

; Add the keys you want send to the last active window in this array:
Keys := ["a","b","c","1","2","3","space",",",".","-","_","F3"] ; ...
for each, key in Keys
Hotkey, %key%, send_key_to_last_active_window, on

SetTimer get_last_active_window, 300 ; you can decrease this period (number of milliseconds that pass before the timer is executed)
return

send_key_to_last_active_window:
Send, {%A_ThisHotkey%}
; WinGetTitle, Title, ahk_id %LastActive_ID%
; WinGetClass, Class, ahk_id %LastActive_ID%
; ToolTip, last_active_window=%Title% ahk_class %Class%,,, 2
; If Class in Notepad,WordPadClass ; if the last active window is Notepad or WordPad
ControlSend,, {%A_ThisHotkey%}, ahk_id %LastActive_ID%
return

get_last_active_window:
WinGet, CurrentActive_ID, ID, A
If (CurrentActive_ID != NewActive_ID)
{
LastActive_ID = %NewActive_ID%
NewActive_ID := CurrentActive_ID
; WinGetTitle, NewActiveTitle, ahk_id %NewActive_ID%
; WinGetTitle, LastActiveTitle, ahk_id %LastActive_ID%
SetTimer get_last_active_window, off
; CoordMode, ToolTip, Screen
; ToolTip, Current active window:`nTitle: %NewActiveTitle%`nID: %NewActive_ID%`n`nLast active window:`nTitle: %LastActiveTitle%`nID: %LastActive_ID%, 0, 0, 1
WinWaitNotActive, ahk_id %NewActive_ID%
SetTimer get_last_active_window, on
}
return


See For-Loop, Hotkey and SetTimer in the documentation.






share|improve this answer














Try this .



#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
#InstallKeybdHook
#UseHook

; Add the keys you want send to the last active window in this array:
Keys := ["a","b","c","1","2","3","space",",",".","-","_","F3"] ; ...
for each, key in Keys
Hotkey, %key%, send_key_to_last_active_window, on

SetTimer get_last_active_window, 300 ; you can decrease this period (number of milliseconds that pass before the timer is executed)
return

send_key_to_last_active_window:
Send, {%A_ThisHotkey%}
; WinGetTitle, Title, ahk_id %LastActive_ID%
; WinGetClass, Class, ahk_id %LastActive_ID%
; ToolTip, last_active_window=%Title% ahk_class %Class%,,, 2
; If Class in Notepad,WordPadClass ; if the last active window is Notepad or WordPad
ControlSend,, {%A_ThisHotkey%}, ahk_id %LastActive_ID%
return

get_last_active_window:
WinGet, CurrentActive_ID, ID, A
If (CurrentActive_ID != NewActive_ID)
{
LastActive_ID = %NewActive_ID%
NewActive_ID := CurrentActive_ID
; WinGetTitle, NewActiveTitle, ahk_id %NewActive_ID%
; WinGetTitle, LastActiveTitle, ahk_id %LastActive_ID%
SetTimer get_last_active_window, off
; CoordMode, ToolTip, Screen
; ToolTip, Current active window:`nTitle: %NewActiveTitle%`nID: %NewActive_ID%`n`nLast active window:`nTitle: %LastActiveTitle%`nID: %LastActive_ID%, 0, 0, 1
WinWaitNotActive, ahk_id %NewActive_ID%
SetTimer get_last_active_window, on
}
return


See For-Loop, Hotkey and SetTimer in the documentation.







share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 23 at 15:18

























answered Nov 23 at 9:49









user3419297

4,3392613




4,3392613












  • Totally unreliable, with lots of flicker going about. This is not useful, not even as a proof-of-concept (unless you are trying to prove, that this is not a solution).
    – IInspectable
    Nov 23 at 11:26










  • On my system it's working. The tooltips are only for testing.
    – user3419297
    Nov 23 at 11:47












  • Works on My Machine certification is no indication, that code is correct. Clearly, that script runs a timer with arbitrary time, to employ polling. Polling is a way of sampling. As with all sampling, you are missing all events that occur in between sampling points. No, I'm afraid, this is just a kludge, not a solution. The solution is given in comments.
    – IInspectable
    Nov 23 at 11:57










  • Logically, If it doesn't work on your system/program, something is wrong or missing in it or in the way you're using it. As far as I can see in your profile, you may be an expert in other domains, but not in AHK. And the user asked for a solution in AHK
    – user3419297
    Nov 23 at 13:17












  • I just explained one of many failure modes (polling). It doesn't matter, whether I answer AHK questions here or not. I am in a fairly comfortable position to know the system AHK runs on, and I provided the system-level solution to the question the OP appears to have asked. The system makes the rules that any program needs to follow, AHK being no exception. Contrast your proposed solution with my comments to the question, and you'll quickly see, which approach is more likely to produce a reliable solution. A solution need not fail on my system for me to see how it can fail.
    – IInspectable
    Nov 23 at 13:21


















  • Totally unreliable, with lots of flicker going about. This is not useful, not even as a proof-of-concept (unless you are trying to prove, that this is not a solution).
    – IInspectable
    Nov 23 at 11:26










  • On my system it's working. The tooltips are only for testing.
    – user3419297
    Nov 23 at 11:47












  • Works on My Machine certification is no indication, that code is correct. Clearly, that script runs a timer with arbitrary time, to employ polling. Polling is a way of sampling. As with all sampling, you are missing all events that occur in between sampling points. No, I'm afraid, this is just a kludge, not a solution. The solution is given in comments.
    – IInspectable
    Nov 23 at 11:57










  • Logically, If it doesn't work on your system/program, something is wrong or missing in it or in the way you're using it. As far as I can see in your profile, you may be an expert in other domains, but not in AHK. And the user asked for a solution in AHK
    – user3419297
    Nov 23 at 13:17












  • I just explained one of many failure modes (polling). It doesn't matter, whether I answer AHK questions here or not. I am in a fairly comfortable position to know the system AHK runs on, and I provided the system-level solution to the question the OP appears to have asked. The system makes the rules that any program needs to follow, AHK being no exception. Contrast your proposed solution with my comments to the question, and you'll quickly see, which approach is more likely to produce a reliable solution. A solution need not fail on my system for me to see how it can fail.
    – IInspectable
    Nov 23 at 13:21
















Totally unreliable, with lots of flicker going about. This is not useful, not even as a proof-of-concept (unless you are trying to prove, that this is not a solution).
– IInspectable
Nov 23 at 11:26




Totally unreliable, with lots of flicker going about. This is not useful, not even as a proof-of-concept (unless you are trying to prove, that this is not a solution).
– IInspectable
Nov 23 at 11:26












On my system it's working. The tooltips are only for testing.
– user3419297
Nov 23 at 11:47






On my system it's working. The tooltips are only for testing.
– user3419297
Nov 23 at 11:47














Works on My Machine certification is no indication, that code is correct. Clearly, that script runs a timer with arbitrary time, to employ polling. Polling is a way of sampling. As with all sampling, you are missing all events that occur in between sampling points. No, I'm afraid, this is just a kludge, not a solution. The solution is given in comments.
– IInspectable
Nov 23 at 11:57




Works on My Machine certification is no indication, that code is correct. Clearly, that script runs a timer with arbitrary time, to employ polling. Polling is a way of sampling. As with all sampling, you are missing all events that occur in between sampling points. No, I'm afraid, this is just a kludge, not a solution. The solution is given in comments.
– IInspectable
Nov 23 at 11:57












Logically, If it doesn't work on your system/program, something is wrong or missing in it or in the way you're using it. As far as I can see in your profile, you may be an expert in other domains, but not in AHK. And the user asked for a solution in AHK
– user3419297
Nov 23 at 13:17






Logically, If it doesn't work on your system/program, something is wrong or missing in it or in the way you're using it. As far as I can see in your profile, you may be an expert in other domains, but not in AHK. And the user asked for a solution in AHK
– user3419297
Nov 23 at 13:17














I just explained one of many failure modes (polling). It doesn't matter, whether I answer AHK questions here or not. I am in a fairly comfortable position to know the system AHK runs on, and I provided the system-level solution to the question the OP appears to have asked. The system makes the rules that any program needs to follow, AHK being no exception. Contrast your proposed solution with my comments to the question, and you'll quickly see, which approach is more likely to produce a reliable solution. A solution need not fail on my system for me to see how it can fail.
– IInspectable
Nov 23 at 13:21




I just explained one of many failure modes (polling). It doesn't matter, whether I answer AHK questions here or not. I am in a fairly comfortable position to know the system AHK runs on, and I provided the system-level solution to the question the OP appears to have asked. The system makes the rules that any program needs to follow, AHK being no exception. Contrast your proposed solution with my comments to the question, and you'll quickly see, which approach is more likely to produce a reliable solution. A solution need not fail on my system for me to see how it can fail.
– IInspectable
Nov 23 at 13:21


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53437494%2fis-there-a-way-to-make-multiple-windows-active-at-one-time-in-windows%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Contact image not getting when fetch all contact list from iPhone by CNContact

count number of partitions of a set with n elements into k subsets

A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks