Using Registry Editor, browse to the following value in the registry:
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
and modify it to be 9. Note: Chr(9) = TAB
To Undo it modify the value to be 0. The following code will toggle the Command Completion Feature between OFF & ON (Tab)
Code:
UNIX Shell "Command Completion" feature for WINDOWS.
This scripts toggles the feature (affects CURRENT User) everytime run.
Change RootKey to "HKEY_LOCAL_MACHINE" for applying a Global change.
*/
Rootkey :="HKEY_CURRENT_USER"
SubKey :="Software\Microsoft\Command Processor"
RegRead,cChar,%RootKey%,%SubKey%,CompletionChar
IfEqual,cChar,0,RegWrite,REG_DWORD,%RootKey%,%SubKey%,CompletionChar,9
IfEqual,cChar,9,RegWrite,REG_DWORD,%RootKey%,%SubKey%,CompletionChar,0
RegRead,cChar,%RootKey%,%SubKey%,CompletionChar
MsgBox,64,Command Completion feature, Completion Character = %cChar%
Process Listing - Using third party DLL!
Quote: Foreword:
A much simpler & effective code ( 8 lines only) for retrieving
the Process List (from the Task Manager) has been posted by Mr.Laszlo in this same topic:
http://www.autohotkey.com/forum/viewtopic.php?p=81207#81207
A pure AHK solution by calling Windows API functions has been posted by Titan in this same topic:
http://www.autohotkey.com/forum/viewtopic.php?p=81564#81564
Note: If you are using Windows 2000 and no processes are returned, then add #NoEnv to be the first line in Titan's script. I faced this problem & it took me many hours before I found the truth. Code (Expand):
Demonstration code for third party DLL : KJLPROC.DLL
This script creates a ListView of running processes.
Tested only in Windows 2000.
Title : Easy Process Listing with Third Party DLL.
Author : A.N.Suresh Kumar aka "Goyyah"
Created Date : 30-Sep-2006
Last Modfied : 30-Sep-2006
Download Information:
ZIP File : http://www.kjlsoftware.com/demos/kjlproc.zip [30K]
WebSite : http://www.kjlsoftware.com/freeware.html
Backup : http://autohotkey.net/~goyyah/3PDLL/Process/KJL/kjlproc.zip
Only DLL : http://autohotkey.net/~goyyah/3PDLL/Process/KJL/kjlproc.dll [52K]
License : http://autohotkey.net/~goyyah/3PDLL/Process/KJL/SoftwareLicense.txt
SnapShot : http://autohotkey.net/~goyyah/3PDLL/Process/KJL/proclist.png
*/
#NoTrayIcon
Menu, Tray, Icon, User32.dll, 1
Gui, +AlwaysOnTop
Gui, Margin, 1, 1
Gui, Add, ListView, w640 h400, Process|PID|Win ID|Win Title|Priority
DataPointer := DllCall("kjlproc.dll\KJLPList", Int,1)
/*
The above DllCall returns a pointer to memory address of
the actual text data. The following lines extracts the data
from the pointer.
*/
Slen := DllCall("lstrlen", UInt, DataPointer)
VarSetCapacity(ProcessList, Slen)
DllCall("lstrcpy", Str, ProcessList, UInt, DataPointer)
/*
My sincere thanks to Philippe Lhoste aka PhiLho for above code.
See: http://www.autohotkey.com/forum/viewtopic.php?p=77558#77558
*/
Ctr=1
Loop, PARSE, ProcessList, |
{
StringSplit, Field, A_LoopField, ^
IfEqual, Field1, _Total.exe, Continue
Field5 := GetPriority(Field2)
LV_Add("", Field1, Field2, Field3, Field4, Field5)
Ctr++
}
LV_ModifyCol()
Gui, Add, StatusBar, ,Total Process Running: %Ctr%
Gui, Show, , ListView of Processes [ KJLPROC.DLL ]
Return
/*
GetPriority() has been posted at the following URL:
http://www.autohotkey.com/forum/viewtopic.php?p=80548#80548
*/
GetPriority(PID=0) {
IfLessOrEqual, PID, 0, Return, "Error!"
hProcess := DllCall("OpenProcess", Int,1024, Int,0, Int,PID)
Priority := DllCall("GetPriorityClass", Int,hProcess)
DllCall("CloseHandle", Int,hProcess)
IfEqual, Priority, 64 , Return, "Low"
IfEqual, Priority, 16384, Return, "BelowNormal"
IfEqual, Priority, 32 , Return, "Normal"
IfEqual, Priority, 32768, Return, "AboveNormal"
IfEqual, Priority, 128 , Return, "High"
IfEqual, Priority, 256 , Return, "Realtime"
Return ""
}
GuiClose:
GuiEscape:
ExitApp
Return
Remarks: Copy / Paste / Try example :
Code:
Slen := DllCall("lstrlen", UInt, DataPointer)
VarSetCapacity(ProcessList, Slen)
DllCall("lstrcpy", Str, ProcessList, UInt, DataPointer)
FileAppend, %ProcessList%, proc.txt
MsgBox, 64,List of Process, %ProcessList%Edit: 11-Nov-2006
Quote:
To ascertain which processes are GUI based one may use the IsGUI() Code:
MsgBox, % A
Return
IsGUI(process="") {
Process, Exist, %process%
PID := ErrorLevel
IfLessOrEqual, PID, 0, Return, "Process:%process% does not exist!"
hProcess := DllCall("OpenProcess", Int,1024, Int,0, Int,PID)
GuiObjects := DllCall("GetGuiResources", Int,hProcess, Int,1)
DllCall("CloseHandle", Int,hProcess)
Return 1-!GuiObjects ; Return 1 if process has GUI, else 0
}
GetGuiResources maybe used with Titan's Process Listing solution ( also available in AHK Documentation) to determine whether a process is GUI based. However, you cannot use it to verify an AHK process, because even a non-GUI AHK script has a GUI which can be viewed by double-clicking the tray icon.
See MSDN : GetGuiResources