et99
2024-07-28 00:33:47 UTC
I want to launch a windows batch job, which then runs a tcl program (passing in the file names dnd'd onto the batch file).
I would like to also be able to detect if the shift key is currently down in the tcl program. I can't use a normal key binding since the shift key will be pressed (and held) down before the tcl program is launched.
I asked chatGPT how this can be done, and it said:
#include <windows.h>
bool IsShiftKeyDown() {
return (GetAsyncKeyState(VK_SHIFT) & 0x8000) != 0;
}
when I asked how to do this with tcl, it said to use a direct windows api call using twapi, and gave this (wrong) answer:
package require twapi
proc is_shift_down {} {
set result [twapi::call user32 GetAsyncKeyState VK_SHIFT]
return [expr ($result & 0x8000) != 0]
}
However, there is mentioned in the twapi docs that one can do a direct call, which this chatGPT example was attempting to do, but unfortunately, the docs says:
"The Windows API may be directly accessed by Tcl commands that map to Windows functions. This interface is not documented in the TWAPI documentation."
Assuming the above C code is correct, does anyone know how to use twapi to make that call?
Or... is there some way that tcl can do it directly?
I would like to also be able to detect if the shift key is currently down in the tcl program. I can't use a normal key binding since the shift key will be pressed (and held) down before the tcl program is launched.
I asked chatGPT how this can be done, and it said:
#include <windows.h>
bool IsShiftKeyDown() {
return (GetAsyncKeyState(VK_SHIFT) & 0x8000) != 0;
}
when I asked how to do this with tcl, it said to use a direct windows api call using twapi, and gave this (wrong) answer:
package require twapi
proc is_shift_down {} {
set result [twapi::call user32 GetAsyncKeyState VK_SHIFT]
return [expr ($result & 0x8000) != 0]
}
However, there is mentioned in the twapi docs that one can do a direct call, which this chatGPT example was attempting to do, but unfortunately, the docs says:
"The Windows API may be directly accessed by Tcl commands that map to Windows functions. This interface is not documented in the TWAPI documentation."
Assuming the above C code is correct, does anyone know how to use twapi to make that call?
Or... is there some way that tcl can do it directly?