<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[LA/QM forum - Shared QM code]]></title>
		<link>https://www.libreautomate.com/forum/</link>
		<description><![CDATA[LA/QM forum - https://www.libreautomate.com/forum]]></description>
		<pubDate>Sat, 02 May 2026 00:36:59 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[VISIO Vektor Frame Generator]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=7897</link>
			<pubDate>Wed, 22 Oct 2025 08:59:01 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=1594">MSCHINDI</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=7897</guid>
			<description><![CDATA[Automatically creates a vector graphic from a selected MS-VISIO shape and creates a colored frame around it<br />
(or only to Trace/vektorizierung a Shape...)<br />
<br />
I built this macro to create overlay images, similar to AXIALIS IconGenerator . . .<br />
<br />
Because the direct copy and paste of MS-VISIO shapes in INKSCAPE doesn't really work, I wrote this tool to solve this problem and other...<br />
<br />
BUGFIX: Error occurs (only) when I call this program via my "VISIO SchindiSoft Visio ADD-IN":<br />
Because I'm calling this program via my "SchindiSoft Visio ADD-IN", since Inkscape V 1.3 I've been getting a DLL error when running it directly via QM run...: The procedure entry point "SymSetExtendedOption" was not found in the DLL "C:\WINDOWS\SYSTEM32\dbgeng.dll". That's why I've had to launch it via the Windows System Run dialog since that version...<br />
I think it's a problem to call a 64-bit program from a 32-bit application via the MSO add-in.<br />
<br />
Only German versions! (Adapting the language is still necessary...)<br />
<br />
You need:<br />
QM - NoNaNed<br />
Special Function: GetFileVersionString  (see <a href="https://www.libreautomate.com/forum/showthread.php?tid=6861&amp;highlight=GetFileVersionString" target="_blank" rel="noopener" class="mycode_url">Create folder with version number</a>)<br />
MS-VISIO (testet with German V 2016...2019)<br />
INKSCAPE (adapted and tested up to function 1.4) from <a href="https://inkscape.org/de/" target="_blank" rel="noopener" class="mycode_url">Inkscape - Draw Freely. | Inkscape</a><br />
<br />
and of course suitable shapes  <img src="https://www.libreautomate.com/forum/images/smilies/wink.png" alt="Wink" title="Wink" class="smilie smilie_2" /><br />
<br />
Have fun with it!!!<br />
<br />
wfg. from Schindi aus Austria<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/qm/qml.png" title="Quick Macros file" border="0" alt=".qml" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1390" target="_blank" title="">VektorFrameGenerator-1.4.qml</a> (Size: 48 KB / Downloads: 89)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Automatically creates a vector graphic from a selected MS-VISIO shape and creates a colored frame around it<br />
(or only to Trace/vektorizierung a Shape...)<br />
<br />
I built this macro to create overlay images, similar to AXIALIS IconGenerator . . .<br />
<br />
Because the direct copy and paste of MS-VISIO shapes in INKSCAPE doesn't really work, I wrote this tool to solve this problem and other...<br />
<br />
BUGFIX: Error occurs (only) when I call this program via my "VISIO SchindiSoft Visio ADD-IN":<br />
Because I'm calling this program via my "SchindiSoft Visio ADD-IN", since Inkscape V 1.3 I've been getting a DLL error when running it directly via QM run...: The procedure entry point "SymSetExtendedOption" was not found in the DLL "C:\WINDOWS\SYSTEM32\dbgeng.dll". That's why I've had to launch it via the Windows System Run dialog since that version...<br />
I think it's a problem to call a 64-bit program from a 32-bit application via the MSO add-in.<br />
<br />
Only German versions! (Adapting the language is still necessary...)<br />
<br />
You need:<br />
QM - NoNaNed<br />
Special Function: GetFileVersionString  (see <a href="https://www.libreautomate.com/forum/showthread.php?tid=6861&amp;highlight=GetFileVersionString" target="_blank" rel="noopener" class="mycode_url">Create folder with version number</a>)<br />
MS-VISIO (testet with German V 2016...2019)<br />
INKSCAPE (adapted and tested up to function 1.4) from <a href="https://inkscape.org/de/" target="_blank" rel="noopener" class="mycode_url">Inkscape - Draw Freely. | Inkscape</a><br />
<br />
and of course suitable shapes  <img src="https://www.libreautomate.com/forum/images/smilies/wink.png" alt="Wink" title="Wink" class="smilie smilie_2" /><br />
<br />
Have fun with it!!!<br />
<br />
wfg. from Schindi aus Austria<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/qm/qml.png" title="Quick Macros file" border="0" alt=".qml" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1390" target="_blank" title="">VektorFrameGenerator-1.4.qml</a> (Size: 48 KB / Downloads: 89)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Function WinSetOnTop (or not and/or activate, size it, move it to POS and/or Monitor)]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=7884</link>
			<pubDate>Mon, 20 Oct 2025 06:57:17 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=1594">MSCHINDI</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=7884</guid>
			<description><![CDATA[To set dialog windows that normally do not have this Feature in QM (e.g. Input box, OpenSaveDialog...)<br />
<br />
see <a href="https://www.libreautomate.com/forum/showthread.php?tid=7885" target="_blank" rel="noopener" class="mycode_url">Function WinSetOnTop (or not and/or activate, size it, move it to POS and/or Monitor)</a>]]></description>
			<content:encoded><![CDATA[To set dialog windows that normally do not have this Feature in QM (e.g. Input box, OpenSaveDialog...)<br />
<br />
see <a href="https://www.libreautomate.com/forum/showthread.php?tid=7885" target="_blank" rel="noopener" class="mycode_url">Function WinSetOnTop (or not and/or activate, size it, move it to POS and/or Monitor)</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Special Compiler UPX & SIGN TOOL for DLL, EXE and MSO-VBA]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=7881</link>
			<pubDate>Wed, 15 Oct 2025 10:22:29 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=1594">MSCHINDI</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=7881</guid>
			<description><![CDATA[Hello Again!<br />
<br />
<span style="font-size: large;" class="mycode_size">I have created a Quick Macros (QM-) Progrämmli ähh Tool to Compress and or Sign my Proggis, DLL's or suitable MS-OFFICE Files...</span><br />
<br />
You can use it with Quick Macros (QM-) Compiler or other Compiler (PureBasic etc.) or as a Standalone (Drag&amp;Drop-) TOOL...<br />
<br />
<span style="font-size: large;" class="mycode_size">You need this:</span><br />
<br />
The Wonderful (now free) Automation Program: Quick Macros - automation software for Windows (<a href="https://quickmacros.com/" target="_blank" rel="noopener" class="mycode_url">https://quickmacros.com/</a>). Some features: Macro commands, including user interface automation, launching programs, file management, text processing (Autotext - Inserts text snippets using keyboard shortcuts) and custom dialogs. Triggers, including hotkeys, mouse, scheduler, toolbars and menus. Records keyboard and mouse actions. Programming language with functions, classes, full API support. You can create programs for various purposes, and run them in Quick Macros or as exe files. Quick Macros is no longer being developed or updated. It has been superseded by LibreAutomate C#. You can still download the last QM version, 2.4.12.2. Date 2021-08-22. For Windows 7, 8, 8.1, 10, 11. Now it's free. Registration code: XVZVTCLELEFXEFMETVVZPCXFNMCRCFDN-Now%20it%27s%20free<br />
 <br />
Import the Source(s) from Attached Files...<br />
<br />
The unpacked upx.exe from upx-5.0.2-win32.zip - <a href="https://github.com/upx/upx" target="_blank" rel="noopener" class="mycode_url">upx/upx: UPX - the Ultimate Packer for eXecutables</a> (UPX is Copyright © 2024 by <a href="https://www.oberhumer.com/" target="_blank" rel="noopener" class="mycode_url">Markus F.X.J. Oberhumer</a>, <a href="mailto:ezerotven+github@gmail.com" class="mycode_email">László Molnár</a> &amp; <a href="https://www.bitwagon.com/" target="_blank" rel="noopener" class="mycode_url">John F. Reiser</a>) (UPX - X86 Win32 version it is good for all), and the original Microsoft SignTool.exe (from Windows SDK 10 package - Folder: Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86 - ONLY 32 BIT COMPONENT WORKS CORRECT!!!) - both must be placed in the same folder as of UPX / SIGN Tool Runner (e.g. in Subfolder "Plugins") or in a Subfolder from them named "CERT"<br />
 <br />
And of course you also need a suitable (ev. self-created...) SIGN (*.pfx) file for code certification (i put them in the Subfolder ...\CERT)...<br />
(see good Article: <a href="https://www.windowspro.de/script/new-selfsignedcertificate-selbstsignierte-zertifikate-ausstellen-powershell" target="_blank" rel="noopener" class="mycode_url">https://www.windowspro.de/script/new-sel...powershell</a>)<br />
<br />
To activate the functions for EXE (after!) Compiling you must make first an Entry (for each exe file) in QM Menu under Run Make Exe:<br />
In Section: Run functions when creating a exe, <span style="font-weight: bold;" class="mycode_b">After </span>- insert the name of the tool (without extension!!!)<br />
eg. Run_UPX_SIGN                                  (or rename Run_UPX_SIGN.exe to shorter e.g. MyUPX.exe) to have a smaller entry (only: MyUPX)<br />
<br />
My program detects, based on the file extension, whether it is a DLL, EXE, or an MS-Office file with a macro, and displays the corresponding status messages at the end.<br />
<br />
<span style="font-size: large;" class="mycode_size">To sign MSO vba files too - you need:</span><br />
<span style="font-weight: bold;" class="mycode_b">Microsoft Office Subject Interface Packages for Digitally Signing VBA Projects<br />
See too: </span><a href="https://github.com/Joflixen/signtool" target="_blank" rel="noopener" class="mycode_url">https://github.com/Joflixen/signtool</a> and the headers of my QML source file...<br />
<ol type="1" class="mycode_list"><li>Download the <a href="https://go.microsoft.com/fwlink/p/?linkid=84091" target="_blank" rel="noopener" class="mycode_url">Windows SDK</a>, and install the Code Signing component.<br />
</li>
<li>Once installed go to the install path, on my local workstation it was here: <br />
 C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86  <span style="font-weight: bold;" class="mycode_b">(ONLY 32 BIT COMPONENT WORKS!!!)</span><br />
</li>
<li>Copy the x86 version of <span style="font-weight: bold;" class="mycode_b">SignTool.exe</span> to your working path... <br />
</li>
<li>Download and run the <a href="https://www.microsoft.com/en-us/download/details.aspx?id=56617" target="_blank" rel="noopener" class="mycode_url">Microsoft Office Subject Interface Package</a>, during the installer it will ask for an installation path, choose a path like: <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>C:&#92;[workingpath]&#92;MSOSIP</code></div></div></li>
<li>Refer to the readme.txt for additional instructions if required in "<span style="font-weight: bold;" class="mycode_b">HOW TO USE THESE COMPONENTS</span><br />
<br />
</li>
</ol>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">IMPORTANT: </span>You must registered the two msosip*.dll Files with regsvr32.exe as <span style="font-weight: bold;" class="mycode_b">Admin-User </span>in a fixed directory and Place the <span style="font-weight: bold;" class="mycode_b">vbe7.dll</span> in them! (and you need ev. VC_redist.x86.exe...)<br />
call from cmd with run as Admin:<br />
cd to the Install directory from msosip.dll... and run<br />
C:\Windows\System32\regsvr32.exe msosip.dll and C:\Windows\System32\regsvr32.exe msosipx.dll</span><br />
<br />
<span style="font-size: large;" class="mycode_size">An informative RegSvr32 message box respectively should then appear...</span><br />
<br />
Update 2025-10-20:<br />
I forgot the WinSetOnTop function - I added it  (and see the new Thread: <a href="https://www.libreautomate.com/forum/showthread.php?tid=7885" target="_blank" rel="noopener" class="mycode_url">Function WinSetOnTop (or not and/or activate, size it, move it to POS and/or Monitor)</a> about it...)<br />
<br />
Update 2026-03-23:<br />
Add SetFileTimes for MS-Office Macro-Files too:<br />
SetFileTimes F"{sFullFilePath}" F"{sDT}"  ;;damit File-Datum u. Zeit erhalten bleibt...<br />
after Line 394 (=run(sComSpec F"/C {s.dospath(sSTPath)}\signtool.exe verify /pa /v [34]{sFullFilePath}[34]&gt;{sSTT}[34]" "" "" 0x400))<br />
<br />
<br />
wfg. from Schindi aus Austria<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/qm/qml.png" title="Quick Macros file" border="0" alt=".qml" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1386" target="_blank" title="">Run_UPX_SIGN.qml</a> (Size: 13 KB / Downloads: 74)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/qm/qml.png" title="Quick Macros file" border="0" alt=".qml" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1387" target="_blank" title="">WinSetOnTop.qml</a> (Size: 6 KB / Downloads: 70)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Hello Again!<br />
<br />
<span style="font-size: large;" class="mycode_size">I have created a Quick Macros (QM-) Progrämmli ähh Tool to Compress and or Sign my Proggis, DLL's or suitable MS-OFFICE Files...</span><br />
<br />
You can use it with Quick Macros (QM-) Compiler or other Compiler (PureBasic etc.) or as a Standalone (Drag&amp;Drop-) TOOL...<br />
<br />
<span style="font-size: large;" class="mycode_size">You need this:</span><br />
<br />
The Wonderful (now free) Automation Program: Quick Macros - automation software for Windows (<a href="https://quickmacros.com/" target="_blank" rel="noopener" class="mycode_url">https://quickmacros.com/</a>). Some features: Macro commands, including user interface automation, launching programs, file management, text processing (Autotext - Inserts text snippets using keyboard shortcuts) and custom dialogs. Triggers, including hotkeys, mouse, scheduler, toolbars and menus. Records keyboard and mouse actions. Programming language with functions, classes, full API support. You can create programs for various purposes, and run them in Quick Macros or as exe files. Quick Macros is no longer being developed or updated. It has been superseded by LibreAutomate C#. You can still download the last QM version, 2.4.12.2. Date 2021-08-22. For Windows 7, 8, 8.1, 10, 11. Now it's free. Registration code: XVZVTCLELEFXEFMETVVZPCXFNMCRCFDN-Now%20it%27s%20free<br />
 <br />
Import the Source(s) from Attached Files...<br />
<br />
The unpacked upx.exe from upx-5.0.2-win32.zip - <a href="https://github.com/upx/upx" target="_blank" rel="noopener" class="mycode_url">upx/upx: UPX - the Ultimate Packer for eXecutables</a> (UPX is Copyright © 2024 by <a href="https://www.oberhumer.com/" target="_blank" rel="noopener" class="mycode_url">Markus F.X.J. Oberhumer</a>, <a href="mailto:ezerotven+github@gmail.com" class="mycode_email">László Molnár</a> &amp; <a href="https://www.bitwagon.com/" target="_blank" rel="noopener" class="mycode_url">John F. Reiser</a>) (UPX - X86 Win32 version it is good for all), and the original Microsoft SignTool.exe (from Windows SDK 10 package - Folder: Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86 - ONLY 32 BIT COMPONENT WORKS CORRECT!!!) - both must be placed in the same folder as of UPX / SIGN Tool Runner (e.g. in Subfolder "Plugins") or in a Subfolder from them named "CERT"<br />
 <br />
And of course you also need a suitable (ev. self-created...) SIGN (*.pfx) file for code certification (i put them in the Subfolder ...\CERT)...<br />
(see good Article: <a href="https://www.windowspro.de/script/new-selfsignedcertificate-selbstsignierte-zertifikate-ausstellen-powershell" target="_blank" rel="noopener" class="mycode_url">https://www.windowspro.de/script/new-sel...powershell</a>)<br />
<br />
To activate the functions for EXE (after!) Compiling you must make first an Entry (for each exe file) in QM Menu under Run Make Exe:<br />
In Section: Run functions when creating a exe, <span style="font-weight: bold;" class="mycode_b">After </span>- insert the name of the tool (without extension!!!)<br />
eg. Run_UPX_SIGN                                  (or rename Run_UPX_SIGN.exe to shorter e.g. MyUPX.exe) to have a smaller entry (only: MyUPX)<br />
<br />
My program detects, based on the file extension, whether it is a DLL, EXE, or an MS-Office file with a macro, and displays the corresponding status messages at the end.<br />
<br />
<span style="font-size: large;" class="mycode_size">To sign MSO vba files too - you need:</span><br />
<span style="font-weight: bold;" class="mycode_b">Microsoft Office Subject Interface Packages for Digitally Signing VBA Projects<br />
See too: </span><a href="https://github.com/Joflixen/signtool" target="_blank" rel="noopener" class="mycode_url">https://github.com/Joflixen/signtool</a> and the headers of my QML source file...<br />
<ol type="1" class="mycode_list"><li>Download the <a href="https://go.microsoft.com/fwlink/p/?linkid=84091" target="_blank" rel="noopener" class="mycode_url">Windows SDK</a>, and install the Code Signing component.<br />
</li>
<li>Once installed go to the install path, on my local workstation it was here: <br />
 C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86  <span style="font-weight: bold;" class="mycode_b">(ONLY 32 BIT COMPONENT WORKS!!!)</span><br />
</li>
<li>Copy the x86 version of <span style="font-weight: bold;" class="mycode_b">SignTool.exe</span> to your working path... <br />
</li>
<li>Download and run the <a href="https://www.microsoft.com/en-us/download/details.aspx?id=56617" target="_blank" rel="noopener" class="mycode_url">Microsoft Office Subject Interface Package</a>, during the installer it will ask for an installation path, choose a path like: <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>C:&#92;[workingpath]&#92;MSOSIP</code></div></div></li>
<li>Refer to the readme.txt for additional instructions if required in "<span style="font-weight: bold;" class="mycode_b">HOW TO USE THESE COMPONENTS</span><br />
<br />
</li>
</ol>
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">IMPORTANT: </span>You must registered the two msosip*.dll Files with regsvr32.exe as <span style="font-weight: bold;" class="mycode_b">Admin-User </span>in a fixed directory and Place the <span style="font-weight: bold;" class="mycode_b">vbe7.dll</span> in them! (and you need ev. VC_redist.x86.exe...)<br />
call from cmd with run as Admin:<br />
cd to the Install directory from msosip.dll... and run<br />
C:\Windows\System32\regsvr32.exe msosip.dll and C:\Windows\System32\regsvr32.exe msosipx.dll</span><br />
<br />
<span style="font-size: large;" class="mycode_size">An informative RegSvr32 message box respectively should then appear...</span><br />
<br />
Update 2025-10-20:<br />
I forgot the WinSetOnTop function - I added it  (and see the new Thread: <a href="https://www.libreautomate.com/forum/showthread.php?tid=7885" target="_blank" rel="noopener" class="mycode_url">Function WinSetOnTop (or not and/or activate, size it, move it to POS and/or Monitor)</a> about it...)<br />
<br />
Update 2026-03-23:<br />
Add SetFileTimes for MS-Office Macro-Files too:<br />
SetFileTimes F"{sFullFilePath}" F"{sDT}"  ;;damit File-Datum u. Zeit erhalten bleibt...<br />
after Line 394 (=run(sComSpec F"/C {s.dospath(sSTPath)}\signtool.exe verify /pa /v [34]{sFullFilePath}[34]&gt;{sSTT}[34]" "" "" 0x400))<br />
<br />
<br />
wfg. from Schindi aus Austria<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/qm/qml.png" title="Quick Macros file" border="0" alt=".qml" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1386" target="_blank" title="">Run_UPX_SIGN.qml</a> (Size: 13 KB / Downloads: 74)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/qm/qml.png" title="Quick Macros file" border="0" alt=".qml" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1387" target="_blank" title="">WinSetOnTop.qml</a> (Size: 6 KB / Downloads: 70)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Special Inno Setup Compiler SignTool (It retains the TIME of signed files!)]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=7879</link>
			<pubDate>Mon, 13 Oct 2025 09:21:00 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=1594">MSCHINDI</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=7879</guid>
			<description><![CDATA[Inno Setup is an open-source installation builder for Windows applications by Jordan Russell and Martijn Laan. Since its introduction in 1997, Inno Setup has been trusted by developers and organizations of all sizes to reliably deploy software to millions of PCs worldwide.<br />
<span style="font-weight: bold;" class="mycode_b">I use it for all my various Projects - love it!!!</span><br />
<br />
Now you can automatically SIGN your compiled Inno Setup (Un-)Installer Setup.exe Files and other Files in them!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">But there is a the Problem</span> with the Sign Mechanism from Inno Setup Compiler - together with the Microsoft Sign Tool:<br />
When i use the "[Files] Flags: sign, for my various executable files, that all the <span style="font-weight: bold;" class="mycode_b">Source Files Date/Time are set to the compiling time</span>...  <img src="https://www.libreautomate.com/forum/images/smilies/sad.png" alt="Sad" title="Sad" class="smilie smilie_8" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">That's - why I created a Signtool Starter now...</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">It retains the Date/Time of executable files!<br />
<br />
My program is simply switched between Inno Setup Compiler and MS-SignTool...</span><br />
<br />
This sounds simple, but the evaluation from the command line parameters and pathes is a bit tricky...<br />
<br />
You need this:<br />
 <br />
The Wonderful (now free) Automation Program: Quick Macros - automation software for Windows (<a href="https://quickmacros.com/" target="_blank" rel="noopener" class="mycode_url">https://quickmacros.com/</a>). Some features: Macro commands, including user interface automation, launching programs, file management, text processing (Autotext - Inserts text snippets using keyboard shortcuts) and custom dialogs. Triggers, including hotkeys, mouse, scheduler, toolbars and menus. Records keyboard and mouse actions. Programming language with functions, classes, full API support. You can create programs for various purposes, and run them in Quick Macros or as exe files. Quick Macros is no longer being developed or updated. It has been superseded by LibreAutomate C#. You can still download the last QM version, 2.4.12.2. Date 2021-08-22. For Windows 7, 8, 8.1, 10, 11. Now it's free. Registration code: XVZVTCLELEFXEFMETVVZPCXFNMCRCFDN-Now%20it%27s%20free<br />
 <br />
The original Microsoft SignTools.exe (from Windows SDK 10 package - Folder: Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86 - ONLY 32 BIT COMPONENT WORKS CORRECT!!!) - must be placed in the same folder as Inno Setup Compiler or in the same Folder of INNO SignTool Runner (e.g. in Subfolder "Plugins") or in a Subfolder from them named "CERT<br />
<br />
And of course you also need a suitable (ev. self-created...) SIGN (*.pfx) file for code certification (i put them in the Subfolder ...\CERT)...<br />
(see good Article: <a href="https://www.windowspro.de/script/new-selfsignedcertificate-selbstsignierte-zertifikate-ausstellen-powershell" target="_blank" rel="noopener" class="mycode_url">https://www.windowspro.de/script/new-sel...powershell</a>)<br />
<br />
To use a signing, you must make first an Entry in Inno Setup Compiler Menu under Tools, Configure Sign Tool:<br />
<br />
Name of the Sign Tool:<br />
e.g.<br />
SchindiSoft_Code_Sign,<br />
Command of the Sign Tool:<br />
e.g.  if you had create a Plugins Folder in InnoSetp Compiler ProgramFiles Folder<br />
".\Plugins\Inno_SignTool.exe" sign /f ".\Plugins\CERT\SchindiSoft_CODE_CERT.pfx" /p Password_PW&#36; /t "http://timestamp.digicert.com" /fd SHA256 &#36;p<br />
<br />
Password_PW&#36;=Your PW...<br />
<br />
it makes a Reg-Entry:<br />
Example Reg Entry if you had create a Plugins Folder in InnoSetp Compiler ProgramFiles Folder<br />
REGEDIT4<br />
<br />
[HKEY_CURRENT_USER\Software\Jordan Russell\Inno Setup\SignTools]<br />
"SignTool0"="SchindiSoft_Code_Sign=\".\\Plugins\\Inno_SignTool.exe" sign /f \".\\Plugins\\CERT\\SchindiSoft_CODE_CERT.pfx\" /p SchindiSoft-PW&#36; /t \"http://timestamp.digicert.com\" /fd SHA256 &#36;p"<br />
<br />
And then the additions to the Inno Setup Script (see Inno Setup Help too):<br />
in [Setup] Section:<br />
e.g.<br />
[Setup]<br />
;;SignTool=The same name as in Sign Tool Configuration!<br />
SignTool=SchindiSoft_Code_Sign &#36;f<br />
...<br />
<br />
and when you wish to Sign own Files too:  (that is the actual purpose of the plugin)<br />
In [Files] Section<br />
e.g.<br />
[Files]<br />
First all Files from Folder Shared...<br />
Source: "D:\Data\Projekte\Shared\MyTools\*.*"; DestDir: "{app}"; Flags: ignoreversion<br />
;and then a second entry so that only the *.exe files are signed...<br />
Source: "D:\Data\Projekte\Shared\MyTools\*.exe"; DestDir: "{app}"; Flags: ignoreversion signonce (or sign)<br />
;or only one exe...<br />
Source: "D:\Data\Projekte\Shared\MyTools\xyz.exe"; DestDir: "{app}"; Flags: ignoreversion signonce (or sign)<br />
...<br />
<br />
wfg. from Schindi aus Austria<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1384" target="_blank" title="">Inno_SignTool.zip</a> (Size: 252.17 KB / Downloads: 78)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Inno Setup is an open-source installation builder for Windows applications by Jordan Russell and Martijn Laan. Since its introduction in 1997, Inno Setup has been trusted by developers and organizations of all sizes to reliably deploy software to millions of PCs worldwide.<br />
<span style="font-weight: bold;" class="mycode_b">I use it for all my various Projects - love it!!!</span><br />
<br />
Now you can automatically SIGN your compiled Inno Setup (Un-)Installer Setup.exe Files and other Files in them!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">But there is a the Problem</span> with the Sign Mechanism from Inno Setup Compiler - together with the Microsoft Sign Tool:<br />
When i use the "[Files] Flags: sign, for my various executable files, that all the <span style="font-weight: bold;" class="mycode_b">Source Files Date/Time are set to the compiling time</span>...  <img src="https://www.libreautomate.com/forum/images/smilies/sad.png" alt="Sad" title="Sad" class="smilie smilie_8" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">That's - why I created a Signtool Starter now...</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">It retains the Date/Time of executable files!<br />
<br />
My program is simply switched between Inno Setup Compiler and MS-SignTool...</span><br />
<br />
This sounds simple, but the evaluation from the command line parameters and pathes is a bit tricky...<br />
<br />
You need this:<br />
 <br />
The Wonderful (now free) Automation Program: Quick Macros - automation software for Windows (<a href="https://quickmacros.com/" target="_blank" rel="noopener" class="mycode_url">https://quickmacros.com/</a>). Some features: Macro commands, including user interface automation, launching programs, file management, text processing (Autotext - Inserts text snippets using keyboard shortcuts) and custom dialogs. Triggers, including hotkeys, mouse, scheduler, toolbars and menus. Records keyboard and mouse actions. Programming language with functions, classes, full API support. You can create programs for various purposes, and run them in Quick Macros or as exe files. Quick Macros is no longer being developed or updated. It has been superseded by LibreAutomate C#. You can still download the last QM version, 2.4.12.2. Date 2021-08-22. For Windows 7, 8, 8.1, 10, 11. Now it's free. Registration code: XVZVTCLELEFXEFMETVVZPCXFNMCRCFDN-Now%20it%27s%20free<br />
 <br />
The original Microsoft SignTools.exe (from Windows SDK 10 package - Folder: Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86 - ONLY 32 BIT COMPONENT WORKS CORRECT!!!) - must be placed in the same folder as Inno Setup Compiler or in the same Folder of INNO SignTool Runner (e.g. in Subfolder "Plugins") or in a Subfolder from them named "CERT<br />
<br />
And of course you also need a suitable (ev. self-created...) SIGN (*.pfx) file for code certification (i put them in the Subfolder ...\CERT)...<br />
(see good Article: <a href="https://www.windowspro.de/script/new-selfsignedcertificate-selbstsignierte-zertifikate-ausstellen-powershell" target="_blank" rel="noopener" class="mycode_url">https://www.windowspro.de/script/new-sel...powershell</a>)<br />
<br />
To use a signing, you must make first an Entry in Inno Setup Compiler Menu under Tools, Configure Sign Tool:<br />
<br />
Name of the Sign Tool:<br />
e.g.<br />
SchindiSoft_Code_Sign,<br />
Command of the Sign Tool:<br />
e.g.  if you had create a Plugins Folder in InnoSetp Compiler ProgramFiles Folder<br />
".\Plugins\Inno_SignTool.exe" sign /f ".\Plugins\CERT\SchindiSoft_CODE_CERT.pfx" /p Password_PW&#36; /t "http://timestamp.digicert.com" /fd SHA256 &#36;p<br />
<br />
Password_PW&#36;=Your PW...<br />
<br />
it makes a Reg-Entry:<br />
Example Reg Entry if you had create a Plugins Folder in InnoSetp Compiler ProgramFiles Folder<br />
REGEDIT4<br />
<br />
[HKEY_CURRENT_USER\Software\Jordan Russell\Inno Setup\SignTools]<br />
"SignTool0"="SchindiSoft_Code_Sign=\".\\Plugins\\Inno_SignTool.exe" sign /f \".\\Plugins\\CERT\\SchindiSoft_CODE_CERT.pfx\" /p SchindiSoft-PW&#36; /t \"http://timestamp.digicert.com\" /fd SHA256 &#36;p"<br />
<br />
And then the additions to the Inno Setup Script (see Inno Setup Help too):<br />
in [Setup] Section:<br />
e.g.<br />
[Setup]<br />
;;SignTool=The same name as in Sign Tool Configuration!<br />
SignTool=SchindiSoft_Code_Sign &#36;f<br />
...<br />
<br />
and when you wish to Sign own Files too:  (that is the actual purpose of the plugin)<br />
In [Files] Section<br />
e.g.<br />
[Files]<br />
First all Files from Folder Shared...<br />
Source: "D:\Data\Projekte\Shared\MyTools\*.*"; DestDir: "{app}"; Flags: ignoreversion<br />
;and then a second entry so that only the *.exe files are signed...<br />
Source: "D:\Data\Projekte\Shared\MyTools\*.exe"; DestDir: "{app}"; Flags: ignoreversion signonce (or sign)<br />
;or only one exe...<br />
Source: "D:\Data\Projekte\Shared\MyTools\xyz.exe"; DestDir: "{app}"; Flags: ignoreversion signonce (or sign)<br />
...<br />
<br />
wfg. from Schindi aus Austria<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1384" target="_blank" title="">Inno_SignTool.zip</a> (Size: 252.17 KB / Downloads: 78)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[KW-Tray CalenderWeek Tray App (Kalender-Woche)]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=7878</link>
			<pubDate>Thu, 02 Oct 2025 06:46:22 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=1594">MSCHINDI</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=7878</guid>
			<description><![CDATA[I have create a QM-Macro-App (KW-Tray.exe) to Display the CalenderWeek in the Tray (Internationale ISO 8601 Kalender-Wochen-Nummerierung) and copy it to Clipboard or Speak it (with SAPI 5 TTS)<br />
It  needs the Function-Files from QM-Forum: <a href="https://www.libreautomate.com/forum/showthread.php?tid=7874" target="_blank" rel="noopener" class="mycode_url">Get Week of Year - (Funktion Kalenderwoche)</a> = <a href="https://www.libreautomate.com/forum/showthread.php?tid=7874" target="_blank" rel="noopener" class="mycode_url">https://www.libreautomate.com/forum/show...p?tid=7874</a><br />
<br />
This is one of the few programs that displays the KW in the tray, additionally with the option to copy it or output it via speech synthesis...<br />
<br />
Of course, various (language...) adjustments still need to be made...<br />
Still added mutex function and automatic update of the date from tray icon hover display...<br />
<br />
Update 2025-10:<br />
Added Recource File "KW-Tray.icl" to Display the calendar week in the taskbar's system tray, without hovering over it with the mouse<br />
You can use my "standard - integrated" Icon resource File added to the exe, or Create your own (with IrfanView, ImageMagick, Greenfish Icon Editor Pro...) and place it in the Program - Directory...<br />
<br />
Update 2025-11:<br />
Added routine to keep the tray icon in the same position.<br />
<br />
Update 2026-01:<br />
Correction of the routine to keep the tray icon in the same position.<br />
<br />
How To Create the ICON Resource:<br />
Batch File example to create the needed Icons from a white 256 x 256 png...<br />
.\ImageMagick\convert.exe for my portable Version or only Magick.exe (installed Version with Path entry in environment variables) and parameters: weiss256.png -gravity center -pointsize 225 -annotate 0 '01'  -define icon:auto-resize=16 "01 KW-Tray.ico"<br />
z.B.:<br />
.\ImageMagick\convert weiss256.png -gravity center -pointsize 225 -annotate 0 '01'  -define icon:auto-resize=16 "01 KW-Tray.ico"<br />
.\ImageMagick\convert weiss256.png -gravity center -pointsize 225 -annotate 0 '02'  -define icon:auto-resize=16 "02 KW-Tray.ico"<br />
.\ImageMagick\convert weiss256.png -gravity center -pointsize 225 -annotate 0 '03'  -define icon:auto-resize=16 "03 KW-Tray.ico"<br />
usw...<br />
and then create the *.ICL (i use the free Greenfish Icon Editor) from the Icons (in nummerical Order!)...<br />
<br />
wfg. from Schindi aus Austria<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1383" target="_blank" title="">KW-Tray.zip</a> (Size: 270.85 KB / Downloads: 73)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[I have create a QM-Macro-App (KW-Tray.exe) to Display the CalenderWeek in the Tray (Internationale ISO 8601 Kalender-Wochen-Nummerierung) and copy it to Clipboard or Speak it (with SAPI 5 TTS)<br />
It  needs the Function-Files from QM-Forum: <a href="https://www.libreautomate.com/forum/showthread.php?tid=7874" target="_blank" rel="noopener" class="mycode_url">Get Week of Year - (Funktion Kalenderwoche)</a> = <a href="https://www.libreautomate.com/forum/showthread.php?tid=7874" target="_blank" rel="noopener" class="mycode_url">https://www.libreautomate.com/forum/show...p?tid=7874</a><br />
<br />
This is one of the few programs that displays the KW in the tray, additionally with the option to copy it or output it via speech synthesis...<br />
<br />
Of course, various (language...) adjustments still need to be made...<br />
Still added mutex function and automatic update of the date from tray icon hover display...<br />
<br />
Update 2025-10:<br />
Added Recource File "KW-Tray.icl" to Display the calendar week in the taskbar's system tray, without hovering over it with the mouse<br />
You can use my "standard - integrated" Icon resource File added to the exe, or Create your own (with IrfanView, ImageMagick, Greenfish Icon Editor Pro...) and place it in the Program - Directory...<br />
<br />
Update 2025-11:<br />
Added routine to keep the tray icon in the same position.<br />
<br />
Update 2026-01:<br />
Correction of the routine to keep the tray icon in the same position.<br />
<br />
How To Create the ICON Resource:<br />
Batch File example to create the needed Icons from a white 256 x 256 png...<br />
.\ImageMagick\convert.exe for my portable Version or only Magick.exe (installed Version with Path entry in environment variables) and parameters: weiss256.png -gravity center -pointsize 225 -annotate 0 '01'  -define icon:auto-resize=16 "01 KW-Tray.ico"<br />
z.B.:<br />
.\ImageMagick\convert weiss256.png -gravity center -pointsize 225 -annotate 0 '01'  -define icon:auto-resize=16 "01 KW-Tray.ico"<br />
.\ImageMagick\convert weiss256.png -gravity center -pointsize 225 -annotate 0 '02'  -define icon:auto-resize=16 "02 KW-Tray.ico"<br />
.\ImageMagick\convert weiss256.png -gravity center -pointsize 225 -annotate 0 '03'  -define icon:auto-resize=16 "03 KW-Tray.ico"<br />
usw...<br />
and then create the *.ICL (i use the free Greenfish Icon Editor) from the Icons (in nummerical Order!)...<br />
<br />
wfg. from Schindi aus Austria<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1383" target="_blank" title="">KW-Tray.zip</a> (Size: 270.85 KB / Downloads: 73)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ChatGPT seems to generate correct QM response!]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=7376</link>
			<pubDate>Wed, 18 Jan 2023 12:44:25 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=715">r0n</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=7376</guid>
			<description><![CDATA[If image doesn't show:<br />
<a href="https://ibb.co/vkNbKt5" target="_blank" rel="noopener" class="mycode_url">https://ibb.co/vkNbKt5</a><br />
<br />
<img src="https://i.ibb.co/BBhmS1D/1.png" loading="lazy"  alt="[Image: 1.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[If image doesn't show:<br />
<a href="https://ibb.co/vkNbKt5" target="_blank" rel="noopener" class="mycode_url">https://ibb.co/vkNbKt5</a><br />
<br />
<img src="https://i.ibb.co/BBhmS1D/1.png" loading="lazy"  alt="[Image: 1.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[quick howto: DBXCLI (dropbox commandline)]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=7200</link>
			<pubDate>Sun, 23 Jan 2022 07:10:38 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=715">r0n</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=7200</guid>
			<description><![CDATA[You can use DBXCLI to interact with your dropbox account using command line.<br />
You can do the basic things: listing, copying,....etc...<br />
<br />
Download DBXLCI:<br />
<a href="https://github.com/dropbox/dbxcli" target="_blank" rel="noopener" class="mycode_url">https://github.com/dropbox/dbxcli</a><br />
In the above githubpage, see at the rightside 'Releases'-link, click on it and download the "dbxcli-windows-amd64.exe"<br />
<br />
German tutorial which explains the below steps + some other things.<br />
I couldn't find an english tutorial which explains it like the german tutorial.<br />
<a href="https://www.youtube.com/watch?v=p2r8xsyLyEY" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=p2r8xsyLyEY</a><br />
<br />
Below I explained how to setup and use DBXCLI, replace c:\test with your location where you saved dbxcli-windows-amd64.exe<br />
<br />
<span style="font-weight: bold;" class="mycode_b">STEP 1</span><br />
Download the correct exe and place it in an folder.<br />
Example:<br />
"dbxcli-windows-amd64.exe" downloaded in "c:\test"<br />
c:\test\dbxcli-windows-amd64.exe<br />
<br />
<span style="font-weight: bold;" class="mycode_b">STEP 2</span><br />
In cmd run:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>c:&#92;test&#92;dbxcli-windows-amd64.exe account</code></div></div><br />
A response prompt will appears explaining 3 short steps, follow these 3 short steps.<br />
In short:<br />
- First in browser login into your dropbox account, then copy url from the cmd response prompt, paste in browser.<br />
- Copy the response 'authorization code' from browser window into cmd window then press [ENTER]<br />
<br />
<span style="font-weight: bold;" class="mycode_b">STEP 3</span><br />
After you have pressed [ENTER] in step 2, you will see response  which should be 6 lines (Account Id, Account Type,....)<br />
If you see "Paired Account: false" then that's correct.<br />
You are done!<br />
Type the following command to test (list root items):<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>c:&#92;test&#92;dbxcli-windows-amd64.exe -ls</code></div></div><br />
Normally would add an path after -ls to show the contents of that path.<br />
But the path is excluded so it shows the contents from the root.<br />
See below for an example where you show the contents of an specific path.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">OTHER INFO</span><br />
<br />
To show basic help info (shows all available commands: ls, cp, du,....etc..)<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>c:&#92;test&#92;dbxcli-windows-amd64.exe</code></div></div><br />
<br />
To show help about an specific command, for example show more info regarding the 'ls' command<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>c:&#92;test&#92;dbxcli-windows-amd64.exe ls --help</code></div></div><br />
<br />
Output Long listing (filesize, revision,...)<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>c:&#92;test&#92;dbxcli-windows-amd64.exe -ls -1 /Apps/Testapp</code></div></div><br />
/Apps/Testapp =  the folder I want to list  (It is from the root, meaning 'Apps' resides in the root and dont forget the beginning forward slash)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">NOTE:</span><br />
It seems DBXCLI stores account/access info in:<br />
C:\Users\[USERNAME]\.config   ===&gt; ALSO NOTE THE DOT !!!<br />
Also you might need to use double quotes for paths with spaces, haven't tested this yet.]]></description>
			<content:encoded><![CDATA[You can use DBXCLI to interact with your dropbox account using command line.<br />
You can do the basic things: listing, copying,....etc...<br />
<br />
Download DBXLCI:<br />
<a href="https://github.com/dropbox/dbxcli" target="_blank" rel="noopener" class="mycode_url">https://github.com/dropbox/dbxcli</a><br />
In the above githubpage, see at the rightside 'Releases'-link, click on it and download the "dbxcli-windows-amd64.exe"<br />
<br />
German tutorial which explains the below steps + some other things.<br />
I couldn't find an english tutorial which explains it like the german tutorial.<br />
<a href="https://www.youtube.com/watch?v=p2r8xsyLyEY" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=p2r8xsyLyEY</a><br />
<br />
Below I explained how to setup and use DBXCLI, replace c:\test with your location where you saved dbxcli-windows-amd64.exe<br />
<br />
<span style="font-weight: bold;" class="mycode_b">STEP 1</span><br />
Download the correct exe and place it in an folder.<br />
Example:<br />
"dbxcli-windows-amd64.exe" downloaded in "c:\test"<br />
c:\test\dbxcli-windows-amd64.exe<br />
<br />
<span style="font-weight: bold;" class="mycode_b">STEP 2</span><br />
In cmd run:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>c:&#92;test&#92;dbxcli-windows-amd64.exe account</code></div></div><br />
A response prompt will appears explaining 3 short steps, follow these 3 short steps.<br />
In short:<br />
- First in browser login into your dropbox account, then copy url from the cmd response prompt, paste in browser.<br />
- Copy the response 'authorization code' from browser window into cmd window then press [ENTER]<br />
<br />
<span style="font-weight: bold;" class="mycode_b">STEP 3</span><br />
After you have pressed [ENTER] in step 2, you will see response  which should be 6 lines (Account Id, Account Type,....)<br />
If you see "Paired Account: false" then that's correct.<br />
You are done!<br />
Type the following command to test (list root items):<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>c:&#92;test&#92;dbxcli-windows-amd64.exe -ls</code></div></div><br />
Normally would add an path after -ls to show the contents of that path.<br />
But the path is excluded so it shows the contents from the root.<br />
See below for an example where you show the contents of an specific path.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">OTHER INFO</span><br />
<br />
To show basic help info (shows all available commands: ls, cp, du,....etc..)<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>c:&#92;test&#92;dbxcli-windows-amd64.exe</code></div></div><br />
<br />
To show help about an specific command, for example show more info regarding the 'ls' command<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>c:&#92;test&#92;dbxcli-windows-amd64.exe ls --help</code></div></div><br />
<br />
Output Long listing (filesize, revision,...)<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>c:&#92;test&#92;dbxcli-windows-amd64.exe -ls -1 /Apps/Testapp</code></div></div><br />
/Apps/Testapp =  the folder I want to list  (It is from the root, meaning 'Apps' resides in the root and dont forget the beginning forward slash)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">NOTE:</span><br />
It seems DBXCLI stores account/access info in:<br />
C:\Users\[USERNAME]\.config   ===&gt; ALSO NOTE THE DOT !!!<br />
Also you might need to use double quotes for paths with spaces, haven't tested this yet.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[quick howto: windows 10 sandbox]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=7149</link>
			<pubDate>Sun, 25 Jul 2021 11:11:47 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=715">r0n</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=7149</guid>
			<description><![CDATA[A virtual machine (sandbox) can be handy for different purposes when using QM: executing a script while using the host machine, or testing scripts, ....etc...<br />
<br />
This is a quick howto, on how to install the windows 10 sandbox and howto setup a configuration file for the windows 10 sandbox.<br />
The below example .wsb file (configuration file)  is an example file with 2 settings: folder mapping an logon script file.<br />
The empty white lines in the .wsb file is just to keep it readable, remove any empty lines within your configuration file.<br />
If you are already known with the windows 10 sandbox you can skip the installation part, making this short howt much shorter!<br />
<br />
<span style="font-family: Courier New,Courier,monospace;" class="mycode_font">The windows sandbox is simplified version of something like virtualbox, VMware,...etc..<br />
* Main downsides: not persistent, no snapshots, no multiple machines (only ONE), ...<br />
* Upsides: very easy to use, readily available (or very easy install-able)<br />
You can create a configuration file for the windows sandbox, this configuration file can contain settings for: vGPU, mapped folders, logon command,..etc...<br />
The configuration file is a .wsb file and once created, you can double click it and it will launch the windows sandbox with that configuration!<br />
<br />
As stated before, you can't make the windows 10 sandbox persistent (not in a 'easy' way, as far as I know).<br />
BUT:<br />
- you can MAP a folder(s) from your HOST (main machine) to the SANDBOX<br />
- AND you can execute a script at boot. Combine this with QM and...well you know...<br />
(and set some other settings! see below link)<br />
<br />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-weight: bold;" class="mycode_b">I: BEGIN WITH</span></span><br />
1) Read through: <a href="https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-sandbox/windows-sandbox-configure-using-wsb-file" target="_blank" rel="noopener" class="mycode_url">https://docs.microsoft.com/en-us/windows...g-wsb-file</a><br />
2) Install the windows sandbox, see below.<br />
3) Create a .wsb file and enter the example you see in the below image<br />
<br />
<br />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-weight: bold;" class="mycode_b">II: To install windows sandbox:</span></span><br />
1) Go to 'Control Panel &gt;&gt; Programs' , then select 'Turn Windows features on or off'<br />
2) Scroll down and select 'Windows Sandbox' , reboot when windows ask to reboot<br />
3) Start the windows sandbox, first time might take 5 to 20 minutes, first time start is always long.<br />
   (probably first time initializing, reserving hd space,...etc...)<br />
4) Once in sandbox, play around. To copy files onto desktop, either:<br />
   - right click on a file/folder on your HOST machine then select 'copy'<br />
     then the right click on desktop in SANDBOX and select 'paste'<br />
   - Or [CTRL]+[C] / [CTRL]+[V]<br />
   - Or drag from HOST to SANDBOX (doesn't work on my machine, don't know if this actually works but read somewhere that this should work)<br />
5) Close the sandbox and do what's described below (create config wsb file...)<br />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-weight: bold;" class="mycode_b">III: An example .wsb file (mapping and logon script)</span></span></span><br />
<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1239" target="_blank" title="">1.jpg</a> (Size: 420.76 KB / Downloads: 610)
<!-- end: postbit_attachments_attachment --><br />
<br />
<br />
<br />
 <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;Configuration&gt;<br />
    &lt;MappedFolders&gt;<br />
        &lt;MappedFolder&gt;<br />
            &lt;HostFolder&gt;E:&#92;__qm_testdirs&lt;/HostFolder&gt;<br />
            &lt;SandboxFolder&gt;C:&#92;sbx&lt;/SandboxFolder&gt;<br />
            &lt;ReadOnly&gt;false&lt;/ReadOnly&gt;<br />
        &lt;/MappedFolder&gt;<br />
    &lt;/MappedFolders&gt;        <br />
    &lt;LogonCommand&gt;<br />
        &lt;Command&gt;c:&#92;sbx&#92;test.exe&lt;/Command&gt;<br />
    &lt;/LogonCommand&gt;        <br />
&lt;/Configuration&gt;</code></div></div>]]></description>
			<content:encoded><![CDATA[A virtual machine (sandbox) can be handy for different purposes when using QM: executing a script while using the host machine, or testing scripts, ....etc...<br />
<br />
This is a quick howto, on how to install the windows 10 sandbox and howto setup a configuration file for the windows 10 sandbox.<br />
The below example .wsb file (configuration file)  is an example file with 2 settings: folder mapping an logon script file.<br />
The empty white lines in the .wsb file is just to keep it readable, remove any empty lines within your configuration file.<br />
If you are already known with the windows 10 sandbox you can skip the installation part, making this short howt much shorter!<br />
<br />
<span style="font-family: Courier New,Courier,monospace;" class="mycode_font">The windows sandbox is simplified version of something like virtualbox, VMware,...etc..<br />
* Main downsides: not persistent, no snapshots, no multiple machines (only ONE), ...<br />
* Upsides: very easy to use, readily available (or very easy install-able)<br />
You can create a configuration file for the windows sandbox, this configuration file can contain settings for: vGPU, mapped folders, logon command,..etc...<br />
The configuration file is a .wsb file and once created, you can double click it and it will launch the windows sandbox with that configuration!<br />
<br />
As stated before, you can't make the windows 10 sandbox persistent (not in a 'easy' way, as far as I know).<br />
BUT:<br />
- you can MAP a folder(s) from your HOST (main machine) to the SANDBOX<br />
- AND you can execute a script at boot. Combine this with QM and...well you know...<br />
(and set some other settings! see below link)<br />
<br />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-weight: bold;" class="mycode_b">I: BEGIN WITH</span></span><br />
1) Read through: <a href="https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-sandbox/windows-sandbox-configure-using-wsb-file" target="_blank" rel="noopener" class="mycode_url">https://docs.microsoft.com/en-us/windows...g-wsb-file</a><br />
2) Install the windows sandbox, see below.<br />
3) Create a .wsb file and enter the example you see in the below image<br />
<br />
<br />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-weight: bold;" class="mycode_b">II: To install windows sandbox:</span></span><br />
1) Go to 'Control Panel &gt;&gt; Programs' , then select 'Turn Windows features on or off'<br />
2) Scroll down and select 'Windows Sandbox' , reboot when windows ask to reboot<br />
3) Start the windows sandbox, first time might take 5 to 20 minutes, first time start is always long.<br />
   (probably first time initializing, reserving hd space,...etc...)<br />
4) Once in sandbox, play around. To copy files onto desktop, either:<br />
   - right click on a file/folder on your HOST machine then select 'copy'<br />
     then the right click on desktop in SANDBOX and select 'paste'<br />
   - Or [CTRL]+[C] / [CTRL]+[V]<br />
   - Or drag from HOST to SANDBOX (doesn't work on my machine, don't know if this actually works but read somewhere that this should work)<br />
5) Close the sandbox and do what's described below (create config wsb file...)<br />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-weight: bold;" class="mycode_b">III: An example .wsb file (mapping and logon script)</span></span></span><br />
<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1239" target="_blank" title="">1.jpg</a> (Size: 420.76 KB / Downloads: 610)
<!-- end: postbit_attachments_attachment --><br />
<br />
<br />
<br />
 <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;Configuration&gt;<br />
    &lt;MappedFolders&gt;<br />
        &lt;MappedFolder&gt;<br />
            &lt;HostFolder&gt;E:&#92;__qm_testdirs&lt;/HostFolder&gt;<br />
            &lt;SandboxFolder&gt;C:&#92;sbx&lt;/SandboxFolder&gt;<br />
            &lt;ReadOnly&gt;false&lt;/ReadOnly&gt;<br />
        &lt;/MappedFolder&gt;<br />
    &lt;/MappedFolders&gt;        <br />
    &lt;LogonCommand&gt;<br />
        &lt;Command&gt;c:&#92;sbx&#92;test.exe&lt;/Command&gt;<br />
    &lt;/LogonCommand&gt;        <br />
&lt;/Configuration&gt;</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[KeePass and Quick Macros video tutorials]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=6626</link>
			<pubDate>Fri, 07 Dec 2018 13:38:32 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=715">r0n</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=6626</guid>
			<description><![CDATA[KeePass is a password manager and has some unique command line possibilities.<br />
Those command line possibilities in combination with the {PASSWORD_ENC} option makes keepass even more safe.<br />
You can fetch data from a keepass entries (records) like password, notes, etc...<br />
And you can edit data from a keepass entries.<br />
You do not have to use the plain keepass .KDBX (keepass database) password, you can generate an ENCRYPTED password in keepass which is tied to your computer.<br />
<br />
This encrypted password is much safer. Even when an attacker get's access to your .KDBX and encrypted password the attacker can not access the .KDBX on his machine. (unless the attacker is physically there at your machine OR can remote control your machine OR when the attacker manages to clone your machine HARDWARE and OS wise.)<br />
<br />
Read here about keepass command line and about the encrypted password in keepass.<br />
<br />
*  Keepass command line help:<br />
<a href="https://keepass.info/help/base/cmdline.html" target="_blank" rel="noopener" class="mycode_url">https://keepass.info/help/base/cmdline.html</a><br />
 <br />
* Keepass command line KPScript help:<br />
<a href="https://keepass.info/help/v2_dev/scr_sc_index.html" target="_blank" rel="noopener" class="mycode_url">https://keepass.info/help/v2_dev/scr_sc_index.html</a> <br />
<br />
* Keepass encrypted password info:<br />
This is the forum topic (scroll to the bottom there are a 4 links given by the author of keepass, I put those links below)<br />
<a href="https://sourceforge.net/p/keepass/discussion/329221/thread/cdca7666b9/" target="_blank" rel="noopener" class="mycode_url">https://sourceforge.net/p/keepass/discus...dca7666b9/</a><br />
   - <a href="https://msdn.microsoft.com/en-us/library/ms995355.aspx" target="_blank" rel="noopener" class="mycode_url">https://msdn.microsoft.com/en-us/library/ms995355.aspx</a><br />
   - <a href="https://support.microsoft.com/en-us/kb/309408" target="_blank" rel="noopener" class="mycode_url">https://support.microsoft.com/en-us/kb/309408</a><br />
   - <a href="https://technet.microsoft.com/en-us/library/ee681624.aspx" target="_blank" rel="noopener" class="mycode_url">https://technet.microsoft.com/en-us/libr...81624.aspx</a><br />
   - <a href="https://sourceforge.net/p/keepass/wiki/Recover%20Windows%20User%20Account%20Credentials/" target="_blank" rel="noopener" class="mycode_url">https://sourceforge.net/p/keepass/wiki/R...edentials/</a><br />
<br />
Because of this I created 2 video tutorials:<br />
<br />
1. KeePass command line tutorial<br />
<a href="https://www.youtube.com/watch?v=BEanSOlYqSU" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=BEanSOlYqSU</a><br />
<br />
2. Quick Macros and keepass tutorial<br />
<a href="https://www.youtube.com/watch?v=86tmMXN-Yeo" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=86tmMXN-Yeo</a><br />
<br />
Tutorial 1 explains the keepass (and KPScript.exe plugin) command line.<br />
Tutorial 2 explains how to use tutorial 1 in Quick Macros<br />
<br />
There are timestamps below in the video description of the corresponding youtube page.<br />
<br />
Once you understand tutorial 2 you can more quickly interact with keepass and even create your own front-end with special functionality. For example you could even go so far as to create your own version of LASTPASS. (I do not explain how to do this).<br />
But I added a .qml in tutorial 2 (see in youtube description) which contains a simple ICsv function which gives you the possibility to fetch the whole .KDBX database into an ICsv. From there on your own imagination is the limit.<br />
<br />
Do not use the plain .KDBX, use the ENCRYPTED password.<br />
<br />
I purposely created 2 tutorials in stead of one. The usage of encrypted passwords in keepass was so important to know for every one that I decided in that in tutorial 1 I explain info about keepass-command-line and encrypted password <span style="font-style: italic;" class="mycode_i">without</span> quick macros. And tutorial 2 about keepass and quick macros. In that way users who do not have QM or do not want to use QM can still see an explanation about this in tutorial 1 and use it in their own BATCH (or other) scripting environment.<br />
<br />
I hope it is of use to you.<br />
<br />
(videos are text annotated not voiced, so press [SPACE] to pause to give yourself time to read the text!)]]></description>
			<content:encoded><![CDATA[KeePass is a password manager and has some unique command line possibilities.<br />
Those command line possibilities in combination with the {PASSWORD_ENC} option makes keepass even more safe.<br />
You can fetch data from a keepass entries (records) like password, notes, etc...<br />
And you can edit data from a keepass entries.<br />
You do not have to use the plain keepass .KDBX (keepass database) password, you can generate an ENCRYPTED password in keepass which is tied to your computer.<br />
<br />
This encrypted password is much safer. Even when an attacker get's access to your .KDBX and encrypted password the attacker can not access the .KDBX on his machine. (unless the attacker is physically there at your machine OR can remote control your machine OR when the attacker manages to clone your machine HARDWARE and OS wise.)<br />
<br />
Read here about keepass command line and about the encrypted password in keepass.<br />
<br />
*  Keepass command line help:<br />
<a href="https://keepass.info/help/base/cmdline.html" target="_blank" rel="noopener" class="mycode_url">https://keepass.info/help/base/cmdline.html</a><br />
 <br />
* Keepass command line KPScript help:<br />
<a href="https://keepass.info/help/v2_dev/scr_sc_index.html" target="_blank" rel="noopener" class="mycode_url">https://keepass.info/help/v2_dev/scr_sc_index.html</a> <br />
<br />
* Keepass encrypted password info:<br />
This is the forum topic (scroll to the bottom there are a 4 links given by the author of keepass, I put those links below)<br />
<a href="https://sourceforge.net/p/keepass/discussion/329221/thread/cdca7666b9/" target="_blank" rel="noopener" class="mycode_url">https://sourceforge.net/p/keepass/discus...dca7666b9/</a><br />
   - <a href="https://msdn.microsoft.com/en-us/library/ms995355.aspx" target="_blank" rel="noopener" class="mycode_url">https://msdn.microsoft.com/en-us/library/ms995355.aspx</a><br />
   - <a href="https://support.microsoft.com/en-us/kb/309408" target="_blank" rel="noopener" class="mycode_url">https://support.microsoft.com/en-us/kb/309408</a><br />
   - <a href="https://technet.microsoft.com/en-us/library/ee681624.aspx" target="_blank" rel="noopener" class="mycode_url">https://technet.microsoft.com/en-us/libr...81624.aspx</a><br />
   - <a href="https://sourceforge.net/p/keepass/wiki/Recover%20Windows%20User%20Account%20Credentials/" target="_blank" rel="noopener" class="mycode_url">https://sourceforge.net/p/keepass/wiki/R...edentials/</a><br />
<br />
Because of this I created 2 video tutorials:<br />
<br />
1. KeePass command line tutorial<br />
<a href="https://www.youtube.com/watch?v=BEanSOlYqSU" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=BEanSOlYqSU</a><br />
<br />
2. Quick Macros and keepass tutorial<br />
<a href="https://www.youtube.com/watch?v=86tmMXN-Yeo" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=86tmMXN-Yeo</a><br />
<br />
Tutorial 1 explains the keepass (and KPScript.exe plugin) command line.<br />
Tutorial 2 explains how to use tutorial 1 in Quick Macros<br />
<br />
There are timestamps below in the video description of the corresponding youtube page.<br />
<br />
Once you understand tutorial 2 you can more quickly interact with keepass and even create your own front-end with special functionality. For example you could even go so far as to create your own version of LASTPASS. (I do not explain how to do this).<br />
But I added a .qml in tutorial 2 (see in youtube description) which contains a simple ICsv function which gives you the possibility to fetch the whole .KDBX database into an ICsv. From there on your own imagination is the limit.<br />
<br />
Do not use the plain .KDBX, use the ENCRYPTED password.<br />
<br />
I purposely created 2 tutorials in stead of one. The usage of encrypted passwords in keepass was so important to know for every one that I decided in that in tutorial 1 I explain info about keepass-command-line and encrypted password <span style="font-style: italic;" class="mycode_i">without</span> quick macros. And tutorial 2 about keepass and quick macros. In that way users who do not have QM or do not want to use QM can still see an explanation about this in tutorial 1 and use it in their own BATCH (or other) scripting environment.<br />
<br />
I hope it is of use to you.<br />
<br />
(videos are text annotated not voiced, so press [SPACE] to pause to give yourself time to read the text!)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[QM and Cheat Engine]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=6576</link>
			<pubDate>Tue, 25 Sep 2018 20:03:28 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=1325">Shuwe</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=6576</guid>
			<description><![CDATA[Hey there. I have one question. <br />
<br />
I found base adress and offsets to make script that i need. Now I want to change that values with quick macros. Is it possible?]]></description>
			<content:encoded><![CDATA[Hey there. I have one question. <br />
<br />
I found base adress and offsets to make script that i need. Now I want to change that values with quick macros. Is it possible?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Capture Qm Window]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=6517</link>
			<pubDate>Tue, 31 Jul 2018 23:16:39 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=165">Kevin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=6517</guid>
			<description><![CDATA[Hi everyone thought i would share a little function i use a lot for creating instant screenshots of the Quick Macros window <br />
<br />
<span style="font-weight: bold;" class="mycode_b">requires</span> GDI+ get it here--&gt;&gt; <a href="http://www.quickmacros.com/forum/showthread.php?tid=3703" target="_blank" rel="noopener" class="mycode_url">Get GDI+</a><br />
<br />
Trigger: Ctrl+Prnt Scrn<br />
<br />
Function <span style="font-weight: bold;" class="mycode_b">CaptureQmWindow</span> <span/><br />
Trigger <span style="font-weight: bold;" class="mycode_b">C(44)</span> &nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:alert("Paste the bold text in the Trigger edit field on the toolbar in Quick Macros.");'><img src="images/qm/help.png" alt="Help - how to add the trigger to the macro" title="Help - how to add the trigger to the macro"/></a><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code><span class='c'>;Captures QM Window and saves as a png(or see below) using GDI+</span><br />
<span class='c'>;Supported formats: bmp, gif, jpg, png, tiff.(png recommended)</span><br />
<span class='c'>;creates a unique file name to avoid saving problems</span><br />
<span class='c'>;REMARKS</span><br />
<span class='c'>;requires GDI+ download it here &lt;link "http://www.quickmacros.com/forum/showthread.php?tid=3703"&gt;Get GDI+&lt;/link&gt;</span><br />
<br />
<span class='fq'>if</span><span class='p'>(</span><span class='fq'>getopt</span><span class='p'>(</span>nthreads<span class='p'>)</span><span class='o'>&gt;</span><span class='n'>1</span><span class='p'>)</span> <span class='fq'>ret</span><br />
<span class='fq'>spe</span> <span class='o'>-</span><span class='n'>2</span><br />
<span class='c'>;create file data</span><br />
<span class='fq'>mkdir</span> <span class='s'>"QM_WindowImages"</span> <span class='s'>"&#36;desktop&#36;"</span><span class='c2'>;;create folder if it doesnt exist to save images in</span><br />
<span class='t'>str</span> sFolderName <span class='o'>=</span> <span class='s'>"&#36;desktop&#36;&#92;QM_WindowImages&#92;"</span><br />
<span class='t'>str</span> sFileName.<span class='fq'>timeformat</span><span class='p'>(</span><span class='s'>"{yyyy-MM-dd}_{HH-mm-ss}_QmWindow"</span><span class='p'>)</span><span class='c2'>;;unique filename to avoid problems</span><br />
<span class='t'>str</span> sFormat <span class='o'>=</span> <span class='s'>".png"</span><span class='c2'>;;i use png for smaller filesize</span><br />
<span class='t'>str</span> sFile.<span class='fq'>format</span><span class='p'>(</span><span class='s'>"%s%s%s"</span> sFolderName sFileName sFormat<span class='p'>)</span><br />
<br />
<span class='c'>;captures QM Window to memory</span><br />
<span class='t'>__GdiHandle</span> hb<br />
<span class='t'>RECT</span> r<span class='p'>;</span> <span class='fd'>DpiGetWindowRect</span> _hwndqm <span class='o'>&amp;</span>r<br />
<span class='fu'>CaptureImageOnScreen</span> r.left r.top r.right<span class='o'>-</span>r.left r.bottom<span class='o'>-</span>r.top <span class='s'>""</span> hb<br />
<br />
<span class='c'>;save image</span><br />
<span class='dir'>#compile</span> <span class='s'>"__Gdip"</span><br />
<span class='t'>GdipBitmap</span> im<br />
<span class='fq'>if</span><span class='p'>(</span><span class='o'>!</span>im.<span class='fu'>FromHBITMAP</span><span class='p'>(</span>hb<span class='p'>))</span> <span class='fq'>end</span> <span class='s'>"error"</span><br />
<span class='fq'>if</span><span class='p'>(</span><span class='o'>!</span>im.<span class='fu'>Save</span><span class='p'>(</span>sFile<span class='p'>))</span> <span class='fq'>end</span> <span class='s'>"error"</span><br />
<span class='c'>;open folder where image is saved</span><br />
<span class='fq'>run</span> sFolderName<br />
<span class='c'>;optional open file</span><br />
<span class='c'>;run sFile;;uncomment this line to use</span></code></div></div><span style="font-weight: bold;" class="mycode_b">requires</span> GDI+ get it here--&gt;&gt; <a href="http://www.quickmacros.com/forum/showthread.php?tid=3703" target="_blank" rel="noopener" class="mycode_url">Get GDI+</a>]]></description>
			<content:encoded><![CDATA[Hi everyone thought i would share a little function i use a lot for creating instant screenshots of the Quick Macros window <br />
<br />
<span style="font-weight: bold;" class="mycode_b">requires</span> GDI+ get it here--&gt;&gt; <a href="http://www.quickmacros.com/forum/showthread.php?tid=3703" target="_blank" rel="noopener" class="mycode_url">Get GDI+</a><br />
<br />
Trigger: Ctrl+Prnt Scrn<br />
<br />
Function <span style="font-weight: bold;" class="mycode_b">CaptureQmWindow</span> <span/><br />
Trigger <span style="font-weight: bold;" class="mycode_b">C(44)</span> &nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:alert("Paste the bold text in the Trigger edit field on the toolbar in Quick Macros.");'><img src="images/qm/help.png" alt="Help - how to add the trigger to the macro" title="Help - how to add the trigger to the macro"/></a><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code><span class='c'>;Captures QM Window and saves as a png(or see below) using GDI+</span><br />
<span class='c'>;Supported formats: bmp, gif, jpg, png, tiff.(png recommended)</span><br />
<span class='c'>;creates a unique file name to avoid saving problems</span><br />
<span class='c'>;REMARKS</span><br />
<span class='c'>;requires GDI+ download it here &lt;link "http://www.quickmacros.com/forum/showthread.php?tid=3703"&gt;Get GDI+&lt;/link&gt;</span><br />
<br />
<span class='fq'>if</span><span class='p'>(</span><span class='fq'>getopt</span><span class='p'>(</span>nthreads<span class='p'>)</span><span class='o'>&gt;</span><span class='n'>1</span><span class='p'>)</span> <span class='fq'>ret</span><br />
<span class='fq'>spe</span> <span class='o'>-</span><span class='n'>2</span><br />
<span class='c'>;create file data</span><br />
<span class='fq'>mkdir</span> <span class='s'>"QM_WindowImages"</span> <span class='s'>"&#36;desktop&#36;"</span><span class='c2'>;;create folder if it doesnt exist to save images in</span><br />
<span class='t'>str</span> sFolderName <span class='o'>=</span> <span class='s'>"&#36;desktop&#36;&#92;QM_WindowImages&#92;"</span><br />
<span class='t'>str</span> sFileName.<span class='fq'>timeformat</span><span class='p'>(</span><span class='s'>"{yyyy-MM-dd}_{HH-mm-ss}_QmWindow"</span><span class='p'>)</span><span class='c2'>;;unique filename to avoid problems</span><br />
<span class='t'>str</span> sFormat <span class='o'>=</span> <span class='s'>".png"</span><span class='c2'>;;i use png for smaller filesize</span><br />
<span class='t'>str</span> sFile.<span class='fq'>format</span><span class='p'>(</span><span class='s'>"%s%s%s"</span> sFolderName sFileName sFormat<span class='p'>)</span><br />
<br />
<span class='c'>;captures QM Window to memory</span><br />
<span class='t'>__GdiHandle</span> hb<br />
<span class='t'>RECT</span> r<span class='p'>;</span> <span class='fd'>DpiGetWindowRect</span> _hwndqm <span class='o'>&amp;</span>r<br />
<span class='fu'>CaptureImageOnScreen</span> r.left r.top r.right<span class='o'>-</span>r.left r.bottom<span class='o'>-</span>r.top <span class='s'>""</span> hb<br />
<br />
<span class='c'>;save image</span><br />
<span class='dir'>#compile</span> <span class='s'>"__Gdip"</span><br />
<span class='t'>GdipBitmap</span> im<br />
<span class='fq'>if</span><span class='p'>(</span><span class='o'>!</span>im.<span class='fu'>FromHBITMAP</span><span class='p'>(</span>hb<span class='p'>))</span> <span class='fq'>end</span> <span class='s'>"error"</span><br />
<span class='fq'>if</span><span class='p'>(</span><span class='o'>!</span>im.<span class='fu'>Save</span><span class='p'>(</span>sFile<span class='p'>))</span> <span class='fq'>end</span> <span class='s'>"error"</span><br />
<span class='c'>;open folder where image is saved</span><br />
<span class='fq'>run</span> sFolderName<br />
<span class='c'>;optional open file</span><br />
<span class='c'>;run sFile;;uncomment this line to use</span></code></div></div><span style="font-weight: bold;" class="mycode_b">requires</span> GDI+ get it here--&gt;&gt; <a href="http://www.quickmacros.com/forum/showthread.php?tid=3703" target="_blank" rel="noopener" class="mycode_url">Get GDI+</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[timer with a condition]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=6469</link>
			<pubDate>Mon, 25 Jun 2018 13:17:31 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=1307">Ashrock</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=6469</guid>
			<description><![CDATA[Hi, I need help. I want to run a macro with a timer and a condition a condition that after x minutes it will stop and open a function/macro then after the function/macro runs it will return to the first macro. vice versa<br />
<br />
-main macro<br />
int t1 = GetTickCount<br />
int t2 = 28*60<br />
rep<br />
,<br />
,if(GetTickCount-t1&gt;=t2) ret<br />
,key z<br />
,key 7<br />
,key 2<br />
,key 3<br />
,key 9<br />
,wait 0.5<br />
,key z<br />
,key 5<br />
,key 4<br />
,key 7<br />
,key 8<br />
,wait 0.5<br />
,key 3<br />
,key 6<br />
,key 4<br />
,key z<br />
,key 2<br />
,wait 0.5<br />
,key 9<br />
,key z<br />
,key 4<br />
,key 7<br />
,key 5<br />
,key 0<br />
,if(GetTickCount-t1==t2)break<br />
,wait 0 H mac("Function1")<br />
<br />
<br />
-Function/macro<br />
<br />
'"o"            ;; "o"<br />
    wait 1.0<br />
lef 685 344 w1 1 ;; ''<br />
    wait 1.0<br />
dou 673 319 w1 1 ;; ''<br />
    wait 2.0<br />
    lef 684 416 w1 1 ;; ''<br />
    wait 10.0<br />
'"o"            ;; "o"<br />
    wait 3.0<br />
lef 672 343 w1 1 ;; ''<br />
mou 672 343 w1 1<br />
MouseWheel -9<br />
    wait 1.0<br />
MouseWheel -9<br />
    wait 1.5<br />
dou 674 444 w1 1 ;; ''<br />
    wait 2.5<br />
lef 674 419 w1 1 ;; ''<br />
    wait 6.0<br />
mou 617 399 w1 1<br />
MouseWheel -1<br />
mou 618 399 w1 1<br />
MouseWheel -1<br />
mou 618 400 w1 1<br />
MouseWheel -26<br />
'"m"            ;; "m"<br />
    wait 3.0<br />
lef 589 329 w1 1 ;; ''<br />
    wait 1.0<br />
    dou 575 588 w1 1 ;; ''<br />
lef+ 576 588 w1 1 ;; ''<br />
mou ":A@"<br />
lef- 577 588 w1 1<br />
lef+ 580 587 w1 1 ;; ''<br />
mou ":A@B@"<br />
    wait 1.0<br />
lef- 583 587 w1 1<br />
lef+ 590 586 w1 1 ;; ''<br />
mou ":A@B@A@A@A@A@A@A@"<br />
lef- 599 586 w1 1<br />
lef+ 604 586 w1 1 ;; ''<br />
mou ":A@BAA@A@A@B@"<br />
lef- 612 587 w1 1<br />
lef+ 644 587 w1 1 ;; '<br />
dou 644 588 w1 1<br />
mou ":A@B@A@"<br />
lef- 648 588 w1 1<br />
    wait 1.0<br />
dou 660 588 w1 1 ;; ''<br />
mou ":a@b@b@b@a@b@"<br />
lef- 650 588 w1 1<br />
lef+ 650 588 w1 1 ;; ''<br />
mou ":a@"<br />
lef- 649 588 w1 1<br />
lef+ 646 588 w1 1 ;; ''<br />
mou "<img src="https://www.libreautomate.com/forum/images/smilies/angry.png" alt="Angry" title="Angry" class="smilie smilie_11" />aBaBa"<br />
lef- 650 585 w1 1<br />
lef 654 583 w1 1 ;; ''<br />
dou 575 588 w1 1 ;; ''<br />
lef+ 576 588 w1 1 ;; ''<br />
mou ":A@"<br />
lef- 577 588 w1 1<br />
lef+ 580 587 w1 1 ;; ''<br />
mou ":A@B@"<br />
lef- 583 587 w1 1<br />
lef+ 590 586 w1 1 ;; ''<br />
mou ":A@B@A@A@A@A@A@A@"<br />
lef- 599 586 w1 1<br />
    wait 1.0<br />
lef+ 604 586 w1 1 ;; ''<br />
mou ":A@BAA@A@A@B@"<br />
lef- 612 587 w1 1<br />
lef+ 644 587 w1 1 ;; '<br />
dou 644 588 w1 1<br />
mou ":A@B@A@"<br />
    key 1<br />
lef- 648 588 w1 1<br />
dou 660 588 w1 1 ;; ''<br />
mou ":a@b@b@b@a@b@"<br />
lef- 650 588 w1 1<br />
lef+ 650 588 w1 1 ;; ''<br />
mou ":a@"<br />
lef- 649 588 w1 1<br />
    wait 1.0<br />
lef+ 646 588 w1 1 ;; ''<br />
mou "<img src="https://www.libreautomate.com/forum/images/smilies/angry.png" alt="Angry" title="Angry" class="smilie smilie_11" />aBaBa"<br />
lef- 650 585 w1 1<br />
lef 654 583 w1 1 ;; ''<br />
    wait 0.8<br />
    key 1<br />
    wait 0.8<br />
    key 1<br />
    wait 0.8<br />
    key 1<br />
    wait 0 H mac("Macro1")<br />
#endregion]]></description>
			<content:encoded><![CDATA[Hi, I need help. I want to run a macro with a timer and a condition a condition that after x minutes it will stop and open a function/macro then after the function/macro runs it will return to the first macro. vice versa<br />
<br />
-main macro<br />
int t1 = GetTickCount<br />
int t2 = 28*60<br />
rep<br />
,<br />
,if(GetTickCount-t1&gt;=t2) ret<br />
,key z<br />
,key 7<br />
,key 2<br />
,key 3<br />
,key 9<br />
,wait 0.5<br />
,key z<br />
,key 5<br />
,key 4<br />
,key 7<br />
,key 8<br />
,wait 0.5<br />
,key 3<br />
,key 6<br />
,key 4<br />
,key z<br />
,key 2<br />
,wait 0.5<br />
,key 9<br />
,key z<br />
,key 4<br />
,key 7<br />
,key 5<br />
,key 0<br />
,if(GetTickCount-t1==t2)break<br />
,wait 0 H mac("Function1")<br />
<br />
<br />
-Function/macro<br />
<br />
'"o"            ;; "o"<br />
    wait 1.0<br />
lef 685 344 w1 1 ;; ''<br />
    wait 1.0<br />
dou 673 319 w1 1 ;; ''<br />
    wait 2.0<br />
    lef 684 416 w1 1 ;; ''<br />
    wait 10.0<br />
'"o"            ;; "o"<br />
    wait 3.0<br />
lef 672 343 w1 1 ;; ''<br />
mou 672 343 w1 1<br />
MouseWheel -9<br />
    wait 1.0<br />
MouseWheel -9<br />
    wait 1.5<br />
dou 674 444 w1 1 ;; ''<br />
    wait 2.5<br />
lef 674 419 w1 1 ;; ''<br />
    wait 6.0<br />
mou 617 399 w1 1<br />
MouseWheel -1<br />
mou 618 399 w1 1<br />
MouseWheel -1<br />
mou 618 400 w1 1<br />
MouseWheel -26<br />
'"m"            ;; "m"<br />
    wait 3.0<br />
lef 589 329 w1 1 ;; ''<br />
    wait 1.0<br />
    dou 575 588 w1 1 ;; ''<br />
lef+ 576 588 w1 1 ;; ''<br />
mou ":A@"<br />
lef- 577 588 w1 1<br />
lef+ 580 587 w1 1 ;; ''<br />
mou ":A@B@"<br />
    wait 1.0<br />
lef- 583 587 w1 1<br />
lef+ 590 586 w1 1 ;; ''<br />
mou ":A@B@A@A@A@A@A@A@"<br />
lef- 599 586 w1 1<br />
lef+ 604 586 w1 1 ;; ''<br />
mou ":A@BAA@A@A@B@"<br />
lef- 612 587 w1 1<br />
lef+ 644 587 w1 1 ;; '<br />
dou 644 588 w1 1<br />
mou ":A@B@A@"<br />
lef- 648 588 w1 1<br />
    wait 1.0<br />
dou 660 588 w1 1 ;; ''<br />
mou ":a@b@b@b@a@b@"<br />
lef- 650 588 w1 1<br />
lef+ 650 588 w1 1 ;; ''<br />
mou ":a@"<br />
lef- 649 588 w1 1<br />
lef+ 646 588 w1 1 ;; ''<br />
mou "<img src="https://www.libreautomate.com/forum/images/smilies/angry.png" alt="Angry" title="Angry" class="smilie smilie_11" />aBaBa"<br />
lef- 650 585 w1 1<br />
lef 654 583 w1 1 ;; ''<br />
dou 575 588 w1 1 ;; ''<br />
lef+ 576 588 w1 1 ;; ''<br />
mou ":A@"<br />
lef- 577 588 w1 1<br />
lef+ 580 587 w1 1 ;; ''<br />
mou ":A@B@"<br />
lef- 583 587 w1 1<br />
lef+ 590 586 w1 1 ;; ''<br />
mou ":A@B@A@A@A@A@A@A@"<br />
lef- 599 586 w1 1<br />
    wait 1.0<br />
lef+ 604 586 w1 1 ;; ''<br />
mou ":A@BAA@A@A@B@"<br />
lef- 612 587 w1 1<br />
lef+ 644 587 w1 1 ;; '<br />
dou 644 588 w1 1<br />
mou ":A@B@A@"<br />
    key 1<br />
lef- 648 588 w1 1<br />
dou 660 588 w1 1 ;; ''<br />
mou ":a@b@b@b@a@b@"<br />
lef- 650 588 w1 1<br />
lef+ 650 588 w1 1 ;; ''<br />
mou ":a@"<br />
lef- 649 588 w1 1<br />
    wait 1.0<br />
lef+ 646 588 w1 1 ;; ''<br />
mou "<img src="https://www.libreautomate.com/forum/images/smilies/angry.png" alt="Angry" title="Angry" class="smilie smilie_11" />aBaBa"<br />
lef- 650 585 w1 1<br />
lef 654 583 w1 1 ;; ''<br />
    wait 0.8<br />
    key 1<br />
    wait 0.8<br />
    key 1<br />
    wait 0.8<br />
    key 1<br />
    wait 0 H mac("Macro1")<br />
#endregion]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[App Paths Registry Run Command]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=6443</link>
			<pubDate>Sun, 20 May 2018 18:08:14 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=368">TheVig</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=6443</guid>
			<description><![CDATA[I love run command (⊞ Win+R) to launch programs.  Most of the time programs will automatically put an entry into the registry when installing (i.e. qm, chrome, firefox, etc) while other programs do not.<br />
<br />
So I wrote this little function to use a tab separated multiline string containing the alias I'd like to use to launch a program from the run command and the path to the exe.  Pretty simple stuff here:<br />
<br />
Function <span style="font-weight: bold;" class="mycode_b">AppPaths</span> <span/><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code><span class='fq'>out</span><br />
<span class='t'>str</span> Data<span class='o'>=</span><br />
<span class='s'>;FL&nbsp;&nbsp;&nbsp;&nbsp;"&#36;program files&#36;&#92;Image-Line&#92;FL Studio 12&#92;FL (scaled).exe"</span><br />
<span class='s'>;Arduino&nbsp;&nbsp;&nbsp;&nbsp;"C:&#92;arduino-1.8.5&#92;arduino.exe"</span><br />
<span class='s'>;iview&nbsp;&nbsp;&nbsp;&nbsp;"&#36;program files&#36;&#92;IrfanView&#92;i_view32.exe"</span><br />
<span class='s'>;audacity&nbsp;&nbsp;&nbsp;&nbsp;"C:&#92;Audacity&#92;audacity.exe"</span><br />
<span class='s'>;audition&nbsp;&nbsp;&nbsp;&nbsp;"&#36;program files&#36;&#92;Adobe&#92;Audition 1.5&#92;Audition.exe"</span><br />
<span class='s'>;mp3&nbsp;&nbsp;&nbsp;&nbsp;"&#36;common music&#36;&#92;Sample Music&#92;Kalimba.mp3"</span><br />
<br />
<span class='t'>str</span> RegFile<span class='o'>=</span><span class='s'>"C:&#92;AppPaths.reg"</span><br />
<span class='t'>str</span> RegData<span class='o'>=</span><span class='s'>"Windows Registry Editor Version 5.00[][]"</span><br />
<br />
<span class='t'>ICsv</span> v.<span class='fq'>_create</span><br />
v.<span class='fd'>Separator</span><span class='o'>=</span><span class='s'>"[9]"</span><br />
<br />
v.<span class='fd'>FromString</span><span class='p'>(</span>Data<span class='p'>)</span><br />
<br />
<span class='t'>str</span> Alias Path RegEntry<br />
<br />
<span class='fq'>for</span> <span class='t'>int</span><span class='p'>'</span>r <span class='n'>0</span> v.<span class='fd'>RowCount</span><br />
<span class='i'>,</span>Alias<span class='o'>=</span>v.<span class='fd'>Cell</span><span class='p'>(</span>r <span class='n'>0</span><span class='p'>)</span><br />
<span class='i'>,</span>Path<span class='o'>=</span>v.<span class='fd'>Cell</span><span class='p'>(</span>r <span class='n'>1</span><span class='p'>)</span><br />
<span class='i'>,</span>Path.<span class='fq'>expandpath</span><br />
<span class='i'>,</span>Path.<span class='fq'>findreplace</span><span class='p'>(</span><span class='s'>"&#92;"</span> <span class='s'>"&#92;&#92;"</span><span class='p'>)</span><br />
<span class='i'>,</span>RegEntry<span class='o'>=</span><br />
<span class='i'>,</span><span class='o'>F</span><br />
<span class='i'>,</span><span class='s'>;[HKEY_LOCAL_MACHINE&#92;SOFTWARE&#92;Microsoft&#92;Windows&#92;CurrentVersion&#92;App Paths&#92;{</span>Alias<span class='s'>}.exe]</span><br />
<span class='i'>,</span><span class='s'>;@="{</span>Path<span class='s'>}"</span><br />
<span class='i'>,</span><span class='s'>;</span><br />
<span class='i'>,</span>RegData.<span class='fq'>addline</span><span class='p'>(</span>RegEntry<span class='p'>)</span><br />
<span class='i'>,</span><br />
<span class='fq'>out</span> RegData<br />
RegData.<span class='fq'>setfile</span><span class='p'>(</span>RegFile<span class='p'>)</span><br />
<span class='c'>;ret</span><br />
<span class='fq'>run</span> <span class='s'>"regedit.exe"</span> <span class='o'>F</span><span class='s'>"/s ''{</span>RegFile<span class='s'>}''"</span></code></div></div>]]></description>
			<content:encoded><![CDATA[I love run command (⊞ Win+R) to launch programs.  Most of the time programs will automatically put an entry into the registry when installing (i.e. qm, chrome, firefox, etc) while other programs do not.<br />
<br />
So I wrote this little function to use a tab separated multiline string containing the alias I'd like to use to launch a program from the run command and the path to the exe.  Pretty simple stuff here:<br />
<br />
Function <span style="font-weight: bold;" class="mycode_b">AppPaths</span> <span/><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code><span class='fq'>out</span><br />
<span class='t'>str</span> Data<span class='o'>=</span><br />
<span class='s'>;FL&nbsp;&nbsp;&nbsp;&nbsp;"&#36;program files&#36;&#92;Image-Line&#92;FL Studio 12&#92;FL (scaled).exe"</span><br />
<span class='s'>;Arduino&nbsp;&nbsp;&nbsp;&nbsp;"C:&#92;arduino-1.8.5&#92;arduino.exe"</span><br />
<span class='s'>;iview&nbsp;&nbsp;&nbsp;&nbsp;"&#36;program files&#36;&#92;IrfanView&#92;i_view32.exe"</span><br />
<span class='s'>;audacity&nbsp;&nbsp;&nbsp;&nbsp;"C:&#92;Audacity&#92;audacity.exe"</span><br />
<span class='s'>;audition&nbsp;&nbsp;&nbsp;&nbsp;"&#36;program files&#36;&#92;Adobe&#92;Audition 1.5&#92;Audition.exe"</span><br />
<span class='s'>;mp3&nbsp;&nbsp;&nbsp;&nbsp;"&#36;common music&#36;&#92;Sample Music&#92;Kalimba.mp3"</span><br />
<br />
<span class='t'>str</span> RegFile<span class='o'>=</span><span class='s'>"C:&#92;AppPaths.reg"</span><br />
<span class='t'>str</span> RegData<span class='o'>=</span><span class='s'>"Windows Registry Editor Version 5.00[][]"</span><br />
<br />
<span class='t'>ICsv</span> v.<span class='fq'>_create</span><br />
v.<span class='fd'>Separator</span><span class='o'>=</span><span class='s'>"[9]"</span><br />
<br />
v.<span class='fd'>FromString</span><span class='p'>(</span>Data<span class='p'>)</span><br />
<br />
<span class='t'>str</span> Alias Path RegEntry<br />
<br />
<span class='fq'>for</span> <span class='t'>int</span><span class='p'>'</span>r <span class='n'>0</span> v.<span class='fd'>RowCount</span><br />
<span class='i'>,</span>Alias<span class='o'>=</span>v.<span class='fd'>Cell</span><span class='p'>(</span>r <span class='n'>0</span><span class='p'>)</span><br />
<span class='i'>,</span>Path<span class='o'>=</span>v.<span class='fd'>Cell</span><span class='p'>(</span>r <span class='n'>1</span><span class='p'>)</span><br />
<span class='i'>,</span>Path.<span class='fq'>expandpath</span><br />
<span class='i'>,</span>Path.<span class='fq'>findreplace</span><span class='p'>(</span><span class='s'>"&#92;"</span> <span class='s'>"&#92;&#92;"</span><span class='p'>)</span><br />
<span class='i'>,</span>RegEntry<span class='o'>=</span><br />
<span class='i'>,</span><span class='o'>F</span><br />
<span class='i'>,</span><span class='s'>;[HKEY_LOCAL_MACHINE&#92;SOFTWARE&#92;Microsoft&#92;Windows&#92;CurrentVersion&#92;App Paths&#92;{</span>Alias<span class='s'>}.exe]</span><br />
<span class='i'>,</span><span class='s'>;@="{</span>Path<span class='s'>}"</span><br />
<span class='i'>,</span><span class='s'>;</span><br />
<span class='i'>,</span>RegData.<span class='fq'>addline</span><span class='p'>(</span>RegEntry<span class='p'>)</span><br />
<span class='i'>,</span><br />
<span class='fq'>out</span> RegData<br />
RegData.<span class='fq'>setfile</span><span class='p'>(</span>RegFile<span class='p'>)</span><br />
<span class='c'>;ret</span><br />
<span class='fq'>run</span> <span class='s'>"regedit.exe"</span> <span class='o'>F</span><span class='s'>"/s ''{</span>RegFile<span class='s'>}''"</span></code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Tables/IDP_VIRTUALKEYS.html converted to arrays]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=6405</link>
			<pubDate>Tue, 17 Apr 2018 22:21:33 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=715">r0n</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=6405</guid>
			<description><![CDATA[I created arrays from the QM help page 'Other info' &gt;&gt; 'Virtual-key codes'<br />
Read the below green comment in the QM code.<br />
<br />
I thought it might be handy to have it available in arrays.<br />
<br />
Function <span style="font-weight: bold;" class="mycode_b">keylist_toarrays</span> <span/><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code><span class='c'>;;********************************************************</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;* From the QM help page: 'Other info' &gt;&gt; 'Virtual-key codes'</span><br />
<span class='c'>;;* (..&#92;App&#92;QuickMacros&#92;qm2help.chm::/Tables/IDP_VIRTUALKEYS.html)</span><br />
<span class='c'>;;* It contains a list of [1]VK codes, [2]values, [3]QM key codes and [4]descriptions.</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;* Below you will see the above mentioned [1] to [4] represented in arrays:</span><br />
<span class='c'>;;* [1] ARRAY(str) arr_keylist_const</span><br />
<span class='c'>;;* [2] ARRAY(str) arr_keylist_value</span><br />
<span class='c'>;;* [3] ARRAY(str) arr_keylist_qm</span><br />
<span class='c'>;;* [4] ARRAY(str) arr_keylist_descript</span><br />
<span class='c'>;;* </span><br />
<span class='c'>;;* Within the below string "keylist", empty values are represented with double dots.</span><br />
<span class='c'>;;* The 'dash' also seemed to represent empty (none-spefied?) values.</span><br />
<span class='c'>;;* In other words, the double dots AND dashes are empty values</span><br />
<span class='c'>;;* </span><br />
<span class='c'>;;* Important note:</span><br />
<span class='c'>;;* Below in string "keylist" there is a line:</span><br />
<span class='c'>;;* VK_OEM_5|0xDC|&#92; or @pipe@|Used ..................</span><br />
<span class='c'>;;* The @pipe@ represents: | (actual pipe symbol). I had to do this because I used the pipe to delimit the lines.</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;* You could for example, put this somehwere in your init2 and make the 4 arrays system global =&gt; +</span><br />
<span class='c'>;;* Then you could have key-code information always available for your projects.</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;* I also took care of the ranges, in other words: ranges are converted to individual lines.</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;******************************************************</span><br />
<span class='c'>;</span><br />
<span class='c'>;</span><br />
<span class='t'>str</span> keylist<span class='o'>=</span><br />
<span class='s'>;VK_LBUTTON|0x1|..|Left mouse button</span><br />
<span class='s'>;VK_RBUTTON|0x2|..|Right mouse button</span><br />
<span class='s'>;VK_CANCEL|0x3|..|Control-break (Ctrl+Pause)</span><br />
<span class='s'>;VK_MBUTTON|0x4|..|Middle mouse button</span><br />
<span class='s'>;VK_XBUTTON1|0x5|..|X1 mouse button</span><br />
<span class='s'>;VK_XBUTTON2|0x6|..|X2 mouse button</span><br />
<span class='s'>;-|0x7|..|Undefined</span><br />
<span class='s'>;VK_BACK|0x8|B|BACKSPACE key</span><br />
<span class='s'>;VK_TAB|0x9|T|TAB key</span><br />
<span class='s'>;-|0xA|..|Reserved</span><br />
<span class='s'>;-|0xB|..|Reserved</span><br />
<span class='s'>;VK_CLEAR|0xC|..|CLEAR key (Shift+Num5)</span><br />
<span class='s'>;VK_RETURN|0xD|Y|ENTER key</span><br />
<span class='s'>;-|0xE|..|Undefined</span><br />
<span class='s'>;-|0xF|..|Undefined</span><br />
<span class='s'>;VK_SHIFT|0x10|S|SHIFT key</span><br />
<span class='s'>;VK_CONTROL|0x11|C|CTRL key</span><br />
<span class='s'>;VK_MENU|0x12|A|ALT key</span><br />
<span class='s'>;VK_PAUSE|0x13|G|PAUSE key</span><br />
<span class='s'>;VK_CAPITAL|0x14|K|CAPS LOCK key</span><br />
<span class='s'>;VK_KANA|0x15|..|IME Kana mode</span><br />
<span class='s'>;VK_HANGUEL|0x15|..|IME Hanguel mode</span><br />
<span class='s'>;VK_HANGUL|0x15|..|IME Hangul mode</span><br />
<span class='s'>;-|0x16|..|Undefined</span><br />
<span class='s'>;VK_JUNJA|0x17|..|IME Junja mode</span><br />
<span class='s'>;VK_FINAL|0x18|..|IME final mode</span><br />
<span class='s'>;VK_HANJA|0x19|..|IME Hanja mode</span><br />
<span class='s'>;VK_KANJI|0x19|..|IME Kanji mode</span><br />
<span class='s'>;-|0x1A|..|Undefined</span><br />
<span class='s'>;VK_ESCAPE|0x1B|Z|ESC key</span><br />
<span class='s'>;VK_CONVERT|0x1C|..|IME convert</span><br />
<span class='s'>;VK_NONCONVERT|0x1D|..|IME nonconvert</span><br />
<span class='s'>;VK_ACCEPT|0x1E|..|IME accept</span><br />
<span class='s'>;VK_MODECHANGE|0x1F|..|IME mode change request</span><br />
<span class='s'>;VK_SPACE|0x20|V|SPACEBAR</span><br />
<span class='s'>;VK_PRIOR|0x21|P|PAGE UP key</span><br />
<span class='s'>;VK_NEXT|0x22|Q|PAGE DOWN key</span><br />
<span class='s'>;VK_END|0x23|E|END key</span><br />
<span class='s'>;VK_HOME|0x24|H|HOME key</span><br />
<span class='s'>;VK_LEFT|0x25|L|LEFT ARROW key</span><br />
<span class='s'>;VK_UP|0x26|U|UP ARROW key</span><br />
<span class='s'>;VK_RIGHT|0x27|R|RIGHT ARROW key</span><br />
<span class='s'>;VK_DOWN|0x28|D|DOWN ARROW key</span><br />
<span class='s'>;VK_SELECT|0x29|..|SELECT key</span><br />
<span class='s'>;VK_PRINT|0x2A|..|PRINT key</span><br />
<span class='s'>;VK_EXECUTE|0x2B|..|EXECUTE key</span><br />
<span class='s'>;VK_SNAPSHOT|0x2C|..|PRINT SCREEN key</span><br />
<span class='s'>;VK_INSERT|0x2D|I|INS key</span><br />
<span class='s'>;VK_DELETE|0x2E|X|DEL key</span><br />
<span class='s'>;VK_HELP|0x2F|..|HELP key</span><br />
<span class='s'>;..|0x30|0|0 key</span><br />
<span class='s'>;..|0x31|1|1 key</span><br />
<span class='s'>;..|0x32|2|2 key</span><br />
<span class='s'>;..|0x33|3|3 key</span><br />
<span class='s'>;..|0x34|4|4 key</span><br />
<span class='s'>;..|0x35|5|5 key</span><br />
<span class='s'>;..|0x36|6|6 key</span><br />
<span class='s'>;..|0x37|7|7 key</span><br />
<span class='s'>;..|0x38|8|8 key</span><br />
<span class='s'>;..|0x39|9|9 key</span><br />
<span class='s'>;-|0x3A|..|Undefined</span><br />
<span class='s'>;-|0x3B|..|Undefined</span><br />
<span class='s'>;-|0x3C|..|Undefined</span><br />
<span class='s'>;-|0x3D|..|Undefined</span><br />
<span class='s'>;-|0x3E|..|Undefined</span><br />
<span class='s'>;-|0x3F|..|Undefined</span><br />
<span class='s'>;-|0x40|..|Undefined</span><br />
<span class='s'>;..|0x41|a|A key</span><br />
<span class='s'>;..|0x42|b|B key</span><br />
<span class='s'>;..|0x43|c|C key</span><br />
<span class='s'>;..|0x44|d|D key</span><br />
<span class='s'>;..|0x45|e|E key</span><br />
<span class='s'>;..|0x46|f|F key</span><br />
<span class='s'>;..|0x47|g|G key</span><br />
<span class='s'>;..|0x48|h|H key</span><br />
<span class='s'>;..|0x49|i|I key</span><br />
<span class='s'>;..|0x4A|j|J key</span><br />
<span class='s'>;..|0x4B|k|K key</span><br />
<span class='s'>;..|0x4C|l|L key</span><br />
<span class='s'>;..|0x4D|m|M key</span><br />
<span class='s'>;..|0x4E|n|N key</span><br />
<span class='s'>;..|0x4F|o|O key</span><br />
<span class='s'>;..|0x50|p|P key</span><br />
<span class='s'>;..|0x51|q|Q key</span><br />
<span class='s'>;..|0x52|r|R key</span><br />
<span class='s'>;..|0x53|s|S key</span><br />
<span class='s'>;..|0x54|t|T key</span><br />
<span class='s'>;..|0x55|u|U key</span><br />
<span class='s'>;..|0x56|v|V key</span><br />
<span class='s'>;..|0x57|w|W key</span><br />
<span class='s'>;..|0x58|x|X key</span><br />
<span class='s'>;..|0x59|y|Y key</span><br />
<span class='s'>;..|0x5A|z|Z key</span><br />
<span class='s'>;VK_LWIN|0x5B|W|Left Windows key</span><br />
<span class='s'>;VK_RWIN|0x5C|..|Right Windows key</span><br />
<span class='s'>;VK_APPS|0x5D|M|Applications key</span><br />
<span class='s'>;-|0x5E|..|Reserved</span><br />
<span class='s'>;VK_SLEEP|0x5F|..|Computer Sleep key</span><br />
<span class='s'>;VK_NUMPAD0|0x60|N0|Numeric keypad 0 key</span><br />
<span class='s'>;VK_NUMPAD1|0x61|N1|Numeric keypad 1 key</span><br />
<span class='s'>;VK_NUMPAD2|0x62|N2|Numeric keypad 2 key</span><br />
<span class='s'>;VK_NUMPAD3|0x63|N3|Numeric keypad 3 key</span><br />
<span class='s'>;VK_NUMPAD4|0x64|N4|Numeric keypad 4 key</span><br />
<span class='s'>;VK_NUMPAD5|0x65|N5|Numeric keypad 5 key</span><br />
<span class='s'>;VK_NUMPAD6|0x66|N6|Numeric keypad 6 key</span><br />
<span class='s'>;VK_NUMPAD7|0x67|N7|Numeric keypad 7 key</span><br />
<span class='s'>;VK_NUMPAD8|0x68|N8|Numeric keypad 8 key</span><br />
<span class='s'>;VK_NUMPAD9|0x69|N9|Numeric keypad 9 key</span><br />
<span class='s'>;VK_MULTIPLY|0x6A|N*|Multiply key</span><br />
<span class='s'>;VK_ADD|0x6B|N+|Add key</span><br />
<span class='s'>;VK_SEPARATOR|0x6C|..|Separator key</span><br />
<span class='s'>;VK_SUBTRACT|0x6D|N-|Subtract key</span><br />
<span class='s'>;VK_DECIMAL|0x6E|N.|Decimal key</span><br />
<span class='s'>;VK_DIVIDE|0x6F|N/|Divide key</span><br />
<span class='s'>;VK_F1|0x70|F1|F1 key</span><br />
<span class='s'>;VK_F2|0x71|F2|F2 key</span><br />
<span class='s'>;VK_F3|0x72|F3|F3 key</span><br />
<span class='s'>;VK_F4|0x73|F4|F4 key</span><br />
<span class='s'>;VK_F5|0x74|F5|F5 key</span><br />
<span class='s'>;VK_F6|0x75|F6|F6 key</span><br />
<span class='s'>;VK_F7|0x76|F7|F7 key</span><br />
<span class='s'>;VK_F8|0x77|F8|F8 key</span><br />
<span class='s'>;VK_F9|0x78|F9|F9 key</span><br />
<span class='s'>;VK_F10|0x79|F10|F10 key</span><br />
<span class='s'>;VK_F11|0x7A|F11|F11 key</span><br />
<span class='s'>;VK_F12|0x7B|F12|F12 key</span><br />
<span class='s'>;VK_F13|0x7C|F13|F13 key</span><br />
<span class='s'>;VK_F14|0x7D|F14|F14 key</span><br />
<span class='s'>;VK_F15|0x7E|F15|F15 key</span><br />
<span class='s'>;VK_F16|0x7F|F16|F16 key</span><br />
<span class='s'>;VK_F17|0x80|F17|F17 key</span><br />
<span class='s'>;VK_F18|0x81|F18|F18 key</span><br />
<span class='s'>;VK_F19|0x82|F19|F19 key</span><br />
<span class='s'>;VK_F20|0x83|F20|F20 key</span><br />
<span class='s'>;VK_F21|0x84|F21|F21 key</span><br />
<span class='s'>;VK_F22|0x85|F22|F22 key</span><br />
<span class='s'>;VK_F23|0x86|F23|F23 key</span><br />
<span class='s'>;VK_F24|0x87|F24|F24 key</span><br />
<span class='s'>;-|0x88|..|Unassigned</span><br />
<span class='s'>;-|0x89|..|Unassigned</span><br />
<span class='s'>;-|0x8A|..|Unassigned</span><br />
<span class='s'>;-|0x8B|..|Unassigned</span><br />
<span class='s'>;-|0x8C|..|Unassigned</span><br />
<span class='s'>;-|0x8D|..|Unassigned</span><br />
<span class='s'>;-|0x8E|..|Unassigned</span><br />
<span class='s'>;-|0x8F|..|Unassigned</span><br />
<span class='s'>;VK_NUMLOCK|0x90|O|NUM LOCK key</span><br />
<span class='s'>;VK_SCROLL|0x91|J|SCROLL LOCK key</span><br />
<span class='s'>;..|0x92|..|OEM specific</span><br />
<span class='s'>;..|0x93|..|OEM specific</span><br />
<span class='s'>;..|0x94|..|OEM specific</span><br />
<span class='s'>;..|0x95|..|OEM specific</span><br />
<span class='s'>;..|0x96|..|OEM specific</span><br />
<span class='s'>;-|0x97|..|Unassigned</span><br />
<span class='s'>;-|0x98|..|Unassigned</span><br />
<span class='s'>;-|0x99|..|Unassigned</span><br />
<span class='s'>;-|0x9A|..|Unassigned</span><br />
<span class='s'>;-|0x9B|..|Unassigned</span><br />
<span class='s'>;-|0x9C|..|Unassigned</span><br />
<span class='s'>;-|0x9D|..|Unassigned</span><br />
<span class='s'>;-|0x9E|..|Unassigned</span><br />
<span class='s'>;-|0x9F|..|Unassigned</span><br />
<span class='s'>;VK_LSHIFT|0xA0|..|Left SHIFT key</span><br />
<span class='s'>;VK_RSHIFT|0xA1|..|Right SHIFT key</span><br />
<span class='s'>;VK_LCONTROL|0xA2|..|Left CONTROL key</span><br />
<span class='s'>;VK_RCONTROL|0xA3|..|Right CONTROL key</span><br />
<span class='s'>;VK_LMENU|0xA4|..|Left MENU key</span><br />
<span class='s'>;VK_RMENU|0xA5|..|Right MENU key</span><br />
<span class='s'>;VK_BROWSER_BACK|0xA6|..|Browser Back key</span><br />
<span class='s'>;VK_BROWSER_FORWARD|0xA7|..|Browser Forward key</span><br />
<span class='s'>;VK_BROWSER_REFRESH|0xA8|..|Browser Refresh key</span><br />
<span class='s'>;VK_BROWSER_STOP|0xA9|..|Browser Stop key</span><br />
<span class='s'>;VK_BROWSER_SEARCH|0xAA|..|Browser Search key</span><br />
<span class='s'>;VK_BROWSER_FAVORITES|0xAB|..|Browser Favorites key</span><br />
<span class='s'>;VK_BROWSER_HOME|0xAC|..|Browser Start and Home key</span><br />
<span class='s'>;VK_VOLUME_MUTE|0xAD|..|Volume Mute key</span><br />
<span class='s'>;VK_VOLUME_DOWN|0xAE|..|Volume Down key</span><br />
<span class='s'>;VK_VOLUME_UP|0xAF|..|Volume Up key</span><br />
<span class='s'>;VK_MEDIA_NEXT_TRACK|0xB0|..|Next Track key</span><br />
<span class='s'>;VK_MEDIA_PREV_TRACK|0xB1|..|Previous Track key</span><br />
<span class='s'>;VK_MEDIA_STOP|0xB2|..|Stop Media key</span><br />
<span class='s'>;VK_MEDIA_PLAY_PAUSE|0xB3|..|Play/Pause Media key</span><br />
<span class='s'>;VK_LAUNCH_MAIL|0xB4|..|Start Mail key</span><br />
<span class='s'>;VK_LAUNCH_MEDIA_SELECT|0xB5|..|Select Media key</span><br />
<span class='s'>;VK_LAUNCH_APP1|0xB6|..|Start Application 1 key</span><br />
<span class='s'>;VK_LAUNCH_APP2|0xB7|..|Start Application 2 key</span><br />
<span class='s'>;-|0xB8|..|Reserved</span><br />
<span class='s'>;-|0xB9|..|Reserved</span><br />
<span class='s'>;VK_OEM_1|0xBA|:|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the ';:' key</span><br />
<span class='s'>;VK_OEM_1|0xBA|:|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the ';:' key</span><br />
<span class='s'>;VK_OEM_PLUS|0xBB|+ or =|For any country/region, the '+' key</span><br />
<span class='s'>;VK_OEM_COMMA|0xBC|, or &lt;|For any country/region, the ',' key</span><br />
<span class='s'>;VK_OEM_MINUS|0xBD|- or _|For any country/region, the '-' key</span><br />
<span class='s'>;VK_OEM_PERIOD|0xBE|. or &gt;|For any country/region, the '.' key</span><br />
<span class='s'>;VK_OEM_2|0xBF|/ or ?|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the '/?' key</span><br />
<span class='s'>;VK_OEM_2|0xBF|/ or ?|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the '/?' key</span><br />
<span class='s'>;VK_OEM_3|0xC0|` or ~|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the '`~' key</span><br />
<span class='s'>;-|0xC1|..|Reserved</span><br />
<span class='s'>;-|0xC2|..|Reserved</span><br />
<span class='s'>;-|0xC3|..|Reserved</span><br />
<span class='s'>;-|0xC4|..|Reserved</span><br />
<span class='s'>;-|0xC5|..|Reserved</span><br />
<span class='s'>;-|0xC6|..|Reserved</span><br />
<span class='s'>;-|0xC7|..|Reserved</span><br />
<span class='s'>;-|0xC8|..|Reserved</span><br />
<span class='s'>;-|0xC9|..|Reserved</span><br />
<span class='s'>;-|0xCA|..|Reserved</span><br />
<span class='s'>;-|0xCB|..|Reserved</span><br />
<span class='s'>;-|0xCC|..|Reserved</span><br />
<span class='s'>;-|0xCD|..|Reserved</span><br />
<span class='s'>;-|0xCE|..|Reserved</span><br />
<span class='s'>;-|0xCF|..|Reserved</span><br />
<span class='s'>;-|0xD1|..|Reserved</span><br />
<span class='s'>;-|0xD2|..|Reserved</span><br />
<span class='s'>;-|0xD3|..|Reserved</span><br />
<span class='s'>;-|0xD4|..|Reserved</span><br />
<span class='s'>;-|0xD5|..|Reserved</span><br />
<span class='s'>;-|0xD6|..|Reserved</span><br />
<span class='s'>;-|0xD7|..|Reserved</span><br />
<span class='s'>;-|0xD8|..|Unassigned</span><br />
<span class='s'>;-|0xD9|..|Unassigned</span><br />
<span class='s'>;-|0xDA|..|Unassigned</span><br />
<span class='s'>;VK_OEM_4|0xDB|[|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the '[{' key</span><br />
<span class='s'>;VK_OEM_5|0xDC|&#92; or @pipe@|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the '&#92;|' key</span><br />
<span class='s'>;VK_OEM_6|0xDD|]|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the ']}' key</span><br />
<span class='s'>;VK_OEM_7|0xDE|'|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the 'single-quote/double-quote' key</span><br />
<span class='s'>;VK_OEM_8|0xDF|..|Used for miscellaneous characters; it can vary by keyboard.</span><br />
<span class='s'>;-|0xE0|..|Reserved</span><br />
<span class='s'>;..|0xE1|..|OEM specific</span><br />
<span class='s'>;VK_OEM_102|0xE2|..|Either the angle bracket key or the backslash key on the RT 102-key keyboard</span><br />
<span class='s'>;..|0xE3|..|OEM specific</span><br />
<span class='s'>;..|0xE4|..|OEM specific</span><br />
<span class='s'>;VK_PROCESSKEY|0xE5|..|IME PROCESS key</span><br />
<span class='s'>;..|0xE6|..|OEM specific</span><br />
<span class='s'>;VK_PACKET|0xE7|..|Used to pass Unicode characters as if they were keystrokes.</span><br />
<span class='s'>;- |0xE8|..|Unassigned</span><br />
<span class='s'>;..|0xE9|..|OEM specific</span><br />
<span class='s'>;..|0xEA|..|OEM specific</span><br />
<span class='s'>;..|0xEB|..|OEM specific</span><br />
<span class='s'>;..|0xEC|..|OEM specific</span><br />
<span class='s'>;..|0xED|..|OEM specific</span><br />
<span class='s'>;..|0xEE|..|OEM specific</span><br />
<span class='s'>;..|0xEF|..|OEM specific</span><br />
<span class='s'>;..|0xF0|..|OEM specific</span><br />
<span class='s'>;..|0xF1|..|OEM specific</span><br />
<span class='s'>;..|0xF2|..|OEM specific</span><br />
<span class='s'>;..|0xF3|..|OEM specific</span><br />
<span class='s'>;..|0xF4|..|OEM specific</span><br />
<span class='s'>;..|0xF5|..|OEM specific</span><br />
<span class='s'>;VK_ATTN|0xF6|..|Attn key</span><br />
<span class='s'>;VK_CRSEL|0xF7|..|CrSel key</span><br />
<span class='s'>;VK_EXSEL|0xF8|..|ExSel key</span><br />
<span class='s'>;VK_EREOF|0xF9|..|Erase EOF key</span><br />
<span class='s'>;VK_PLAY|0xFA|..|Play key</span><br />
<span class='s'>;VK_ZOOM|0xFB|..|Zoom key</span><br />
<span class='s'>;VK_NONAME|0xFC|..|Reserved for future use</span><br />
<span class='s'>;VK_PA1|0xFD|..|PA1 key</span><br />
<span class='s'>;VK_OEM_CLEAR|0xFE|..|Clear key</span><br />
<br />
<span class='t'>ARRAY</span><span class='p'>(</span><span class='t'>str</span><span class='p'>)</span> arr_keylist_const<br />
<span class='t'>ARRAY</span><span class='p'>(</span><span class='t'>str</span><span class='p'>)</span> arr_keylist_value<br />
<span class='t'>ARRAY</span><span class='p'>(</span><span class='t'>str</span><span class='p'>)</span> arr_keylist_qm<br />
<span class='t'>ARRAY</span><span class='p'>(</span><span class='t'>str</span><span class='p'>)</span> arr_keylist_descript<br />
<br />
<span class='fq'>foreach</span> _s keylist<br />
<span class='i'>,</span><span class='t'>ARRAY</span><span class='p'>(</span><span class='t'>str</span><span class='p'>)</span> arr_tok <br />
<span class='i'>,</span><span class='fq'>tok</span> _s arr_tok <span class='o'>-</span><span class='n'>1</span> <span class='s'>"|"</span><br />
<span class='i'>,</span>arr_keylist_const[]<span class='o'>=</span>arr_tok[<span class='n'>0</span>]<br />
<span class='i'>,</span>arr_keylist_value[]<span class='o'>=</span>arr_tok[<span class='n'>1</span>]<br />
<span class='i'>,</span>arr_keylist_qm[]<span class='o'>=</span>arr_tok[<span class='n'>2</span>]<br />
<span class='i'>,</span>arr_keylist_descript[]<span class='o'>=</span>arr_tok[<span class='n'>3</span>]<br />
<br />
<span class='fq'>out</span> arr_keylist_const.<span class='fq'>len</span><br />
<span class='fq'>out</span> arr_keylist_value.<span class='fq'>len</span><br />
<span class='fq'>out</span> arr_keylist_qm.<span class='fq'>len</span><br />
<span class='fq'>out</span> arr_keylist_descript.<span class='fq'>len</span></code></div></div>]]></description>
			<content:encoded><![CDATA[I created arrays from the QM help page 'Other info' &gt;&gt; 'Virtual-key codes'<br />
Read the below green comment in the QM code.<br />
<br />
I thought it might be handy to have it available in arrays.<br />
<br />
Function <span style="font-weight: bold;" class="mycode_b">keylist_toarrays</span> <span/><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code><span class='c'>;;********************************************************</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;* From the QM help page: 'Other info' &gt;&gt; 'Virtual-key codes'</span><br />
<span class='c'>;;* (..&#92;App&#92;QuickMacros&#92;qm2help.chm::/Tables/IDP_VIRTUALKEYS.html)</span><br />
<span class='c'>;;* It contains a list of [1]VK codes, [2]values, [3]QM key codes and [4]descriptions.</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;* Below you will see the above mentioned [1] to [4] represented in arrays:</span><br />
<span class='c'>;;* [1] ARRAY(str) arr_keylist_const</span><br />
<span class='c'>;;* [2] ARRAY(str) arr_keylist_value</span><br />
<span class='c'>;;* [3] ARRAY(str) arr_keylist_qm</span><br />
<span class='c'>;;* [4] ARRAY(str) arr_keylist_descript</span><br />
<span class='c'>;;* </span><br />
<span class='c'>;;* Within the below string "keylist", empty values are represented with double dots.</span><br />
<span class='c'>;;* The 'dash' also seemed to represent empty (none-spefied?) values.</span><br />
<span class='c'>;;* In other words, the double dots AND dashes are empty values</span><br />
<span class='c'>;;* </span><br />
<span class='c'>;;* Important note:</span><br />
<span class='c'>;;* Below in string "keylist" there is a line:</span><br />
<span class='c'>;;* VK_OEM_5|0xDC|&#92; or @pipe@|Used ..................</span><br />
<span class='c'>;;* The @pipe@ represents: | (actual pipe symbol). I had to do this because I used the pipe to delimit the lines.</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;* You could for example, put this somehwere in your init2 and make the 4 arrays system global =&gt; +</span><br />
<span class='c'>;;* Then you could have key-code information always available for your projects.</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;* I also took care of the ranges, in other words: ranges are converted to individual lines.</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;*</span><br />
<span class='c'>;;******************************************************</span><br />
<span class='c'>;</span><br />
<span class='c'>;</span><br />
<span class='t'>str</span> keylist<span class='o'>=</span><br />
<span class='s'>;VK_LBUTTON|0x1|..|Left mouse button</span><br />
<span class='s'>;VK_RBUTTON|0x2|..|Right mouse button</span><br />
<span class='s'>;VK_CANCEL|0x3|..|Control-break (Ctrl+Pause)</span><br />
<span class='s'>;VK_MBUTTON|0x4|..|Middle mouse button</span><br />
<span class='s'>;VK_XBUTTON1|0x5|..|X1 mouse button</span><br />
<span class='s'>;VK_XBUTTON2|0x6|..|X2 mouse button</span><br />
<span class='s'>;-|0x7|..|Undefined</span><br />
<span class='s'>;VK_BACK|0x8|B|BACKSPACE key</span><br />
<span class='s'>;VK_TAB|0x9|T|TAB key</span><br />
<span class='s'>;-|0xA|..|Reserved</span><br />
<span class='s'>;-|0xB|..|Reserved</span><br />
<span class='s'>;VK_CLEAR|0xC|..|CLEAR key (Shift+Num5)</span><br />
<span class='s'>;VK_RETURN|0xD|Y|ENTER key</span><br />
<span class='s'>;-|0xE|..|Undefined</span><br />
<span class='s'>;-|0xF|..|Undefined</span><br />
<span class='s'>;VK_SHIFT|0x10|S|SHIFT key</span><br />
<span class='s'>;VK_CONTROL|0x11|C|CTRL key</span><br />
<span class='s'>;VK_MENU|0x12|A|ALT key</span><br />
<span class='s'>;VK_PAUSE|0x13|G|PAUSE key</span><br />
<span class='s'>;VK_CAPITAL|0x14|K|CAPS LOCK key</span><br />
<span class='s'>;VK_KANA|0x15|..|IME Kana mode</span><br />
<span class='s'>;VK_HANGUEL|0x15|..|IME Hanguel mode</span><br />
<span class='s'>;VK_HANGUL|0x15|..|IME Hangul mode</span><br />
<span class='s'>;-|0x16|..|Undefined</span><br />
<span class='s'>;VK_JUNJA|0x17|..|IME Junja mode</span><br />
<span class='s'>;VK_FINAL|0x18|..|IME final mode</span><br />
<span class='s'>;VK_HANJA|0x19|..|IME Hanja mode</span><br />
<span class='s'>;VK_KANJI|0x19|..|IME Kanji mode</span><br />
<span class='s'>;-|0x1A|..|Undefined</span><br />
<span class='s'>;VK_ESCAPE|0x1B|Z|ESC key</span><br />
<span class='s'>;VK_CONVERT|0x1C|..|IME convert</span><br />
<span class='s'>;VK_NONCONVERT|0x1D|..|IME nonconvert</span><br />
<span class='s'>;VK_ACCEPT|0x1E|..|IME accept</span><br />
<span class='s'>;VK_MODECHANGE|0x1F|..|IME mode change request</span><br />
<span class='s'>;VK_SPACE|0x20|V|SPACEBAR</span><br />
<span class='s'>;VK_PRIOR|0x21|P|PAGE UP key</span><br />
<span class='s'>;VK_NEXT|0x22|Q|PAGE DOWN key</span><br />
<span class='s'>;VK_END|0x23|E|END key</span><br />
<span class='s'>;VK_HOME|0x24|H|HOME key</span><br />
<span class='s'>;VK_LEFT|0x25|L|LEFT ARROW key</span><br />
<span class='s'>;VK_UP|0x26|U|UP ARROW key</span><br />
<span class='s'>;VK_RIGHT|0x27|R|RIGHT ARROW key</span><br />
<span class='s'>;VK_DOWN|0x28|D|DOWN ARROW key</span><br />
<span class='s'>;VK_SELECT|0x29|..|SELECT key</span><br />
<span class='s'>;VK_PRINT|0x2A|..|PRINT key</span><br />
<span class='s'>;VK_EXECUTE|0x2B|..|EXECUTE key</span><br />
<span class='s'>;VK_SNAPSHOT|0x2C|..|PRINT SCREEN key</span><br />
<span class='s'>;VK_INSERT|0x2D|I|INS key</span><br />
<span class='s'>;VK_DELETE|0x2E|X|DEL key</span><br />
<span class='s'>;VK_HELP|0x2F|..|HELP key</span><br />
<span class='s'>;..|0x30|0|0 key</span><br />
<span class='s'>;..|0x31|1|1 key</span><br />
<span class='s'>;..|0x32|2|2 key</span><br />
<span class='s'>;..|0x33|3|3 key</span><br />
<span class='s'>;..|0x34|4|4 key</span><br />
<span class='s'>;..|0x35|5|5 key</span><br />
<span class='s'>;..|0x36|6|6 key</span><br />
<span class='s'>;..|0x37|7|7 key</span><br />
<span class='s'>;..|0x38|8|8 key</span><br />
<span class='s'>;..|0x39|9|9 key</span><br />
<span class='s'>;-|0x3A|..|Undefined</span><br />
<span class='s'>;-|0x3B|..|Undefined</span><br />
<span class='s'>;-|0x3C|..|Undefined</span><br />
<span class='s'>;-|0x3D|..|Undefined</span><br />
<span class='s'>;-|0x3E|..|Undefined</span><br />
<span class='s'>;-|0x3F|..|Undefined</span><br />
<span class='s'>;-|0x40|..|Undefined</span><br />
<span class='s'>;..|0x41|a|A key</span><br />
<span class='s'>;..|0x42|b|B key</span><br />
<span class='s'>;..|0x43|c|C key</span><br />
<span class='s'>;..|0x44|d|D key</span><br />
<span class='s'>;..|0x45|e|E key</span><br />
<span class='s'>;..|0x46|f|F key</span><br />
<span class='s'>;..|0x47|g|G key</span><br />
<span class='s'>;..|0x48|h|H key</span><br />
<span class='s'>;..|0x49|i|I key</span><br />
<span class='s'>;..|0x4A|j|J key</span><br />
<span class='s'>;..|0x4B|k|K key</span><br />
<span class='s'>;..|0x4C|l|L key</span><br />
<span class='s'>;..|0x4D|m|M key</span><br />
<span class='s'>;..|0x4E|n|N key</span><br />
<span class='s'>;..|0x4F|o|O key</span><br />
<span class='s'>;..|0x50|p|P key</span><br />
<span class='s'>;..|0x51|q|Q key</span><br />
<span class='s'>;..|0x52|r|R key</span><br />
<span class='s'>;..|0x53|s|S key</span><br />
<span class='s'>;..|0x54|t|T key</span><br />
<span class='s'>;..|0x55|u|U key</span><br />
<span class='s'>;..|0x56|v|V key</span><br />
<span class='s'>;..|0x57|w|W key</span><br />
<span class='s'>;..|0x58|x|X key</span><br />
<span class='s'>;..|0x59|y|Y key</span><br />
<span class='s'>;..|0x5A|z|Z key</span><br />
<span class='s'>;VK_LWIN|0x5B|W|Left Windows key</span><br />
<span class='s'>;VK_RWIN|0x5C|..|Right Windows key</span><br />
<span class='s'>;VK_APPS|0x5D|M|Applications key</span><br />
<span class='s'>;-|0x5E|..|Reserved</span><br />
<span class='s'>;VK_SLEEP|0x5F|..|Computer Sleep key</span><br />
<span class='s'>;VK_NUMPAD0|0x60|N0|Numeric keypad 0 key</span><br />
<span class='s'>;VK_NUMPAD1|0x61|N1|Numeric keypad 1 key</span><br />
<span class='s'>;VK_NUMPAD2|0x62|N2|Numeric keypad 2 key</span><br />
<span class='s'>;VK_NUMPAD3|0x63|N3|Numeric keypad 3 key</span><br />
<span class='s'>;VK_NUMPAD4|0x64|N4|Numeric keypad 4 key</span><br />
<span class='s'>;VK_NUMPAD5|0x65|N5|Numeric keypad 5 key</span><br />
<span class='s'>;VK_NUMPAD6|0x66|N6|Numeric keypad 6 key</span><br />
<span class='s'>;VK_NUMPAD7|0x67|N7|Numeric keypad 7 key</span><br />
<span class='s'>;VK_NUMPAD8|0x68|N8|Numeric keypad 8 key</span><br />
<span class='s'>;VK_NUMPAD9|0x69|N9|Numeric keypad 9 key</span><br />
<span class='s'>;VK_MULTIPLY|0x6A|N*|Multiply key</span><br />
<span class='s'>;VK_ADD|0x6B|N+|Add key</span><br />
<span class='s'>;VK_SEPARATOR|0x6C|..|Separator key</span><br />
<span class='s'>;VK_SUBTRACT|0x6D|N-|Subtract key</span><br />
<span class='s'>;VK_DECIMAL|0x6E|N.|Decimal key</span><br />
<span class='s'>;VK_DIVIDE|0x6F|N/|Divide key</span><br />
<span class='s'>;VK_F1|0x70|F1|F1 key</span><br />
<span class='s'>;VK_F2|0x71|F2|F2 key</span><br />
<span class='s'>;VK_F3|0x72|F3|F3 key</span><br />
<span class='s'>;VK_F4|0x73|F4|F4 key</span><br />
<span class='s'>;VK_F5|0x74|F5|F5 key</span><br />
<span class='s'>;VK_F6|0x75|F6|F6 key</span><br />
<span class='s'>;VK_F7|0x76|F7|F7 key</span><br />
<span class='s'>;VK_F8|0x77|F8|F8 key</span><br />
<span class='s'>;VK_F9|0x78|F9|F9 key</span><br />
<span class='s'>;VK_F10|0x79|F10|F10 key</span><br />
<span class='s'>;VK_F11|0x7A|F11|F11 key</span><br />
<span class='s'>;VK_F12|0x7B|F12|F12 key</span><br />
<span class='s'>;VK_F13|0x7C|F13|F13 key</span><br />
<span class='s'>;VK_F14|0x7D|F14|F14 key</span><br />
<span class='s'>;VK_F15|0x7E|F15|F15 key</span><br />
<span class='s'>;VK_F16|0x7F|F16|F16 key</span><br />
<span class='s'>;VK_F17|0x80|F17|F17 key</span><br />
<span class='s'>;VK_F18|0x81|F18|F18 key</span><br />
<span class='s'>;VK_F19|0x82|F19|F19 key</span><br />
<span class='s'>;VK_F20|0x83|F20|F20 key</span><br />
<span class='s'>;VK_F21|0x84|F21|F21 key</span><br />
<span class='s'>;VK_F22|0x85|F22|F22 key</span><br />
<span class='s'>;VK_F23|0x86|F23|F23 key</span><br />
<span class='s'>;VK_F24|0x87|F24|F24 key</span><br />
<span class='s'>;-|0x88|..|Unassigned</span><br />
<span class='s'>;-|0x89|..|Unassigned</span><br />
<span class='s'>;-|0x8A|..|Unassigned</span><br />
<span class='s'>;-|0x8B|..|Unassigned</span><br />
<span class='s'>;-|0x8C|..|Unassigned</span><br />
<span class='s'>;-|0x8D|..|Unassigned</span><br />
<span class='s'>;-|0x8E|..|Unassigned</span><br />
<span class='s'>;-|0x8F|..|Unassigned</span><br />
<span class='s'>;VK_NUMLOCK|0x90|O|NUM LOCK key</span><br />
<span class='s'>;VK_SCROLL|0x91|J|SCROLL LOCK key</span><br />
<span class='s'>;..|0x92|..|OEM specific</span><br />
<span class='s'>;..|0x93|..|OEM specific</span><br />
<span class='s'>;..|0x94|..|OEM specific</span><br />
<span class='s'>;..|0x95|..|OEM specific</span><br />
<span class='s'>;..|0x96|..|OEM specific</span><br />
<span class='s'>;-|0x97|..|Unassigned</span><br />
<span class='s'>;-|0x98|..|Unassigned</span><br />
<span class='s'>;-|0x99|..|Unassigned</span><br />
<span class='s'>;-|0x9A|..|Unassigned</span><br />
<span class='s'>;-|0x9B|..|Unassigned</span><br />
<span class='s'>;-|0x9C|..|Unassigned</span><br />
<span class='s'>;-|0x9D|..|Unassigned</span><br />
<span class='s'>;-|0x9E|..|Unassigned</span><br />
<span class='s'>;-|0x9F|..|Unassigned</span><br />
<span class='s'>;VK_LSHIFT|0xA0|..|Left SHIFT key</span><br />
<span class='s'>;VK_RSHIFT|0xA1|..|Right SHIFT key</span><br />
<span class='s'>;VK_LCONTROL|0xA2|..|Left CONTROL key</span><br />
<span class='s'>;VK_RCONTROL|0xA3|..|Right CONTROL key</span><br />
<span class='s'>;VK_LMENU|0xA4|..|Left MENU key</span><br />
<span class='s'>;VK_RMENU|0xA5|..|Right MENU key</span><br />
<span class='s'>;VK_BROWSER_BACK|0xA6|..|Browser Back key</span><br />
<span class='s'>;VK_BROWSER_FORWARD|0xA7|..|Browser Forward key</span><br />
<span class='s'>;VK_BROWSER_REFRESH|0xA8|..|Browser Refresh key</span><br />
<span class='s'>;VK_BROWSER_STOP|0xA9|..|Browser Stop key</span><br />
<span class='s'>;VK_BROWSER_SEARCH|0xAA|..|Browser Search key</span><br />
<span class='s'>;VK_BROWSER_FAVORITES|0xAB|..|Browser Favorites key</span><br />
<span class='s'>;VK_BROWSER_HOME|0xAC|..|Browser Start and Home key</span><br />
<span class='s'>;VK_VOLUME_MUTE|0xAD|..|Volume Mute key</span><br />
<span class='s'>;VK_VOLUME_DOWN|0xAE|..|Volume Down key</span><br />
<span class='s'>;VK_VOLUME_UP|0xAF|..|Volume Up key</span><br />
<span class='s'>;VK_MEDIA_NEXT_TRACK|0xB0|..|Next Track key</span><br />
<span class='s'>;VK_MEDIA_PREV_TRACK|0xB1|..|Previous Track key</span><br />
<span class='s'>;VK_MEDIA_STOP|0xB2|..|Stop Media key</span><br />
<span class='s'>;VK_MEDIA_PLAY_PAUSE|0xB3|..|Play/Pause Media key</span><br />
<span class='s'>;VK_LAUNCH_MAIL|0xB4|..|Start Mail key</span><br />
<span class='s'>;VK_LAUNCH_MEDIA_SELECT|0xB5|..|Select Media key</span><br />
<span class='s'>;VK_LAUNCH_APP1|0xB6|..|Start Application 1 key</span><br />
<span class='s'>;VK_LAUNCH_APP2|0xB7|..|Start Application 2 key</span><br />
<span class='s'>;-|0xB8|..|Reserved</span><br />
<span class='s'>;-|0xB9|..|Reserved</span><br />
<span class='s'>;VK_OEM_1|0xBA|:|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the ';:' key</span><br />
<span class='s'>;VK_OEM_1|0xBA|:|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the ';:' key</span><br />
<span class='s'>;VK_OEM_PLUS|0xBB|+ or =|For any country/region, the '+' key</span><br />
<span class='s'>;VK_OEM_COMMA|0xBC|, or &lt;|For any country/region, the ',' key</span><br />
<span class='s'>;VK_OEM_MINUS|0xBD|- or _|For any country/region, the '-' key</span><br />
<span class='s'>;VK_OEM_PERIOD|0xBE|. or &gt;|For any country/region, the '.' key</span><br />
<span class='s'>;VK_OEM_2|0xBF|/ or ?|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the '/?' key</span><br />
<span class='s'>;VK_OEM_2|0xBF|/ or ?|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the '/?' key</span><br />
<span class='s'>;VK_OEM_3|0xC0|` or ~|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the '`~' key</span><br />
<span class='s'>;-|0xC1|..|Reserved</span><br />
<span class='s'>;-|0xC2|..|Reserved</span><br />
<span class='s'>;-|0xC3|..|Reserved</span><br />
<span class='s'>;-|0xC4|..|Reserved</span><br />
<span class='s'>;-|0xC5|..|Reserved</span><br />
<span class='s'>;-|0xC6|..|Reserved</span><br />
<span class='s'>;-|0xC7|..|Reserved</span><br />
<span class='s'>;-|0xC8|..|Reserved</span><br />
<span class='s'>;-|0xC9|..|Reserved</span><br />
<span class='s'>;-|0xCA|..|Reserved</span><br />
<span class='s'>;-|0xCB|..|Reserved</span><br />
<span class='s'>;-|0xCC|..|Reserved</span><br />
<span class='s'>;-|0xCD|..|Reserved</span><br />
<span class='s'>;-|0xCE|..|Reserved</span><br />
<span class='s'>;-|0xCF|..|Reserved</span><br />
<span class='s'>;-|0xD1|..|Reserved</span><br />
<span class='s'>;-|0xD2|..|Reserved</span><br />
<span class='s'>;-|0xD3|..|Reserved</span><br />
<span class='s'>;-|0xD4|..|Reserved</span><br />
<span class='s'>;-|0xD5|..|Reserved</span><br />
<span class='s'>;-|0xD6|..|Reserved</span><br />
<span class='s'>;-|0xD7|..|Reserved</span><br />
<span class='s'>;-|0xD8|..|Unassigned</span><br />
<span class='s'>;-|0xD9|..|Unassigned</span><br />
<span class='s'>;-|0xDA|..|Unassigned</span><br />
<span class='s'>;VK_OEM_4|0xDB|[|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the '[{' key</span><br />
<span class='s'>;VK_OEM_5|0xDC|&#92; or @pipe@|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the '&#92;|' key</span><br />
<span class='s'>;VK_OEM_6|0xDD|]|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the ']}' key</span><br />
<span class='s'>;VK_OEM_7|0xDE|'|Used for miscellaneous characters; it can vary by keyboard.[]For the US standard keyboard, the 'single-quote/double-quote' key</span><br />
<span class='s'>;VK_OEM_8|0xDF|..|Used for miscellaneous characters; it can vary by keyboard.</span><br />
<span class='s'>;-|0xE0|..|Reserved</span><br />
<span class='s'>;..|0xE1|..|OEM specific</span><br />
<span class='s'>;VK_OEM_102|0xE2|..|Either the angle bracket key or the backslash key on the RT 102-key keyboard</span><br />
<span class='s'>;..|0xE3|..|OEM specific</span><br />
<span class='s'>;..|0xE4|..|OEM specific</span><br />
<span class='s'>;VK_PROCESSKEY|0xE5|..|IME PROCESS key</span><br />
<span class='s'>;..|0xE6|..|OEM specific</span><br />
<span class='s'>;VK_PACKET|0xE7|..|Used to pass Unicode characters as if they were keystrokes.</span><br />
<span class='s'>;- |0xE8|..|Unassigned</span><br />
<span class='s'>;..|0xE9|..|OEM specific</span><br />
<span class='s'>;..|0xEA|..|OEM specific</span><br />
<span class='s'>;..|0xEB|..|OEM specific</span><br />
<span class='s'>;..|0xEC|..|OEM specific</span><br />
<span class='s'>;..|0xED|..|OEM specific</span><br />
<span class='s'>;..|0xEE|..|OEM specific</span><br />
<span class='s'>;..|0xEF|..|OEM specific</span><br />
<span class='s'>;..|0xF0|..|OEM specific</span><br />
<span class='s'>;..|0xF1|..|OEM specific</span><br />
<span class='s'>;..|0xF2|..|OEM specific</span><br />
<span class='s'>;..|0xF3|..|OEM specific</span><br />
<span class='s'>;..|0xF4|..|OEM specific</span><br />
<span class='s'>;..|0xF5|..|OEM specific</span><br />
<span class='s'>;VK_ATTN|0xF6|..|Attn key</span><br />
<span class='s'>;VK_CRSEL|0xF7|..|CrSel key</span><br />
<span class='s'>;VK_EXSEL|0xF8|..|ExSel key</span><br />
<span class='s'>;VK_EREOF|0xF9|..|Erase EOF key</span><br />
<span class='s'>;VK_PLAY|0xFA|..|Play key</span><br />
<span class='s'>;VK_ZOOM|0xFB|..|Zoom key</span><br />
<span class='s'>;VK_NONAME|0xFC|..|Reserved for future use</span><br />
<span class='s'>;VK_PA1|0xFD|..|PA1 key</span><br />
<span class='s'>;VK_OEM_CLEAR|0xFE|..|Clear key</span><br />
<br />
<span class='t'>ARRAY</span><span class='p'>(</span><span class='t'>str</span><span class='p'>)</span> arr_keylist_const<br />
<span class='t'>ARRAY</span><span class='p'>(</span><span class='t'>str</span><span class='p'>)</span> arr_keylist_value<br />
<span class='t'>ARRAY</span><span class='p'>(</span><span class='t'>str</span><span class='p'>)</span> arr_keylist_qm<br />
<span class='t'>ARRAY</span><span class='p'>(</span><span class='t'>str</span><span class='p'>)</span> arr_keylist_descript<br />
<br />
<span class='fq'>foreach</span> _s keylist<br />
<span class='i'>,</span><span class='t'>ARRAY</span><span class='p'>(</span><span class='t'>str</span><span class='p'>)</span> arr_tok <br />
<span class='i'>,</span><span class='fq'>tok</span> _s arr_tok <span class='o'>-</span><span class='n'>1</span> <span class='s'>"|"</span><br />
<span class='i'>,</span>arr_keylist_const[]<span class='o'>=</span>arr_tok[<span class='n'>0</span>]<br />
<span class='i'>,</span>arr_keylist_value[]<span class='o'>=</span>arr_tok[<span class='n'>1</span>]<br />
<span class='i'>,</span>arr_keylist_qm[]<span class='o'>=</span>arr_tok[<span class='n'>2</span>]<br />
<span class='i'>,</span>arr_keylist_descript[]<span class='o'>=</span>arr_tok[<span class='n'>3</span>]<br />
<br />
<span class='fq'>out</span> arr_keylist_const.<span class='fq'>len</span><br />
<span class='fq'>out</span> arr_keylist_value.<span class='fq'>len</span><br />
<span class='fq'>out</span> arr_keylist_qm.<span class='fq'>len</span><br />
<span class='fq'>out</span> arr_keylist_descript.<span class='fq'>len</span></code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Sending commands from Android+Tasker to QM]]></title>
			<link>https://www.libreautomate.com/forum/showthread.php?tid=6290</link>
			<pubDate>Sun, 08 Oct 2017 22:16:41 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.libreautomate.com/forum/member.php?action=profile&uid=2">Gintaras</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.libreautomate.com/forum/showthread.php?tid=6290</guid>
			<description><![CDATA[Function <span style="font-weight: bold;" class="mycode_b">dialog_HTTP_server_for_Tasker</span> <span/><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code><span class='c'>;This is a simple HTTP server that can receive and return data.</span><br />
<span class='c'>;Can be used for example to launch QM macros from other computers and smartphones.</span><br />
<span class='c'>;Below is instructions how to send commands from an Android mobile device with Tasker.</span><br />
<br />
<span class='c'>;On your Android device install Tasker app. It is for sending HTTP requests. Costs &#36;2.99. Or find a free app that can send HTTP requests.</span><br />
<span class='c'>;In Tasker create new task and add action HTTP Post.</span><br />
<span class='c'>;;;Set field Server:Port, like 192.168.8.123:5033. As Server, use one of IP addresses that you can see in QM Options -&gt; Network. The 5033 is server's port that is used in this macro, see below.</span><br />
<span class='c'>;;;Set field Data / File. Can be any text or variable or file. At first just for testing.</span><br />
<span class='c'>;;;Set field Content Type, like text/plain.</span><br />
<span class='c'>;;;Optionally set field Output File, like Documents/test1.txt. Only if you want to receive some data from QM.</span><br />
<br />
<span class='c'>;Run this function and in the dialog click button Start.</span><br />
<span class='c'>;Run the Tasker task.</span><br />
<span class='c'>;;;In QM output you should see Tasker's HTTP POST request that includes data at the end.</span><br />
<span class='c'>;;;If was set Output File, the task creates the file. It contains text DATA.</span><br />
<br />
<br />
<span class='fq'>if</span><span class='p'>(</span><span class='fq'>getopt</span><span class='p'>(</span>nthreads<span class='p'>)</span><span class='o'>&gt;</span><span class='n'>1</span><span class='p'>)</span> <span class='fq'>ret</span> <span class='c2'>;;allow single instance</span><br />
<span class='dir'>#compile</span> <span class='s'>"__TcpSocket"</span><br />
<br />
<span class='t'>str</span> dd<span class='o'>=</span><br />
<span class='s'>;BEGIN DIALOG</span><br />
<span class='s'>;0 "" 0x90C80AC8 0x0 0 0 230 116 "TCP server"</span><br />
<span class='s'>;4 Static 0x54000000 0x0 170 8 22 12 "Port"</span><br />
<span class='s'>;5 Edit 0x54032000 0x200 196 6 32 14 "port"</span><br />
<span class='s'>;6 Button 0x54032000 0x0 6 6 48 14 "Start"</span><br />
<span class='s'>;7 Button 0x5C032000 0x0 58 6 48 14 "Stop"</span><br />
<span class='s'>;14 Static 0x54000000 0x0 6 30 36 12 "Response"</span><br />
<span class='s'>;15 Edit 0x54231044 0x200 46 28 182 85 "res"</span><br />
<span class='s'>;END DIALOG</span><br />
<span class='s'>;DIALOG EDITOR: "" 0x2030300 "*" "" ""</span><br />
<br />
<span class='t'>str</span> controls <span class='o'>=</span> <span class='s'>"5 15"</span><br />
<span class='t'>str</span> e5por e15res<br />
e5por<span class='o'>=</span><span class='n'>5033</span><br />
<br />
<span class='c'>;minimal HTTP response with no data.</span><br />
<span class='c'>;e15res="HTTP/1.1 200 OK[][]"</span><br />
<br />
<span class='c'>;HTTP response with some data.</span><br />
e15res<span class='o'>=</span><span class='s'>"HTTP/1.1 200 OK[]Content-Type: text/plain[]Content-Length: 4[][]DATA"</span><br />
<br />
<span class='fq'>if</span><span class='p'>(</span><span class='o'>!</span><span class='fu'>ShowDialog</span><span class='p'>(</span>dd <span class='o'>&amp;</span><span class='fu'>sub.DlgProc</span> <span class='o'>&amp;</span>controls <span class='n'>0</span> <span class='n'>0</span> <span class='n'>0</span> <span class='n'>0</span> <span class='n'>0</span> <span class='n'>0</span> <span class='n'>100</span><span class='p'>))</span> <span class='fq'>ret</span><br />
<br />
<br />
<span class='dir'>#sub</span> DlgProc<br />
<span class='fq'>function</span><span class='o'>#</span> hDlg message wParam lParam<br />
<span class='t'>TcpSocket</span><span class='o'>-</span> t_server<br />
<span class='fq'>sel</span> message<br />
<span class='i'>,</span><span class='fq'>case</span> <span class='d'>WM_INITDIALOG</span><br />
<span class='i'>,</span><span class='fq'>case</span> <span class='d'>WM_DESTROY</span><br />
<span class='i'>,</span>t_server.<span class='fu'>Close</span><br />
<span class='i'>,</span><span class='fq'>case</span> <span class='d'>WM_COMMAND</span> <span class='fq'>goto</span> messages2<br />
<span class='fq'>ret</span><br />
<span class='c'>;messages2</span><br />
<span class='fq'>sel</span> wParam<br />
<span class='i'>,</span><span class='fq'>case</span> <span class='n'>6</span> <span class='c2'>;;Start</span><br />
<span class='i'>,</span>t_server.<span class='fu'>ServerStart</span><span class='p'>(</span><span class='fd'>GetDlgItemInt</span><span class='p'>(</span>hDlg <span class='n'>5</span> <span class='n'>0</span> <span class='n'>0</span><span class='p'>)</span> <span class='o'>&amp;</span><span class='fu'>sub.OnClientConnected</span> hDlg <span class='n'>1</span><span class='p'>)</span><br />
<span class='i'>,</span><span class='fd'>EnableWindow</span> lParam <span class='n'>0</span><br />
<span class='i'>,</span><span class='fd'>EnableWindow</span> <span class='fq'>id</span><span class='p'>(</span><span class='n'>7</span> hDlg<span class='p'>)</span> <span class='n'>1</span><br />
<span class='i'>,</span><br />
<span class='i'>,</span><span class='fq'>case</span> <span class='n'>7</span> <span class='c2'>;;Stop</span><br />
<span class='i'>,</span>t_server.<span class='fu'>Close</span><br />
<span class='i'>,</span><span class='fd'>EnableWindow</span> lParam <span class='n'>0</span><br />
<span class='i'>,</span><span class='fd'>EnableWindow</span> <span class='fq'>id</span><span class='p'>(</span><span class='n'>6</span> hDlg<span class='p'>)</span> <span class='n'>1</span><br />
<span class='fq'>ret</span> <span class='n'>1</span><br />
<br />
<span class='fq'>err</span><span class='o'>+</span> <span class='fq'>out</span> _error.description<br />
<br />
<br />
<span class='dir'>#sub</span> OnClientConnected<br />
<span class='fq'>function</span> <span class='t'>TcpSocket</span><span class='o'>&amp;</span>client <span class='o'>&#36;</span>clientIp hDlg <span class='o'>!*</span>reserved<br />
<br />
<span class='c'>;This function is called in server side, when a client connects.</span><br />
<span class='c'>;This function runs in separate thread for each client connection.</span><br />
<br />
<span class='fq'>out</span> <span class='o'>F</span><span class='s'>"&lt;&gt;&lt;z 0xc0ffff&gt;SERVER: client connected:&lt;/z&gt; {</span>clientIp<span class='s'>}"</span><br />
<br />
<span class='t'>str</span> s<br />
client.<span class='fu'>Receive</span><span class='p'>(</span>s <span class='n'>1000</span><span class='p'>)</span><br />
<span class='fq'>out</span> <span class='o'>F</span><span class='s'>"&lt;&gt;&lt;Z 0xc0ffff&gt;SERVER: client request:&lt;/Z&gt;"</span><br />
<span class='fq'>out</span> s<br />
<br />
s.<span class='fq'>getwintext</span><span class='p'>(</span><span class='fq'>id</span><span class='p'>(</span><span class='n'>15</span> hDlg<span class='p'>))</span><br />
client.<span class='fu'>Send</span><span class='p'>(</span>s<span class='p'>)</span><br />
<br />
<span class='fq'>err</span><span class='o'>+</span> <span class='fq'>out</span> _error.description</code></div></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/qm/qml.png" title="Quick Macros file" border="0" alt=".qml" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=730" target="_blank" title="">TcpSocket.qml</a> (Size: 19 KB / Downloads: 704)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Function <span style="font-weight: bold;" class="mycode_b">dialog_HTTP_server_for_Tasker</span> <span/><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code><span class='c'>;This is a simple HTTP server that can receive and return data.</span><br />
<span class='c'>;Can be used for example to launch QM macros from other computers and smartphones.</span><br />
<span class='c'>;Below is instructions how to send commands from an Android mobile device with Tasker.</span><br />
<br />
<span class='c'>;On your Android device install Tasker app. It is for sending HTTP requests. Costs &#36;2.99. Or find a free app that can send HTTP requests.</span><br />
<span class='c'>;In Tasker create new task and add action HTTP Post.</span><br />
<span class='c'>;;;Set field Server:Port, like 192.168.8.123:5033. As Server, use one of IP addresses that you can see in QM Options -&gt; Network. The 5033 is server's port that is used in this macro, see below.</span><br />
<span class='c'>;;;Set field Data / File. Can be any text or variable or file. At first just for testing.</span><br />
<span class='c'>;;;Set field Content Type, like text/plain.</span><br />
<span class='c'>;;;Optionally set field Output File, like Documents/test1.txt. Only if you want to receive some data from QM.</span><br />
<br />
<span class='c'>;Run this function and in the dialog click button Start.</span><br />
<span class='c'>;Run the Tasker task.</span><br />
<span class='c'>;;;In QM output you should see Tasker's HTTP POST request that includes data at the end.</span><br />
<span class='c'>;;;If was set Output File, the task creates the file. It contains text DATA.</span><br />
<br />
<br />
<span class='fq'>if</span><span class='p'>(</span><span class='fq'>getopt</span><span class='p'>(</span>nthreads<span class='p'>)</span><span class='o'>&gt;</span><span class='n'>1</span><span class='p'>)</span> <span class='fq'>ret</span> <span class='c2'>;;allow single instance</span><br />
<span class='dir'>#compile</span> <span class='s'>"__TcpSocket"</span><br />
<br />
<span class='t'>str</span> dd<span class='o'>=</span><br />
<span class='s'>;BEGIN DIALOG</span><br />
<span class='s'>;0 "" 0x90C80AC8 0x0 0 0 230 116 "TCP server"</span><br />
<span class='s'>;4 Static 0x54000000 0x0 170 8 22 12 "Port"</span><br />
<span class='s'>;5 Edit 0x54032000 0x200 196 6 32 14 "port"</span><br />
<span class='s'>;6 Button 0x54032000 0x0 6 6 48 14 "Start"</span><br />
<span class='s'>;7 Button 0x5C032000 0x0 58 6 48 14 "Stop"</span><br />
<span class='s'>;14 Static 0x54000000 0x0 6 30 36 12 "Response"</span><br />
<span class='s'>;15 Edit 0x54231044 0x200 46 28 182 85 "res"</span><br />
<span class='s'>;END DIALOG</span><br />
<span class='s'>;DIALOG EDITOR: "" 0x2030300 "*" "" ""</span><br />
<br />
<span class='t'>str</span> controls <span class='o'>=</span> <span class='s'>"5 15"</span><br />
<span class='t'>str</span> e5por e15res<br />
e5por<span class='o'>=</span><span class='n'>5033</span><br />
<br />
<span class='c'>;minimal HTTP response with no data.</span><br />
<span class='c'>;e15res="HTTP/1.1 200 OK[][]"</span><br />
<br />
<span class='c'>;HTTP response with some data.</span><br />
e15res<span class='o'>=</span><span class='s'>"HTTP/1.1 200 OK[]Content-Type: text/plain[]Content-Length: 4[][]DATA"</span><br />
<br />
<span class='fq'>if</span><span class='p'>(</span><span class='o'>!</span><span class='fu'>ShowDialog</span><span class='p'>(</span>dd <span class='o'>&amp;</span><span class='fu'>sub.DlgProc</span> <span class='o'>&amp;</span>controls <span class='n'>0</span> <span class='n'>0</span> <span class='n'>0</span> <span class='n'>0</span> <span class='n'>0</span> <span class='n'>0</span> <span class='n'>100</span><span class='p'>))</span> <span class='fq'>ret</span><br />
<br />
<br />
<span class='dir'>#sub</span> DlgProc<br />
<span class='fq'>function</span><span class='o'>#</span> hDlg message wParam lParam<br />
<span class='t'>TcpSocket</span><span class='o'>-</span> t_server<br />
<span class='fq'>sel</span> message<br />
<span class='i'>,</span><span class='fq'>case</span> <span class='d'>WM_INITDIALOG</span><br />
<span class='i'>,</span><span class='fq'>case</span> <span class='d'>WM_DESTROY</span><br />
<span class='i'>,</span>t_server.<span class='fu'>Close</span><br />
<span class='i'>,</span><span class='fq'>case</span> <span class='d'>WM_COMMAND</span> <span class='fq'>goto</span> messages2<br />
<span class='fq'>ret</span><br />
<span class='c'>;messages2</span><br />
<span class='fq'>sel</span> wParam<br />
<span class='i'>,</span><span class='fq'>case</span> <span class='n'>6</span> <span class='c2'>;;Start</span><br />
<span class='i'>,</span>t_server.<span class='fu'>ServerStart</span><span class='p'>(</span><span class='fd'>GetDlgItemInt</span><span class='p'>(</span>hDlg <span class='n'>5</span> <span class='n'>0</span> <span class='n'>0</span><span class='p'>)</span> <span class='o'>&amp;</span><span class='fu'>sub.OnClientConnected</span> hDlg <span class='n'>1</span><span class='p'>)</span><br />
<span class='i'>,</span><span class='fd'>EnableWindow</span> lParam <span class='n'>0</span><br />
<span class='i'>,</span><span class='fd'>EnableWindow</span> <span class='fq'>id</span><span class='p'>(</span><span class='n'>7</span> hDlg<span class='p'>)</span> <span class='n'>1</span><br />
<span class='i'>,</span><br />
<span class='i'>,</span><span class='fq'>case</span> <span class='n'>7</span> <span class='c2'>;;Stop</span><br />
<span class='i'>,</span>t_server.<span class='fu'>Close</span><br />
<span class='i'>,</span><span class='fd'>EnableWindow</span> lParam <span class='n'>0</span><br />
<span class='i'>,</span><span class='fd'>EnableWindow</span> <span class='fq'>id</span><span class='p'>(</span><span class='n'>6</span> hDlg<span class='p'>)</span> <span class='n'>1</span><br />
<span class='fq'>ret</span> <span class='n'>1</span><br />
<br />
<span class='fq'>err</span><span class='o'>+</span> <span class='fq'>out</span> _error.description<br />
<br />
<br />
<span class='dir'>#sub</span> OnClientConnected<br />
<span class='fq'>function</span> <span class='t'>TcpSocket</span><span class='o'>&amp;</span>client <span class='o'>&#36;</span>clientIp hDlg <span class='o'>!*</span>reserved<br />
<br />
<span class='c'>;This function is called in server side, when a client connects.</span><br />
<span class='c'>;This function runs in separate thread for each client connection.</span><br />
<br />
<span class='fq'>out</span> <span class='o'>F</span><span class='s'>"&lt;&gt;&lt;z 0xc0ffff&gt;SERVER: client connected:&lt;/z&gt; {</span>clientIp<span class='s'>}"</span><br />
<br />
<span class='t'>str</span> s<br />
client.<span class='fu'>Receive</span><span class='p'>(</span>s <span class='n'>1000</span><span class='p'>)</span><br />
<span class='fq'>out</span> <span class='o'>F</span><span class='s'>"&lt;&gt;&lt;Z 0xc0ffff&gt;SERVER: client request:&lt;/Z&gt;"</span><br />
<span class='fq'>out</span> s<br />
<br />
s.<span class='fq'>getwintext</span><span class='p'>(</span><span class='fq'>id</span><span class='p'>(</span><span class='n'>15</span> hDlg<span class='p'>))</span><br />
client.<span class='fu'>Send</span><span class='p'>(</span>s<span class='p'>)</span><br />
<br />
<span class='fq'>err</span><span class='o'>+</span> <span class='fq'>out</span> _error.description</code></div></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.libreautomate.com/forum/images/qm/qml.png" title="Quick Macros file" border="0" alt=".qml" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=730" target="_blank" title="">TcpSocket.qml</a> (Size: 19 KB / Downloads: 704)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
	</channel>
</rss>