Keyboard macros: Difference between revisions
m
→{{header|Phix}}: added syntax colouring the hard way, phix/basics
m (→{{header|Phix}}: added syntax colouring the hard way, phix/basics) |
|||
Line 708:
=={{header|Phix}}==
{{libheader|Phix/basics}}
===application===
{{libheader|Phix/pGUI}}
Line 713 ⟶ 714:
a general key handler.
Obviously K_C and K_F2 could be swapped without any problem.
<!--<lang Phix>
<span style="color: #008080;">include</span> <span style="color: #000000;">pGUI</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">C_Keyed</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000080;font-style:italic;">/*ih*/</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000080;font-style:italic;">/*c*/</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- (Note without K_c below this does not respond to 'c', just 'C')</span>
<span style="color: #0000FF;">?</span><span style="color: #008000;">"you pressed C"</span>
<span style="color: #008080;">return</span> <span style="color: #004600;">IUP_DEFAULT</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">F2_keyed</span><span style="color: #0000FF;">()</span>
<span style="color: #0000FF;">?</span><span style="color: #008000;">"you pressed F2"</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">key_cb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000080;font-style:italic;">/*ih*/</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #000000;">K_F2</span> <span style="color: #008080;">then</span> <span style="color: #000000;">F2_keyed</span><span style="color: #0000FF;">()</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #004600;">K_ESC</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #004600;">IUP_CLOSE</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">return</span> <span style="color: #004600;">IUP_DEFAULT</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #7060A8;">IupOpen</span><span style="color: #0000FF;">()</span>
<span style="color: #004080;">Ihandle</span> <span style="color: #000000;">dlg</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupDialog</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">IupLabel</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"hello"</span><span style="color: #0000FF;">),</span><span style="color: #008000;">"TITLE=\"Press F2\""</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">IupSetCallback</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"K_C"</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"C_Keyed"</span><span style="color: #0000FF;">))</span>
<span style="color: #000080;font-style:italic;">--IupSetCallback(dlg, "
<span style="color: #7060A8;">IupSetCallback</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"K_ANY"</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"key_cb"</span><span style="color: #0000FF;">))</span>
<span style="color: #7060A8;">IupShow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()!=</span><span style="color: #004600;">JS</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">IupMainLoop</span><span style="color: #0000FF;">()</span>
<span style="color: #7060A8;">IupClose</span><span style="color: #0000FF;">()</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<!--</lang>-->
===system===
Line 749 ⟶ 754:
of "keyboard macros" - though of course you could easily replace that
SendInput call with any routine of your choosing.
<!--<lang Phix>-->
<span style="color: #000080;font-style:italic;">--
-- demo\arwendemo\hotkey.exw
-- =========================
--
-- Author: Pete Lomax, credit to Aku Saya for HotKey
-- and Thomas Parslow for sendkeys
--
-- http://phix.x10.mx
--
--/**/</span><span style="color: #008080;">with</span> <span style="color: #000000;">gui</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">arwen</span><span style="color: #0000FF;">.</span><span style="color: #000000;">ew</span>
<span style="color: #008080;">constant</span>
<span style="color: #000000;">MOD_ALT</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#1</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">MOD_CONTROL</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#2</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">MOD_SHIFT</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#4</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">MOD_WIN</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#8</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">Modifier</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">vKeyCode</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">Main</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Window</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Hotkey"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">36</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">99</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">294</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">201</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">MainHwnd</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">getHwnd</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Main</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">mFile</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Menu</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"File"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span><span style="color: #000000;">190</span><span style="color: #0000FF;">,</span><span style="color: #000000;">63</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">mExit</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">MenuItem</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Exit"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">mFile</span><span style="color: #0000FF;">,</span><span style="color: #000000;">194</span><span style="color: #0000FF;">,</span><span style="color: #000000;">53</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">mHelp</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Menu</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Help"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span><span style="color: #000000;">182</span><span style="color: #0000FF;">,</span><span style="color: #000000;">57</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">mAbout</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">MenuItem</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"About"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">mHelp</span><span style="color: #0000FF;">,</span><span style="color: #000000;">184</span><span style="color: #0000FF;">,</span><span style="color: #000000;">45</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">AltKey</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">CheckBox</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Alt"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">62</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">20</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">ShiftKey</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">CheckBox</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Shift"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">28</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">56</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">20</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">CtrlKey</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">CheckBox</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Ctrl"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">52</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">70</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">20</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">WinKey</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">CheckBox</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Windows"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">76</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">72</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">20</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">KeyList</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ComboDropDown</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"KeyList"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">89</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">100</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">652</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">KeyInfoText</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Label</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">""</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">90</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">72</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">186</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">20</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">SS_LEFTNOWORDWRAP</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">SetButton</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Button</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"setHotKey"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">99</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">176</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">40</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">BS_DEFPUSHBUTTON</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">KillButton</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Button</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"killHotKey"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">195</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">99</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">80</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">40</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">KeyCodes</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">initialise</span><span style="color: #0000FF;">()</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">text</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">11</span> <span style="color: #008080;">do</span> <span style="color: #000080;font-style:italic;">-- F1 to F11 (F12 is reserved)</span>
<span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"F%d"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">f</span><span style="color: #0000FF;">)</span>
<span style="color: #004600;">void</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">insertItem</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KeyList</span><span style="color: #0000FF;">,</span><span style="color: #000000;">text</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #000000;">KeyCodes</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">VK_F1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VK_F2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VK_F3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VK_F4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VK_F5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VK_F6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VK_F7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VK_F8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VK_F9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VK_F10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VK_F11</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'A'</span> <span style="color: #008080;">to</span> <span style="color: #008000;">'Z'</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%s"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">)</span>
<span style="color: #004600;">void</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">insertItem</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KeyList</span><span style="color: #0000FF;">,</span><span style="color: #000000;">text</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">KeyCodes</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">ch</span> <span style="color: #000080;font-style:italic;">-- (as char, not string)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">9</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%d"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">)</span>
<span style="color: #004600;">void</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">insertItem</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KeyList</span><span style="color: #0000FF;">,</span><span style="color: #000000;">text</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">KeyCodes</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">i</span> <span style="color: #000080;font-style:italic;">-- (as char, not string)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #000000;">initialise</span><span style="color: #0000FF;">()</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">INPUT_KEYBOARD</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">pokeKey</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">pKey</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">key</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">--
-- and http://msdn.microsoft.com/en-us/library/windows/desktop/ms646271(v=vs.85).aspx</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">ScanCode</span>
<span style="color: #000000;">ScanCode</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">c_func</span><span style="color: #0000FF;">(</span><span style="color: #000000;">xVkKeyScan</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">key</span><span style="color: #0000FF;">})</span>
<span style="color: #000000;">poke4</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pKey</span><span style="color: #0000FF;">+</span><span style="color: #000000;">KEYBDINPUT_type</span><span style="color: #0000FF;">,</span><span style="color: #000000;">INPUT_KEYBOARD</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">poke2</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pKey</span><span style="color: #0000FF;">+</span><span style="color: #000000;">KEYBDINPUT_wVk</span><span style="color: #0000FF;">,</span><span style="color: #000000;">key</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">poke4</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pKey</span><span style="color: #0000FF;">+</span><span style="color: #000000;">KEYBDINPUT_dwFlags</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">poke4</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pKey</span><span style="color: #0000FF;">+</span><span style="color: #000000;">KEYBDINPUT_wScan</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ScanCode</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">poke4</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pKey</span><span style="color: #0000FF;">+</span><span style="color: #000000;">KEYBDINPUT_time</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">poke4</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pKey</span><span style="color: #0000FF;">+</span><span style="color: #000000;">KEYBDINPUT_dwExtraInfo</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">MainHandler</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">id</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">msg</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">wParam</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">object</span> <span style="color: #000000;">lParam</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">text</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">pKeys</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">pKey</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">nRes</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">msg</span><span style="color: #0000FF;">=</span><span style="color: #000000;">WM_SETFOCUS</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">id</span><span style="color: #0000FF;">=</span><span style="color: #000000;">SetButton</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">getIndex</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KeyList</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">setFocus</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KeyList</span><span style="color: #0000FF;">)</span>
<span style="color: #004600;">void</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">messageBox</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"HotKey"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Select a key from the drop-down"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MB_OK</span><span style="color: #0000FF;">)</span>
<span
<span style="color: #000000;">Modifier</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">isChecked</span><span style="color: #0000FF;">(</span><span style="color: #000000;">AltKey</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">MOD_ALT</span> <span style="color: #0000FF;">+</span>
<span style="color: #000000;">isChecked</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ShiftKey</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">MOD_SHIFT</span> <span style="color: #0000FF;">+</span>
<span style="color: #000000;">isChecked</span><span style="color: #0000FF;">(</span><span style="color: #000000;">CtrlKey</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">MOD_CONTROL</span> <span style="color: #0000FF;">+</span>
<span style="color: #000000;">isChecked</span><span style="color: #0000FF;">(</span><span style="color: #000000;">WinKey</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">MOD_WIN</span>
<span style="color: #000000;">vKeyCode</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">KeyCodes</span><span style="color: #0000FF;">[</span><span style="color: #000000;">getIndex</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KeyList</span><span style="color: #0000FF;">)]</span>
<span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"setHotKey(Main, #%02x, #%02x) [%s]"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">Modifier</span><span style="color: #0000FF;">,</span><span style="color: #000000;">vKeyCode</span><span style="color: #0000FF;">,</span><span style="color: #000000;">getText</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KeyList</span><span style="color: #0000FF;">)})</span>
<span style="color: #000000;">setText</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KeyInfoText</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">text</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">id</span><span style="color: #0000FF;">=</span><span style="color: #000000;">KillButton</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"killHotKey(Main) [%s]"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">getText</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KeyList</span><span style="color: #0000FF;">)})</span>
<span style="color: #000000;">setText</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KeyInfoText</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">text</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">msg</span><span style="color: #0000FF;">=</span><span style="color: #000000;">WM_COMMAND</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">id</span><span style="color: #0000FF;">=</span><span style="color: #000000;">mExit</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">closeWindow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Main</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">id</span><span style="color: #0000FF;">=</span><span style="color: #000000;">mAbout</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"Simple hotkey/sendinput wrapper.\n\n"</span><span style="color: #0000FF;">&</span>
<span style="color: #008000;">"Author Pete Lomax.\n"</span><span style="color: #0000FF;">&</span>
<span style="color: #008000;">"Written in phix (http://phix.x10.mx) but could easily be ported\n"</span><span style="color: #0000FF;">&</span>
<span style="color: #008000;">"to any language (that can invoke RegisterHotKey and SendInput).\n\n"</span><span style="color: #0000FF;">&</span>
<span style="color: #008000;">"First, use the checkboxes and dropdown to select a hotkey (eg F7).\n"</span><span style="color: #0000FF;">&</span>
<span style="color: #008000;">"Currently always sends {delete,down}, but that could easily be changed.\n"</span><span style="color: #0000FF;">&</span>
<span style="color: #008000;">"Used on build02 to perform the GUID stripping.\n\n"</span><span style="color: #0000FF;">&</span>
<span style="color: #008000;">"Note that Windows Server 2008 requires this to be run in admin mode, \n"</span><span style="color: #0000FF;">&</span>
<span style="color: #008000;">"as otherwise something called UIPI will block it and not say why.\n"</span>
<span style="color: #004600;">void</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">messageBox</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"HotKey"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">text</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MB_OK</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">id</span><span style="color: #0000FF;">=</span><span style="color: #000000;">SetButton</span> <span style="color: #008080;">then</span>
<span style="color: #000080;font-style:italic;">-- see http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309(v=vs.85).aspx</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c_func</span><span style="color: #0000FF;">(</span><span style="color: #000000;">xRegisterHotKey</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">MainHwnd</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">Modifier</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">vKeyCode</span><span style="color: #0000FF;">})=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #004600;">void</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">messageBox</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"HotKey"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Register Hotkey failed"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MB_OK</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">id</span><span style="color: #0000FF;">=</span><span style="color: #000000;">KillButton</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c_func</span><span style="color: #0000FF;">(</span><span style="color: #000000;">xUnregisterHotKey</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">MainHwnd</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">})=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #004600;">void</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">messageBox</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"HotKey"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"UnRegister Hotkey failed"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MB_OK</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">msg</span><span style="color: #0000FF;">=</span><span style="color: #000000;">WM_HOTKEY</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">setText</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%g"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">time</span><span style="color: #0000FF;">()))</span>
<span style="color: #000000;">pKeys</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">allocate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">sizeofstruct</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KEYBDINPUT</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">pKey</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">pKeys</span>
<span style="color: #000000;">pokeKey</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pKey</span><span style="color: #0000FF;">,</span><span style="color: #000000;">VK_DELETE</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">pKey</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">sizeofstruct</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KEYBDINPUT</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">pokeKey</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pKey</span><span style="color: #0000FF;">,</span><span style="color: #000000;">VK_DOWN</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- see http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx</span>
<span style="color: #000000;">nRes</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">c_func</span><span style="color: #0000FF;">(</span><span style="color: #000000;">xSendInput</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">pKeys</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sizeofstruct</span><span style="color: #0000FF;">(</span><span style="color: #000000;">KEYBDINPUT</span><span style="color: #0000FF;">)})</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">nRes</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">2</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">nRes</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">c_func</span><span style="color: #0000FF;">(</span><span style="color: #000000;">xGetLastError</span><span style="color: #0000FF;">,{})</span>
<span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"SendInput failed[%d]"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">nRes</span><span style="color: #0000FF;">)</span>
<span style="color: #004600;">void</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">messageBox</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"HotKey"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">text</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MB_OK</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">wParam</span> <span style="color: #008080;">or</span> <span style="color: #004080;">object</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lParam</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> <span style="color: #000080;font-style:italic;">-- suppress warnings</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">0</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #000000;">setHandler</span><span style="color: #0000FF;">({</span><span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SetButton</span><span style="color: #0000FF;">,</span><span style="color: #000000;">KillButton</span><span style="color: #0000FF;">,</span><span style="color: #000000;">mExit</span><span style="color: #0000FF;">,</span><span style="color: #000000;">mAbout</span><span style="color: #0000FF;">},</span><span style="color: #7060A8;">routine_id</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"MainHandler"</span><span style="color: #0000FF;">))</span>
<span style="color: #000000;">WinMain</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Main</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SW_NORMAL</span><span style="color: #0000FF;">)</span>
<!--</lang>-->
=={{header|PicoLisp}}==
|