PDA

View Full Version : Userinit replacement for Win7...



NEOAethyr
01-26-2011, 12:55 PM
This script is src for autohotkey.
You "need the compiled exe" for this to work as a replacement for userinit.exe.
The ahk script that this code is, won't work in the src form at that stage of bootup.
You can copy the exe anywhere, but to use it you should change this:



[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"Userinit"="C:\\Windows\\system32\\userinit.exe,"


Update 3, 01/29/11:
Added notrayincon and fixed loading of uxsms.
I used winwait on the uxsms loading part to ensure it was done correctly on every boot on diff systems.
I may have to do the same for some of the reg key's later, programs like network indicator monitor don't work right unless explorer has been loaded up 100% before it loads up.

This program does not stay resident, and bootup speed has been increased from ver2.

Update 4, 02/02/11:
Fixed up loading file types for the programs\startup folder.
Now it only loads up: com, exe, bat, vbs, js and ahk files.
(Before it would load anything other then the desktop.ini file)

I still have to do the same for the other startup sections.
And add some sort of delay for loading these sections, it's still to fast and screws up "some" programs at startup (my network monitor in the post below and "network indicator monitor")

Update 5x..., 04/23/11
Been a while, I updated this along time ago, I figured I'de post the new code.
Can't remember what I changed though, probably some win2k3 fixes and such.




#NoTrayIcon
#SingleInstance, Force
#MaxMem 1
#MaxThreads 3

if A_OSVersion = WIN_7
{
Loop, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows\CurrentVersion\RunServi cesOnce, 0, 0
{
if A_LoopRegType = REG_SZ
{
RegRead, OutputVar
Run "%OutputVar%",, UseErrorLevel
if ErrorLevel = ERROR
{
}
}
}

Loop, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows\CurrentVersion\RunServi ces, 0, 0
{
if A_LoopRegType = REG_SZ
{
RegRead, OutputVar
Run "%OutputVar%",, UseErrorLevel
if ErrorLevel = ERROR
{
}
}
}

Run "%windir%\explorer.exe"
;Sleep, 1000

;Fix for bypassing Stock Userinit...
RunWait %ComSpec% /C "net stop UxSms",, Hide
Run %ComSpec% /C "net start UxSms",, Hide

Loop, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce, 0, 0
{
if A_LoopRegType = REG_SZ
{
RegRead, OutputVar
Run "%OutputVar%",, UseErrorLevel
if ErrorLevel = ERROR
{
}
}
}

Loop, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows\CurrentVersion\Run, 0, 0
{
if A_LoopRegType = REG_SZ
{
RegRead, OutputVar
Run "%OutputVar%",, UseErrorLevel
if ErrorLevel = ERROR
{
}
}
}

Loop, HKEY_CURRENT_USER, Software\Microsoft\Windows\CurrentVersion\Run, 0, 0
{
if A_LoopRegType = REG_SZ
{
RegRead, OutputVar
Run "%OutputVar%",, UseErrorLevel
if ErrorLevel = ERROR
{
}
}
}


FileList =
Loop, %USERPROFILE%\AppData\Roaming\Microsoft\Windows\St art Menu\Programs\Startup\*.*
{
FileList = %FileList%%A_LoopFileName%`n
Sort, FileList, R
Loop, parse, FileList, `n
{
if (A_LoopFileExt = "EXE" || A_LoopFileExt = "COM" || A_LoopFileExt = "BAT" || A_LoopFileExt = "VBS" || A_LoopFileExt = "JS" || A_LoopFileExt = "AHK")
{
; MsgBox "%USERPROFILE%\AppData\Roaming\Microsoft\Windows\St art Menu\Programs\Startup\%A_LoopField%"
Run "%USERPROFILE%\AppData\Roaming\Microsoft\Windows\St art Menu\Programs\Startup\%A_LoopField%"
}
break
}
}

Loop, HKEY_CURRENT_USER, Software\Microsoft\Windows\CurrentVersion\RunOnce, 0, 0
{
if A_LoopRegType = REG_SZ
{
RegRead, OutputVar
Run "%OutputVar%",, UseErrorLevel
if ErrorLevel = ERROR
{
}
}
}
RunWait %ComSpec% /C "SetSystemFileCacheSize.exe flush", %APPDATA%\Microsoft\Internet Explorer\Profile\Scripts\, Hide
RunWait %ComSpec% /C "SetSystemFileCacheSize.exe off 16", %APPDATA%\Microsoft\Internet Explorer\Profile\Scripts\, Hide
RunWait %ComSpec% /C "SetSystemFileCacheSize.exe flush", %APPDATA%\Microsoft\Internet Explorer\Profile\Scripts\, Hide
}
else if A_OSVersion = WIN_2003
{
;win2k3 doesn't need extra code to parse startup stuffs, except for the extra file ext's...

Run "%windir%\explorer.exe"
;Sleep, 1000

;odd issue..., the loop file ext thingy is not working for some unknown reason...
;so for now, screw it, run all ext's
FileList =
Loop, %USERPROFILE%\Start Menu\Programs\Startup\*.*
{
FileList = %FileList%%A_LoopFileName%`n
Sort, FileList, R
Loop, parse, FileList, `n
{
; if (A_LoopFileExt = "EXE" || A_LoopFileExt = "COM" || A_LoopFileExt = "BAT" || A_LoopFileExt = "VBS" || A_LoopFileExt = "JS" || A_LoopFileExt = "AHK")
if (A_LoopFileExt = "AHK")
{
; MsgBox "%USERPROFILE%\Start Menu\Programs\Startup\%A_LoopField%"
Run "%USERPROFILE%\Start Menu\Programs\Startup\%A_LoopField%"
}
break
}
}

;Issue with win2k3, access denide error if I run the code below before this...
RunWait %ComSpec% /C "SetSystemFileCacheSize.exe flush", %APPDATA%\Microsoft\Internet Explorer\Profile\Scripts\, Hide
RunWait %ComSpec% /C "SetSystemFileCacheSize.exe off 16", %APPDATA%\Microsoft\Internet Explorer\Profile\Scripts\, Hide
RunWait %ComSpec% /C "SetSystemFileCacheSize.exe flush", %APPDATA%\Microsoft\Internet Explorer\Profile\Scripts\, Hide

;; installing deamontools doesn't work I dn which caused it

RunWait %ComSpec% /C "pskill smss.exe",, UseErrorLevel
if ErrorLevel = ERROR
{
}

;; Now is my chance to kill RpcSs
;; Find the PID for RpcSs and kill it
;; note this screws up paste, no longer works, greyed out
;; if I can redo the menu entry and remove this current one..., then maybe I can ungrey it
;tlst-mod|FINDSTR "^5.. svchost.exe$" > %TEMP%\PID-TEMP.txt
;SET /P PID_Temp=<%TEMP%\PID-TEMP.txt
;pskill %PID_Temp%

;; Print screen still works and so does paste in paint
;; the only thing that doesn't work is paste with files
;; because copy/paste in text files with text works fine
;; note also that delete files doesn't work ^^
;; but the cmd ver of del does work...
;; possible to replace, but...
;; I need to change the whatever it is that sets the generic cmds file each file type...
;; that might be alot of files, I dn how many it affects
;; but i think it might affect all ^^
;; then again, the right click context menu ver has allways been crappy compared to the cmd line ver anyways with certain files.
;; if I replaced it it would fix 2 things at once :)

;; how to do I use a var from multible batches and have it still work :\ ?
;; I guess the only way is with a temp file like the temp pid thing is right now unfortunately
;; so...
;; copy =
;; ECHO %1 > %TEMP%\Temp.txt
;; paste =
;; copy < %TEMP%\Temp.txt %D
;;copy = get var1 in batch
;;paste = copy var1 in current folder like cmd from here or something

;; Causes you to need to use Ctrl_Alt_Del to Restart (Shutdown and logoff cmd line cmd's works but restart doesn't)
;; Bitspirit also complains that it's not able to auto shutdown
;; this also seems to remove my rights for shutting down certain key system services from the taskmgr and such

RunWait %ComSpec% /C "pskill lsass.exe",, UseErrorLevel
if ErrorLevel = ERROR
{
}

Sleep, 1000

;prevent shutdown from the above work...
Run %ComSpec% /C "shutdown.exe /a",, UseErrorLevel
if ErrorLevel = ERROR
{
}
}

NEOAethyr
01-28-2011, 07:29 PM
A network status monitor tray icon thingy...

Update 3, 01/29/11:
Added tray icon tooltip.
Added port viewer via tcpviewer (hard set location for now).
Added change ip command.

Added F12 hotkey function, hide taskbar -> unhide taskbar.

Next steps:
Add ini support.
Add change gateway support.
Add more menu options.
Fix up/down rate and total value to be 100% correct, close enough for now but not 100%.
Fix tooltip display of chnaging ip status, sometimes doesn't show up when changing ip.

Integrate userinit replacement support and add options to enable and disable that mode, etc etc.

Plus alot more.
Once I'm 100% satisfied, I'll try to convert to asm.


Update 4, 01/29/2011:
Got ini file read support, some tray icon context menu stuffs.
Etc etc...
Oh and the start menu/toolbar mod thing works alot better not but still isn't quite 100%.

Update 5, 01/30,2011:
Greatly reduced latency of the network status monitor.
It's now much faster then even the "network indicator monitor" program.
Improved the taskbar toolbar mod, it's more responsive and no longer gives you probs with the ctrl key getting stuck on, at least as far as I can tell.
Added new mod, disable aero peek, which of course is setable from the tray context menu.
Added network connections link to the tray context menu.

I have a few more things to do with it.
And afterwards it's convert to asm time, soons...

Update 6, 02/02/11:
Added keyboard led network status support, selectable from context menu.
Fixed giant mem leak, ended up being the internal variable %A_IPAddress%, so for now my program can't get your ip addy.
I will work on that, but I will not be using the autohotkey internal variable for that anymore, not that one.
Added double left click default to tray icon, opens port monitor program.
Cleaned up some of the syntax of the code.
Some more speed ups and less mem usage, well it is getting bigger as I add more things but I reduced the code a bit for some things and fixed that mem leak.

Update 7x... 04/23/11
I redid the code along time ago, today I comment a part out of it so I could test some stuff to the side too.
Did some tweaking for win2k3 and some speedups.
Might of taken the win2k3 code out of it though, not sure.

Update 8, 04/26/11.
Some code cleanups, and some improvements.
Re-enable ip address stuff and so on, and minimized mem leaked associated with that.
Also redid opera and firefix titlebar mod for single column and double column sized taskbar.
Added taskbar single column sized mod (right or left side of screen).
Etc etc.

Update 9, 05/14/11.
Added new setting called "User Timer QSR Max".
I didn't add every value that it could be set to as of yet ;), soon though.
When ran the program auto sets to 0.5ms, I'lll have it parse the ini for info on it later instead of just setting it to what I want on startup.
I have a few more ideas to integrate into this program so expect a few more ver's to come :).

The src inspiration for the network monitor code here is from: (2nd code box...)
http://www.autohotkey.com/forum/topic18033.html&sid=c934ab5177ed1825618e795b11584371

The src inspiration for the taskbar hide/show code is from here (last code box on 1st page):
http://www.autohotkey.com/forum/topic28385.html&sid=f16695a859d2cac33569d56ffd7b8793

Src inspiration for keyboard led code form here (1st post):
http://www.autohotkey.com/forum/topic10532.html




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; NEO_nTray (NEO's Network Tray Tool)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Notes:
;
; %A_IPAddress1% Leaks massive amounts of memory, DO NOT use it!!!

;Code Timer for Debugging...
;DllCall("QueryPerformanceCounter", "Int64*", CounterBefore) ;External Var, CPU Tick Timer
;StartTime := A_TickCount ;Internal Var, MS Timer
;Sleep 1000
;ElapsedTime_ms := (A_TickCount - StartTime)
;DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
;ElapsedTime_pc := (CounterAfter - CounterBefore)
;ToolTip, %ElapsedTime_pc% Ticks`n%ElapsedTime_ms% ms

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Entry Point
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#Persistent
#SingleInstance, Force
#MaxMem 1
#MaxThreads 3
SetBatchLines -1
Process, Priority,, BelowNormal
Menu, Tray, NoStandard ;Disable Standard AHK Menu Entries
SetTitleMatchMode, 2

GoSub Init

StartTime := A_TickCount ;Internal Var, MS Timer
ElapsedTime_ms := (A_TickCount - StartTime)

SetTimer, Burn_Cycle, %Main_Loop_Timing%
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Functions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;User Timer Max Quantum Slice Resolution
;Quantum timer resolution
Set_User_Timer_QSR_05:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 5000) ;0.500 ms
return

Set_User_Timer_QSR_1:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 10000) ;1.000 ms
return

Set_User_Timer_QSR_10:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 100000) ;10.000 ms
return

Set_User_Timer_QSR_156:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 156000) ;15.600 ms
return


Set_Tray_Icons_Default:
Network_Icons_Use_Default = Enable
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 145
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 132
return

Set_Tray_Icons_Custom:
Network_Icons_Use_Default = Disable
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 132
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 145
return


Set_Network_Use_Keyboard_Leds_Disable:
Network_Use_Keyboard_Leds = Disable
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 132
GetKeyState, KeyState, ScrollLock, T ;Bug fix for threading issues, so non of the leds end up getting stuck on...
if KeyState = U
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
;GetKeyState, KeyState, NumLock, T
;if KeyState = U
;{
; KeyboardLED(2, "Off")
;}
return

Set_Network_Use_Keyboard_Leds_Enable:
Network_Use_Keyboard_Leds = Enable
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 145
return


Set_QuickLaunch_Mod_Disable:
QuickLaunch_Mod = Disable
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 132
return

Set_QuickLaunch_Mod_Enable:
QuickLaunch_Mod = Enable
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 145
return


Set_Aero_Peek_Disable:
Aero_Peek = Disable
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 132
Control, Disable,, TrayShowDesktopButtonWClass1, ahk_class Shell_TrayWnd
return

Set_Aero_Peek_Enable:
Aero_Peek = Enable
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 145
Control, Enable,, TrayShowDesktopButtonWClass1, ahk_class Shell_TrayWnd
return


Win7_Taskbar_Mod:
RunWait %ComSpec% /C "net stop UxSms",, Hide ;Stop UxSms
DetectHiddenWindows, On ;Enable Taskbar Autohide
VarSetCapacity(APPBARDATA, 36, 0) ;Var mem limit
NumPut((ABS_ALWAYSONTOP := 0x2) | (ABS_AUTOHIDE := 0x1), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)
WinHide ahk_class Shell_TrayWnd
RunWait %ComSpec% /C "net start UxSms",, Hide ;Restart UxSms
NumPut((ABS_ALWAYSONTOP := 0x2), APPBARDATA, 32, "UInt") ;Disable Taskbar Autohide
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)
WinShow ahk_class Shell_TrayWnd
Reload ;Needed to refresh the desktop width var...
return


;;; Network Monitor Functions:

GetIfTable(ByRef tb, Border = True)
{
nSize := 4 + 860 * GetNumberOfInterfaces() + 8 ;Var mem limit calc
VarSetCapacity(tb, nSize) ;Var mem limit
Return DllCall("iphlpapi\GetIfTable", "Uint", &tb, "UintP", nSize, "int", Border)
}

GetNumberOfInterfaces()
{
DllCall("iphlpapi\GetNumberOfInterfaces", "UintP", nIf)
Return nIf
}

DecodeInteger(ptr)
{
Return *ptr | *++ptr << 8 | *++ptr << 16 | *++ptr << 24
}


;notes:
;typedef struct _MIB_IFROW {
; WCHAR wszName[MAX_INTERFACE_NAME_LEN];
; DWORD dwIndex;
; DWORD dwType;
; DWORD dwMtu;
; DWORD dwSpeed;
; DWORD dwPhysAddrLen;
; BYTE bPhysAddr[MAXLEN_PHYSADDR];
; DWORD dwAdminStatus;
; DWORD dwOperStatus;
; DWORD dwLastChange;
; DWORD dwInOctets;
; DWORD dwInUcastPkts;
; DWORD dwInNUcastPkts;
; DWORD dwInDiscards;
; DWORD dwInErrors;
; DWORD dwInUnknownProtos;
; DWORD dwOutOctets;
; DWORD dwOutUcastPkts;
; DWORD dwOutNUcastPkts;
; DWORD dwOutDiscards;
; DWORD dwOutErrors;
; DWORD dwOutQLen;
; DWORD dwDescrLen;
; BYTE bDescr[MAXLEN_IFDESCR];
;} MIB_IFROW, *PMIB_IFROW;


;;; Keyboard LED Functions:

KeyboardLED(LEDvalue, Cmd) ;LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4, Cmd = On / Off
{
Static h_device
If ! h_device ;initialise
{
device =\Device\KeyBoardClass0
SetUnicodeStr(fn, device)
h_device := NtCreateFile(fn, 0 + 0x00000100 + 0x00000080 + 0x00100000, 1, 1, 0x00000040 + 0x00000020, 0)
}

VarSetCapacity(output_actual, 4, 0)
input_size = 4
VarSetCapacity(input, input_size, 0)

If Cmd = On ;forces all choosen LED's to ON (LEDvalue = 0 -> LED's according to keystate)
{
KeyLED := LEDvalue | (GetKeyState("ScrollLock", "T") + 2 * GetKeyState("NumLock", "T") + 4 * GetKeyState("CapsLock", "T"))
}
If Cmd = Off ;forces all choosen LED's to OFF (LEDvalue = 0 -> LED's according to keystate)
{
LEDvalue := LEDvalue ^ 7
KeyLED := LEDvalue & (GetKeyState("ScrollLock", "T") + 2 * GetKeyState("NumLock", "T") + 4 * GetKeyState("CapsLock", "T"))
}
;EncodeInteger(KeyLED, 1, &input, 2) ;input bit pattern (KeyLED): bit 0 = scrolllock, bit 1 = numlock, bit 2 = capslock
input := Chr(1) Chr(1) Chr(KeyLED)
input := Chr(1)
success := DllCall("DeviceIoControl", "uint", h_device, "uint", CTL_CODE(0x0000000B, 2, 0, 0), "uint", &input, "uint", input_size, "uint", 0, "uint", 0, "uint", &output_actual, "uint", 0)
}

CTL_CODE(p_device_type, p_function, p_method, p_access)
{
Return, (p_device_type << 16) | (p_access << 14) | (p_function << 2) | p_method
}

NtCreateFile(ByRef wfilename, desiredaccess, sharemode, createdist, flags, fattribs)
{
VarSetCapacity(fh, 4, 0)
VarSetCapacity(objattrib, 24, 0)
VarSetCapacity(io, 8, 0)
VarSetCapacity(pus, 8)
uslen := DllCall("lstrlenW", "str", wfilename) * 2
InsertInteger(uslen, pus, 0, 2)
InsertInteger(uslen, pus, 2, 2)
InsertInteger(&wfilename, pus, 4)
InsertInteger(24, objattrib, 0)
InsertInteger(&pus, objattrib, 8)
status := DllCall("ntdll\ZwCreateFile", "str", fh, "UInt", desiredaccess, "str", objattrib, "str", io, "UInt", 0, "UInt", fattribs, "UInt", sharemode, "UInt", createdist, "UInt", flags, "UInt", 0, "UInt", 0, "UInt")
return % ExtractInteger(fh)
}

SetUnicodeStr(ByRef out, str_)
{
VarSetCapacity(st1, 8, 0)
InsertInteger(0x530025, st1)
VarSetCapacity(out, (StrLen(str_) + 1) * 2, 0)
DllCall("wsprintfW", "str", out, "str", st1, "str", str_, "Cdecl UInt")
}

;pSource is a string (buffer) whose memory area contains a raw/binary integer at pOffset.
;The caller should pass true for pSigned to interpret the result as signed vs. unsigned.
;pSize is the size of PSource's integer in bytes (e.g. 4 bytes for a DWORD or Int).
;pSource must be ByRef to avoid corruption during the formal-to-actual copying process
;(since pSource might contain valid data beyond its first binary zero).
ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4)
{
Loop %pSize% ;Build the integer by adding up its bytes.
result += *(&pSource + pOffset + A_Index - 1) << 8 * (A_Index - 1)
if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
return result ;Signed vs. unsigned doesn't matter in these cases.
return -(0xFFFFFFFF - result + 1) ;Otherwise, convert the value (now known to be 32-bit) to its signed counterpart
}

;The caller must ensure that pDest has sufficient capacity. To preserve any existing contents in pDest,
;only pSize number of bytes starting at pOffset are altered in it.
InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4)
{
Loop %pSize% ;Copy each byte in the integer into the structure as raw binary data.
DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1, "UInt", 1, "UChar", pInteger >> 8 * (A_Index - 1) & 0xFF)
}


;;; Hotkeys

F12:: ;Show / Hide Taskbar
{
If TaskBar_State = Hidden
{
NumPut((ABS_ALWAYSONTOP := 0x2), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)
WinShow ahk_class Shell_TrayWnd
TaskBar_State = Visable
}
else
{
DetectHiddenWindows, On
VarSetCapacity(APPBARDATA, 36, 0) ;var mem limit
NumPut((ABS_ALWAYSONTOP := 0x2) | (ABS_AUTOHIDE := 0x1), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)
WinHide ahk_class Shell_TrayWnd
TaskBar_State = Hidden
}
}

;Disable for now
;#t:: ;Show / Hide Active Toolbar
;{
; WinSet, Style, ^0xC00000, A
;}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Burn_Cycle
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Burn_Cycle:

;Code Timer for Debugging...
;DllCall("QueryPerformanceCounter", "Int64*", CounterBefore) ;External Var, CPU Tick Timer
;StartTime := A_TickCount ;Internal Var, MS Timer

if IP_Change = 0 ;cludge for multi threading
{
GoSub Network_Monitor
}

if QuickLaunch_Mod = Enable
{
GoSub QuickLaunch_Mod
}

;Opera title bar remover mod
IfWinActive, - Opera
{
WinSet, Style, -0xC00000, - Opera

WinGetPos,,, Var_Width, A,,,
if (Var_Width > Desktop_Width) ;Seems ok, but the script needs reloading baised on the taskbar width otherwise the desktop width var is not refreshed :(
{
WinMove, - Opera,, -3, -3, %Desktop_Width%, %Desktop_Height%,, ;Slowdown Part..
}
}

;Firefox title bar remover mod
IfWinActive, - Mozilla Firefox
{
WinSet, Style, -0xC00000, - Mozilla Firefox

WinGetPos,,, Var_Width, A,,,
if (Var_Width > Desktop_Width) ;Seems ok, but the script needs reloading baised on the taskbar width otherwise the desktop width var is not refreshed :(
{
WinMove, - Mozilla Firefox,, -3, -3, %Desktop_Width%, %Desktop_Height%,,
}
}

;Download_Rate_Secs := Round(Download_Rate * (((A_TickCount - StartTime) / 1000), 1))
;Upload_Rate_Secs := Round(Upload_Rate * (((A_TickCount - StartTime) / 1000), 1))

;needs null check...
if (IP_Address = "127.0.0.1" || IP_Address = "0.0.0.0")
{
Menu, Tray, Tip, Disconnected
}
else
{
Menu, Tray, Tip, IP: %IP_Address%`nDownload Rate: %Download_Rate% K`nUpload Rate: %Upload_Rate% K`nDownloaded Total: %Downloaded_Total% K`nUploaded Total: %Uploaded_Total% K
}

;DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
;ElapsedTime_pc := (CounterAfter - CounterBefore)
;ToolTip, Burn_Cycle:`n%ElapsedTime_pc% Ticks`n%ElapsedTime_ms% ms, 0, 0

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Read_Cfg
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Read_Cfg:

IniRead, Main_Loop_Timing, %A_ScriptDir%\NEO_nTray.ini, Main, Main_Loop_Timing

IniRead, Aero_Peek, %A_ScriptDir%\NEO_nTray.ini, Extra, Aero_Peek
IniRead, QuickLaunch_Mod, %A_ScriptDir%\NEO_nTray.ini, Extra, QuickLaunch_Mod
IniRead, TaskBar_State, %A_ScriptDir%\NEO_nTray.ini, Extra, TaskBar_State

IniRead, Port_Viewer, %A_ScriptDir%\NEO_nTray.ini, App_Locations, Port_Viewer

IniRead, Network_Icons_Use_Default, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Use_Default
IniRead, Network_Icons_Custom_1, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_1
IniRead, Network_Icons_Custom_2, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_2
IniRead, Network_Icons_Custom_3, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_3
IniRead, Network_Icons_Custom_4, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_4
IniRead, Network_Icons_Custom_5, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_5
IniRead, Network_Use_Keyboard_Leds, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Use_Keyboard_Leds

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Main Menu
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Main_Menu:

Menu, Menu_Settings_Tray_Icon, add, Default, Set_Tray_Icons_Default
Menu, Menu_Settings_Tray_Icon, add, Custom, Set_Tray_Icons_Custom
Menu, Menu_Settings, add, Tray Icon, :Menu_Settings_Tray_Icon
Menu, Menu_Settings, Icon, Tray Icon, shell32.dll, 303 ;not good in win2k3

Menu, Menu_Settings_Keyboard_Leds, add, Disable, Set_Network_Use_Keyboard_Leds_Disable
Menu, Menu_Settings_Keyboard_Leds, add, Enable, Set_Network_Use_Keyboard_Leds_Enable
Menu, Menu_Settings, add, Keyboard LEDs, :Menu_Settings_Keyboard_Leds
Menu, Menu_Settings, Icon, Keyboard LEDs, main.cpl, 6

Menu, Menu_Settings, add

Menu, Menu_Settings_QuickLaunch_Mod, add, Disable, Set_QuickLaunch_Mod_Disable
Menu, Menu_Settings_QuickLaunch_Mod, add, Enable, Set_QuickLaunch_Mod_Enable
Menu, Menu_Settings, add, QuickLaunch Mod, :Menu_Settings_QuickLaunch_Mod
Menu, Menu_Settings, Icon, QuickLaunch Mod, shell32.dll, 40

Menu, Menu_Settings_Aero_Peek, add, Disable, Set_Aero_Peek_Disable
Menu, Menu_Settings_Aero_Peek, add, Enable, Set_Aero_Peek_Enable
Menu, Menu_Settings, add, Aero Peek, :Menu_Settings_Aero_Peek
Menu, Menu_Settings, Icon, Aero Peek, shell32.dll, 40

Menu, Menu_Settings, add, Win7 Taskbar Mod, Win7_Taskbar_Mod
Menu, Menu_Settings, Icon, Win7 Taskbar Mod, shell32.dll, 40

Menu, Menu_Settings, add

;I woud prefer to have ahk's built in help function right here, but I can't figuer out the code for it

Menu, User_Timer_QSR, add, 0.5 ms, Set_User_Timer_QSR_05
Menu, User_Timer_QSR, Icon, 0.5 ms, shell32.dll, 13
Menu, User_Timer_QSR, add, 1 ms, Set_User_Timer_QSR_1
Menu, User_Timer_QSR, Icon, 1 ms, shell32.dll, 13
Menu, User_Timer_QSR, add, 10 ms, Set_User_Timer_QSR_10
Menu, User_Timer_QSR, Icon, 10 ms, shell32.dll, 13
Menu, User_Timer_QSR, add, 15.6 ms, Set_User_Timer_QSR_156
Menu, User_Timer_QSR, Icon, 15.6 ms, shell32.dll, 13
Menu, Menu_Settings, add, User Timer QSR Max, :User_Timer_QSR
Menu, Menu_Settings, Icon, User Timer QSR Max, shell32.dll, 13

Menu, Menu_Settings_Dev, add, Edit Script, Edit ;This should only be valid in script form, not in compiled form, I need to figuer that out...
Menu, Menu_Settings_Dev, Icon, Edit Script, shell32.dll, 71
Menu, Menu_Settings, add, Dev, :Menu_Settings_Dev
Menu, Menu_Settings, Icon, Dev, shell32.dll, 161

Menu, Tray, add, Port Viewer, Port_View
Menu, Tray, Icon, Port Viewer, shell32.dll, 172

Menu, Tray, add, Change IP, Change_IP
Menu, Tray, Icon, Change IP, shell32.dll, 19

Menu, Tray, add, Network Connections, Network_Connections
Menu, Tray, Icon, Network Connections, shell32.dll, 89

Menu, Tray, add

Menu, Tray, Add, Settings, :Menu_Settings
Menu, Tray, Icon, Settings, shell32.dll, 13

Menu, Tray, add

Menu, Tray, add, Reload, Reload
Menu, Tray, Icon, Reload, shell32.dll, 239

Menu, Tray, add, Pause, Pause ;This needs a better pause icon, and needs a play icon or whatever once paused
Menu, Tray, Icon, Pause, shell32.dll, 110

Menu, Tray, add

Menu, Tray, add, Exit, Exit
Menu, Tray, Icon, Exit, shell32.dll, 28

Menu, Tray, Default, Port Viewer ;Default Entry to run on double click

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Main_Menu_Cfg
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Main_Menu_Cfg:

if Network_Icons_Use_Default = Enable
{
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 145
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 132
}
if Network_Icons_Use_Default = Disable
{
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 132
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 145
}

if Network_Use_Keyboard_Leds = Enable
{
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 145
}
if Network_Use_Keyboard_Leds = Disable
{
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 132
}


if QuickLaunch_Mod = Disable
{
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 132
}
if QuickLaunch_Mod = Enable
{
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 145
}

if Aero_Peek = Disable
{
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 132
}
if Aero_Peek = Enable
{
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 145
}

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Network_Monitor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Network_Monitor:

;Code Timer for Debugging...
;DllCall("QueryPerformanceCounter", "Int64*", CounterBefore) ;External Var, CPU Tick Timer

;Needs null check too...
if (IP_Address = "127.0.0.1" || IP_Address = "0.0.0.0")
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 71, 1 ;Disconnected
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_5%
}
if Network_Use_Keyboard_Leds = Enable
{
GetKeyState, KeyState, ScrollLock, T
if KeyState = U
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
}

return
}

Download_Rate_New = 0
Upload_Rate_New = 0

GetIfTable(tb)

;notes:
; Return *ptr | *++ptr << 8 | *++ptr << 16 | *++ptr << 24
;typedef struct _MIB_IFROW {
; WCHAR wszName[MAX_INTERFACE_NAME_LEN];
; DWORD dwIndex;
; DWORD dwType;
; DWORD dwMtu;
; DWORD dwSpeed;
; DWORD dwPhysAddrLen;
; BYTE bPhysAddr[MAXLEN_PHYSADDR];
; DWORD dwAdminStatus;
; DWORD dwOperStatus;
; DWORD dwLastChange;
; DWORD dwInOctets; 552?
; DWORD dwInUcastPkts; 556?
; DWORD dwInNUcastPkts; 560?
; DWORD dwInDiscards; 564?
; DWORD dwInErrors; 568?
; DWORD dwInUnknownProtos; 572?
; DWORD dwOutOctets; 576?
; DWORD dwOutUcastPkts;
; DWORD dwOutNUcastPkts;
; DWORD dwOutDiscards;
; DWORD dwOutErrors;
; DWORD dwOutQLen;
; DWORD dwDescrLen;
; BYTE bDescr[MAXLEN_IFDESCR];
;} MIB_IFROW, *PMIB_IFROW;

;;Include this codes to exclude the loopback interface.
;;If DecodeInteger(&tb + 4 + 860 * (A_Index - 1) + 516) = 24
;;Continue
Loop, % DecodeInteger(&tb)
{
Download_Rate_New += DecodeInteger(&tb + 4 + 860 * (A_Index - 1) + 552) ;Total Incoming Octets
Upload_Rate_New += DecodeInteger(&tb + 4 + 860 * (A_Index - 1) + 576) ;Total Outgoing Octets
}

;Needs odd colon char thingy to work...
Download_Rate := Round(((Download_Rate_New - Download_Rate_Old) / 48), 1) ;Download rate calculation
Upload_Rate := Round(((Upload_Rate_New - Upload_Rate_Old) / 48), 1) ;Upload rate calculation

;Offline Testing...
;if DL_Old = %Download_Rate%
;{
; Download_Rate := Round((120.5 / 1024), 1)
;}
;if UP_Old = %Upload_Rate%
;{
; Upload_Rate := Round((120.5 / 1024), 1)
;}
;DL_Old = %Download_Rate%
;UP_Old = %Upload_Rate%


;Needs odd syntax
;Needs a few microsecs of latency before lighting up the keyboard leds

if (Download_Rate = 0 && Upload_Rate = 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 69, 1 ;193, 0dn 0up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_1%
}
if Network_Use_Keyboard_Leds = Enable
{
KeyboardLED(4, "Off")
Sleep, 1
KeyboardLED(1, "Off")
}
}
if (Download_Rate > 0 && Upload_Rate = 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 68, 1 ;192, +dn 0up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_2%
}
if Network_Use_Keyboard_Leds = Enable
{
KeyboardLED(4, "Off")
Sleep, 1
KeyboardLED(1, "On")
}
}
if (Download_Rate = 0 && Upload_Rate > 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 67, 1 ;191, 0dn +up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_3%
}
if Network_Use_Keyboard_Leds = Enable
{
Sleep, 1
KeyboardLED(1, "Off")
KeyboardLED(4, "On")
}
}
if (Download_Rate > 0 && Upload_Rate > 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 66, 1 ;190, +dn +up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_4%
}
if Network_Use_Keyboard_Leds = Enable
{
KeyboardLED(4, "On")
Sleep, 1
KeyboardLED(1, "On")
}
}


;Needs odd colon char to work...
Downloaded_Total := Round(Download_Rate_New / 48)
Uploaded_Total := Round(Upload_Rate_New / 48)

Download_Rate_Old = %Download_Rate_New%
Upload_Rate_Old = %Upload_Rate_New%

;DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
;ElapsedTime_pc := (CounterAfter - CounterBefore)

;ToolTip, Network_Monitor:`n%ElapsedTime_pc% Ticks`n%ElapsedTime_ms% ms, 0, 0

Return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; QuickLaunch_Mod
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

QuickLaunch_Mod:

Mouse_State_LButton_Old = %Mouse_State_LButton%

MouseGetPos,,,, Win32_Control
GetKeyState, Mouse_State_LButton, LButton

;small issue with timing and mod, if I was previously over the toolbar and now on the taskbar with the sam etoolbar name, it takes a little while to reg to get rid of the ctrl key

if A_OSVersion = WIN_7
{
if ((Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D")
{
Send, {Control down}
}
else if (Mouse_State_LButton_Old = "D" && Mouse_State_LButton = "U") ;cheap hack
{
Send, {Control up}
}
}
else if A_OSVersion = WIN_2003
{
if ((Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D")
; if ((Win32_Control = "ToolbarWindow322") && Mouse_State_LButton = "D" || (Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D")
{
Send, {Control down}
}
else if (Mouse_State_LButton_Old = "D" && Mouse_State_LButton = "U") ;cheap hack
{
Send, {Control up}
}
}

;324...
;323 is the issue on win2k3 slim, taskbar becomes the other toolbar.
;323 is the one that works in win7
;322 is the one that works in win2k3

;I can either scan for the os or I can patch it out correctly
;1st one is the issue

;ToolbarWindow322 Win2k3 single col
;causes issues on win2k3, crtl gets stuck on the taskbar

;ToolbarWindow323 Win7 double col

;This code needs work, works great in win7, but it needs to be worked on in xp and win2k3

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Port_View
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Port_View:
;MsgBox, %Port_Viewer%
Run %Port_Viewer%
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Network_Connections
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Network_Connections:

;check to see if netman is enabled via reg, if so then don't run the special code below.
;If it is disabled at runtime, then run the special code below
;Would like to see a sub menu with net connections...

;Big prob, the thign creates a new proccess which I can't seem to track yet.
;So my script stops the netman service before exiting, or it keeps it in mem, both are not cool

;RunWait %ComSpec% /C "sc config netman start= demand",, Hide
;RunWait %ComSpec% /C "net start netman",, Hide

Run ::{7007acc7-3202-11d1-aad2-00805fc1270e},,, Win32_PID
;WinWaitClose ahk_pid %Win32_PID% ;Doesn't actually work...

;RunWait %ComSpec% /C "net stop netman",, Hide
;RunWait %ComSpec% /C "sc config netman start= disabled",, Hide

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Change_IP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Change_IP:

;issue here if ip was originally null
if (IP_Address = "127.0.0.1" || IP_Address = "0.0.0.0")
{
return
}

IP_Old = %IP_Address%

Download_Rate_New = 0
Upload_Rate_New = 0
Download_Rate_Old = 0
Upload_Rate_Old = 0
Downloaded_Total = 0
Uploaded_Total = 0

TrayTip, NEO_nTray, Changing IP...,, 16
Menu, Tray, Tip, Changing IP...

IP_Change = 1 ;cludge for multi threading

if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 71, 1 ;Disconnected
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_5%
}

if Network_Use_Keyboard_Leds = Enable
{
GetKeyState, KeyState, ScrollLock, T
if KeyState = U
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
}

IP_Change_Count = 0



While (A_IPAddress1 = IP_OLD)
{
IP_Change_Count += 1

if IP_Change_Count = 10
{
TrayTip, NEO_nTray, I tried to change your IP but after %IP_Change_Count% attempts I gave up...,, 16
Sleep 3000 ;Give the user 3 secs to read the msg...
Reload
return
}
else
{
RunWait %ComSpec% /C "IPCONFIG /RELEASE",, Hide
Sleep (1000 * %IP_Change_Count%) ;increase idle by 1sec per loop
RunWait %ComSpec% /C "IPCONFIG /RENEW",, Hide
}
}



TrayTip, NEO_nTray, Old IP Address: %IP_Old%`nNew IP Address: %A_IPAddress1%,, 16
IP_Change = 0 ;Cludge for multi-threading
Sleep 3000 ;Give the user 3 secs to read the msg...

Reload ;Cludge for mem leak on A_IPAddress1, reload the whole darn program after getting a new ip, init should pick up the new ip

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Init
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Init:

IP_Change = 0 ;cludge for multi threading

;Try to reduce the mem leak as much as possible, and only call this once on init and not in the main loop, it won't beable to auto detect the ip at any given time but it should be good enough
VarSetCapacity(IP_Address, 15, 0) ;Var mem limit
VarSetCapacity(A_IP_Address, 15, 0) ;Var mem limit
IP_Address = %A_IPAddress1%

;Hides the everything on the taskbar including it's self, but leaves the start button
;WinHide ahk_class Shell_TrayWnd

GoSub Read_Cfg
GoSub Main_Menu
GoSub Main_Menu_Cfg

if Aero_Peek = Enable
{
GoSub Set_Aero_Peek_Enable
}
else
{
GoSub Set_Aero_Peek_Disable
}

SysGet, Desktop_Width, 61
SysGet, Desktop_Height, 62
EnvSub, Desktop_Width, 2
EnvSub, Desktop_Height, 2

SysGet, Monitor_Width, 0
SysGet, Monitor_Height, 1

;User Timer Max Quantum Slice Resolution
;Quantum timer resolution
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 156000) ;15.600 ms
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 100000) ;10.000 ms
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 10000) ;1.000 ms
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 5000) ;0.500 ms

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Edit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Edit:

Edit

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Reload
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Reload:

Reload

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Pause
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Pause:

Pause

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Exit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Exit:

if Network_Use_Keyboard_Leds = Enable
{
GetKeyState, KeyState, ScrollLock, T
if KeyState = U
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
}

ExitApp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

danielkza
01-28-2011, 08:24 PM
"That's why I'm using it, it lets me skip a file at bootup."

How exactly? If your script does everything userinit.exe does and it's bigger, what are the advantages?

NEOAethyr
01-28-2011, 08:46 PM
Yes indeed the userinit replacement is bigger with this type of coding style.
The reason for me was to fix the startup stuff in the reg and startup folder.

It exits before you can run the taskmgr, so the system settles down quicker.
Instead of waiting for userinit.exe to exit, which normally take a min, now it's not there when I start up.

Other reasons were to improve on the functionality.
Like having options to parse each reg run key, or the startup folder one by one.
You could unselect which ones you didn't want to run, future wise.

It's not something I have much use for.
But if it were used on a clients system...
You could one day goto work on it, check to see why it's so slow and unselect all those run entry types.
And see if the system has issues with no startup programs or not without del'ing stuff out of the reg.

Or a user could decide they don't want any type of startup programs running.
And unselect all of the diff types.
Or change the ini which in case of the user.ini non-stay resident ver, that would be the way to go.

My plan is to integrate it with my new network monitoring tray program.
So I have all the options in front of me in the tray menu.

Of course it would have an option to stay resident or not...
Giving it multiple uses.
For some, a userinit replacement.
For others, a network status program.
And for certain peeps like me, both.

Still gets rid of 1 exe for me, the network indicator program.
And userinit is no longer in my list of processes waiting to exit after starting up.

I'll keep working on it to bring up the functionality of the thing.
Then once it's all done and tweaked out for performance as much as possible (multi threaded maybe, and not using a bunch of extra cycles for my net-mon prog).
Then I'll work on duplicating the code in fasm.

In which case, a stand alone userinit replacement done in asm would would be smaller then the original.

This is to test functionality though for now.
As a stand alone replacement for userinit I have use for it and I'm using it already.
Since it's essentually only a script that doesn't hang out in mem for a min or 2.

I'll work on the timing and everything else as time goes on.


The main reason why I posted it.
I think in the future it would have some merit with overclocking.
If I can add flush to disk or free mem functionality I could get windows to act right on startup.
Which you could bsod and not worry about trashing the os.

Right now I use aida64, the benchmark in it to do that same thing.
If I can skip that step when overclock stability testing, that would rock I think.
And it could save alot of people's os'es from getting trashed if it is done right.


The userinit code has a timing issue with net start and net stop at the end of the code, for the uxsms service.
Ticks me off a little because sometimes uxsms don't get started back up.
I have to fix it.

danielkza
01-28-2011, 09:24 PM
You write too much. I don't usually complain about that, but I just couldn't bear reading all that. You could've just said 'because I'd like to disable startup programs selectively' and be done with it. And do you have any evidence that userinit is what is actually delaying the boot?

And I see no reason whatsoever for your network monitor to replace userinit.exe. Just make it a service, that's what they're meant for.

NEOAethyr
01-28-2011, 09:47 PM
Yeah I had a hard time reading through it when I was fixing typos lol.

Userinit doesn't delay the bootup really.
But it sticks around after bootup for a good min in win7.

In win2k3 I think it stuck around for good if I remember right.

As for the service comment, thought about that already ;).
Would be nice to integrate into a set of services with svchost.
Would be down yet another process on my setup.


I got a tray tooltip working, shows:
Download rate
Upload rate
Download total
Upload total

Next I'm gonna mod the context menu.
Adding support for launching tcpviewer, and single click changing ip addresses and gateways.

I know it sounds odd to replace userinit with some network status tray thing.
It's just some ideas I'm playing with :).

Edit:
Updated the above codes.
I'm done messing with it tonight :).

NEOAethyr
01-30-2011, 03:32 PM
My network monitor is now better then the alternatives, yay lol :D (kinda, it's faster but uses a bit more cycles and 3x the mem :O..., that won't be an issue once converted to a different format).

Needs more work.
Now I'm looking forward to converting this code to a better format.
I want to get a few more things done with this and get this tweaked out.
Then I'll work on converting it to asm to compile in a modded ver of fasm.

If anyone here actually knows what autohotkey is and how to use it, check out my script please.
Tell me what you think.

I think it's getting there :).
I better get back to work on the userinit code though and finish that off...

Edit:
Mmm there's a mem leak in the network monitor code.
In the actual network status part of it, I commented it out and have been testing, seems ok.

I'll figure that out tonight.
Seems that there's certain things in autohotkey that can cause mem leaks.

The taskbar toolbar mod code is working great though.
I haven't had a single prob so far.
It's very nice to not have to hold the ctrl key down to bring a drop down menu from your quicklaunch...

I also noticed that I have to calc the download/update rate baised on the polling rate that I'm using.
Before the code was to slow so I had to make adjustments for that, now it's super fast and it says I'm getting around 25k instead of a 100k lol.
I have to sit down and figure out what these tables of net params really look like and how to parse them 100% correctly, and then adjust for polling rate dynamically.

I have a ?, does anyone here know how to achieve the same functionality as start killer?
I want that in my network monitor and the ability to change transparencies in windows or the taskbar(I want to make the taskbar 100% transparent).
Oh and the ability to totally remove the aeropeek button, and perhaps a mod for custom titlebars in windows, and maybe a few other small things like mouse hover activate window or something.
Gahh... and an internal ver of the port monitor, can't forget that.

NEOAethyr
02-02-2011, 02:46 AM
News ver's, updated both userinit ad net monitor code.
Decided against integrating them together.
Fixed mem leak in net monitor prog.
Added some more goodies, had to remove ip display ability (also no longer ensures you get a diff ip each time you use the change ip command :( ).

I should beable to get the userinit code 100% done in a few days, whenever I feal like messing with it again.
I'm kinda interested in the system's cache working set value though, I want to check some things...

NEOAethyr
02-06-2011, 11:05 PM
I did alot of work on both programs yesterday.
It'll be a few days though until I post them.

I have some speed issues to deal with ;).

Things that have been done or I'm working on ->

Opera mod, firefox mod:
Removes the titlebar and moves/resizes the window into a specific location.
This is done.

Working on a proxomitron mod.
1st hide main window (done).
2nd hide programs tray icon (done).
3rd init log window (not done).
Hide log and make it toggle with a menu in my netmon's tray (done).
Add diff modes, making proxomitron switch it's cfg files for diff things (not doing until last).

Afterwards, make a mem hacking program to hack firefox and opera to change proxy config on the fly.
When you select proxy logger enabled in my netmon's tray menu, it'll enable the proxy config for all browsers.
When disabling the proxy, exiting it, it'll disable the proxy config for all browsers.
I don't need this but maybe it's a good idea I don't know yet.

Plan is to integrate proxomitron into my netmon program's tray menu.
Make proxomitron half way usable again, right now it's to annoying to bother with it so I came up with this idea, been wanting a stand alone like http header log window for along time now.


I plan on making a simple ver and an all out ver, depends on what all I can do.

I'm also gonna try my hand at using the dll ver of ahk in asm.
Should net some nice speedups.

I already added timing code to time the cpu cycle's used in the main loop so I can figure out how to speed it up more.


Other ideas ->

I have working html support now, uses ie to render whatever html I want into a window, doesn't open ie it's self and uses less mem then both ie and the sidebar.
My idea, make a replacement sidebar that uses less mem and isn't an "extra" proccess (it's possible now).

I have working tray icon code that can take the icon's, there status and there tray tooltip's and place them into a new window.
The code is slow right now.
And it doesn't support the icon menu's or button events.
Perhaps this could be remade into something decent that is actually able to replace the tray.
I'm thinking of a tab like interface for the tasks and processes.
Perhaps even done in html+js and ahk if it's possible.
I'de also like to replace explorer so I can just get rid of it completely, I need to work on folder tree code stuffs.

Thinking of integrating google earth plugin along with other sat img db's to setup a side bar like thing for sat stuffs.
Integrated with the new sidebar replacement, so you can add your own html baised commands for it on the desktop/menu thing.

Thinking of making a port mon of my own.
Making it integratable with the above idea of sat stuff on the desktop.

A mem hacking program too would be nice.

A debug mode that lets you add remove control's, buttons and etc to any gui in real time (will work on soon, I need it to find out how to remove the start button).
This is one of my next steps and I have code that has half of the work done I guess.

NEOAethyr
03-30-2011, 02:14 AM
@Mods.
Can you change the name of this thread to say -> "NEO's Random code thread...".
Or something similar :), thanks.


Yesterday I got me a new copy of easybcd, the latest beta allow you to add floppy images (ima) directly to the win7's boot menu.

So I added a copy of win95's floppy image and added the memtest86+ dos exe to it.

I also have some bits of code you can compile to add to your own floppy image/s.
As com files, you'll need fasm to compile.
(once I get a few more programs made out I suppose I can pre-compile them for you...)

I'll start off with some basic ones and get some more advanced stuff as time goes on.
For example, a replacement for phenom msr tweaker, a mem tweaker, cmos dumper/programmer, etc etc, whatever that can be thought up and figured out.


Here goes:

tCLK.com changes the master pic timing, for irq's/int's.
The hd controller timings use this timer as a ref, so to fast and things get wack, drives fail to show, floppy's fail, etc.
1.5x was the fastest setting without issues so far, I previously used 3x.
A handful of peeps helped test values for me in the past in some of my modded bios'es.
This is the 1st mod I'm putting up at the moment, I'm using it as I type this.

INT19.com
This is a small program that you run after tCLK.com and etc.
Say for example, you hacked one of your timings in dos with a little bit of programming but you need a way of getting into windows with it, well this is what you need right here.
It will load the last bootstrap.
Example, win7's bootmgr, or the bios'es boot menu, etc.
So you load dos, run a mod or 2, then run int19.com, which will direct you to say win7's bootmgr without reseting your pc and it's config.

Reset.com
Just a demo I put together a month ago or 2 for someone here on the forum to test there board.
If for some reason you want to do a complete reset of your pc without pressing ctrl-alt-del then this will do just that.


tCLK.asm



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; tCLK / 8253...
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Notes:
; 1.5x was the latest safe value...

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Entry Ptr
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org 0x100

jmp Init

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Defines
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CLK_8253_CH0 EQU 0x40
CLK_8253_CH1 EQU 0x41
CLK_8253_CH2 EQU 0x42
CLK_8253_Control EQU 0x43

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Functions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Set_tCLK_1X: ;Reset tCLK, Result is 0x36 tCLK-CTL, and 0x0000 tCLK
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0x00 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_1125X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0xF0 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_125X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0xE0 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_1375X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0xD0 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_15X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0xC0 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_1625X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0xB0 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_175X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0xA0 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_1875X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0x90 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_2X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0x80 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_25X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0x70 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_3X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0x60 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_35X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0x50 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

Set_tCLK_4X:
cli ;Disable IRQ's
mov al, 0x34 ;00110100B, Control (tCLK) LSB
out CLK_8253_Control, al ;out 0x43, al
mov al, 0x00 ;LSB
out CLK_8253_CH0, al ;out 0x40, al
mov al, 0x40 ;MSB
out CLK_8253_CH0, al ;out 0x40, al
sti ;Enable IRQ's
ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Init
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Init:

;call Set_tCLK_1X
;call Set_tCLK_1125X
;call Set_tCLK_125X
;call Set_tCLK_1375X
call Set_tCLK_15X
;call Set_tCLK_1625X
;call Set_tCLK_175X
;call Set_tCLK_1875X
;call Set_tCLK_2X
;call Set_tCLK_25X
;call Set_tCLK_3X
;call Set_tCLK_35X
;call Set_tCLK_4X

jmp Exit

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Exit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Exit:

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



INT19.asm



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; INT19
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Entry Ptr
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org 0x100

jmp Init

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Init
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Init:

jmp Exit

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Exit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Exit:

dw 0x19CD ;Exit To Boot Device

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



Reset.asm



org 0x100

push 0xF000
push 0xFFF0
retf

;jmp 0xF000:0xFFF0
;jmp 0xF000:0xE05B

;just incase...
ret




If anyone has any ideas of some mods then do tell.
I'll do what I can to make it happen ;).

However, complicated stuff like mem controller changes, not right this sec ok ;).
You can ask, but I'm really to lazy to do that at the moment, it's specific per board..., well it doesn't have to be with some more work, but it would still be specific per cpu model...

But if it's a simple msr change or if you know the exact pci reg to change and it's current offset, etc etc, then I can do that with a quickness.

NEOAethyr
04-23-2011, 03:46 PM
This ahk code hasn't been tested in this form yet.
I have manually tested it and in theory it will work.
But it might need some timing tweaking.

I found that this taskbar autohide code that was oringally in my network monitor program worked as an alternative to the real autohide, when you want to use the half sized taskbar exploit bug.

So it's possible to have this apply the bug automatically on startup.
I will test tonight, right now I'm busy dl'ing these cod 5 waw updates...



;Stop UxSms
RunWait %ComSpec% /C "net stop UxSms",, Hide

;Enable Taskbar Autohide
DetectHiddenWindows, On
VarSetCapacity(APPBARDATA, 36, 0) ;var mem limit
NumPut((ABS_ALWAYSONTOP := 0x2) | (ABS_AUTOHIDE := 0x1), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)
WinHide ahk_class Shell_TrayWnd

;Restart UxSms
RunWait %ComSpec% /C "net start UxSms",, Hide

;Disable Taskbar Autohide
NumPut((ABS_ALWAYSONTOP := 0x2), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)
WinShow ahk_class Shell_TrayWnd


Example outcome of the above code:
http://img845.imageshack.us/img845/275/unledqn.th.jpg (http://img845.imageshack.us/img845/275/unledqn.jpg)

Note how the taskbar is half the size compared to the norm.

I've got a million diff projects to get back on.
One thing I need to do though is make a replacement mouse driver for dos, because in vmware the ms mouse and tiny mouse drivers don't work :(.
I need mouse support for generic dos programs...

I think my 1st project will be a max latency tweaker and idle cycle limit tweaker for the amd x6's, for dos...
I just got done verifying the last of my mem timings last night so I need to move on to stuff that isn't in the bios.

Edit:
Also posted latest network monitor and userinit codes in the above posts.

One more edit:
Tested script above and it indeed works.
I will have to continue testing to make sure there isn't timing issues.

NEOAethyr
04-26-2011, 12:54 AM
Updated network monitor code above.
I need to work on getting the download/upload rate display stuff right...

NEOAethyr
05-14-2011, 12:14 PM
Updated network monitor code again, added the setting User Timer QSR max.
Which is in fact the NtSetTimerResolution setting.
I've got a handful of ideas for this program later on and I'll work on it as time goes on.

NEOAethyr
06-21-2011, 02:43 AM
I will update the network monitor program thing in a few days.
There's an issue with the taskbar slim mod on win7 x64 embedded.
I can get it to work but auto-hide must be enabled before running the current code, then disabled afterwards.
I'll fix that so it works on x64 embedded pretty soon, it's going to be my main os (using it right now).

I might end up posting another low level program here to change cpu-id's as well depending on how it effects certain benchs..., IF it does..., otherwise not sure what the point would be but whatever I guess :).

NEOAethyr
06-23-2011, 07:48 AM
I was playing with the code a min ago and found out that if I install a 32bit ver of ahk instead of the 64bit it works fine.
So I tried to figuer it out for the 64bit ver but got no where.

The code:


Win7_Taskbar_Mod:

RunWait %ComSpec% /C "net stop UxSms",, Hide ;Stop UxSms

DetectHiddenWindows, On ;Enable Taskbar Autohide
VarSetCapacity(APPBARDATA, 36, 0) ;Var mem limit

NumPut((ABS_ALWAYSONTOP := 0x2) | (ABS_AUTOHIDE := 0x1), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0x0A), "UInt", &APPBARDATA)

WinHide ahk_class Shell_TrayWnd
RunWait %ComSpec% /C "net start UxSms",, Hide ;Restart UxSms

NumPut((ABS_ALWAYSONTOP := 0x2), APPBARDATA, 32, "UInt") ;Disable Taskbar Autohide
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)

WinShow ahk_class Shell_TrayWnd
Reload ;Needed to refresh the desktop width var...
return


The issue:


NumPut((ABS_ALWAYSONTOP := 0x2) | (ABS_AUTOHIDE := 0x1), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0x0A), "UInt", &APPBARDATA)


This never toggles the autohide.
I'll have to reg on the ahk forum to figuer it out probably.

NEOAethyr
05-06-2012, 04:45 AM
Posting this, probably no one cares but I feel I should at least keep the code up to date somewhat.
It's been updated for windows 8 and a few other misc things.

NEO_nTray.ahk / .exe




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; NEO_nTray (NEO's Network Tray Tool)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Notes:

;ctrl left click also works for the taskbar as well, restoring the last window
;so I may want to redo the code to include it

;
; %A_IPAddress1% Leaks massive amounts of memory, DO NOT use it!!!

;Code Timer for Debugging...
;DllCall("QueryPerformanceCounter", "Int64*", CounterBefore) ;External Var, CPU Tick Timer
;StartTime := A_TickCount ;Internal Var, MS Timer
;Sleep 1000
;ElapsedTime_ms := (A_TickCount - StartTime)
;DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
;ElapsedTime_pc := (CounterAfter - CounterBefore)
;ToolTip, %ElapsedTime_pc% Ticks`n%ElapsedTime_ms% ms

;This thing has gotten slower over the last rev or so...


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Entry Point
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#Persistent
#SingleInstance, Force
#MaxMem 1
#MaxThreads 3
SetBatchLines -1
Process, Priority,, BelowNormal
Menu, Tray, NoStandard ;Disable Standard AHK Menu Entries
SetTitleMatchMode, 2
DetectHiddenWindows, On ;Needed to detect proxomitron while minimized

GoSub Init

StartTime := A_TickCount ;Internal Var, MS Timer
ElapsedTime_ms := (A_TickCount - StartTime)

SetTimer, Burn_Cycle, %Main_Loop_Timing%
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Functions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

EmptyMem(PIDtoEmpty)
{
h:= DllCall("OpenProcess", "UInt", 0x001F0FFF, "Int", 0, "Int", PIDtoEmpty)
DllCall("SetProcessWorkingSetSize", "UInt", h, "Int", -1, "Int", -1)
DllCall("CloseHandle", "Int", h)
}



GetTrayBar()
{
ControlGet, hParent, hWnd,, TrayNotifyWnd1 , ahk_class Shell_TrayWnd
ControlGet, hChild , hWnd,, ToolbarWindow321, ahk_id %hParent%
Loop
{
ControlGet, hWnd, hWnd,, ToolbarWindow32%A_Index%, ahk_class Shell_TrayWnd
If Not hWnd
Break
Else If hWnd = %hChild%
{
idxTB := A_Index
Break
}
}
Return idxTB
}


TrayIcons(sExeName = "Proxomitron-MOD.exe")
{
WinGet, pidTaskbar, PID, ahk_class Shell_TrayWnd
hProc:= DllCall("OpenProcess", "Uint", 0x38, "int", 0, "Uint", pidTaskbar)
pProc:= DllCall("VirtualAllocEx", "Uint", hProc, "Uint", 0, "Uint", 32, "Uint", 0x1000, "Uint", 0x4)
idxTB:= GetTrayBar()
SendMessage, 0x418, 0, 0, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_BUTTONCOUNT
Loop, %ErrorLevel%
{
SendMessage, 0x417, A_Index-1, pProc, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_GETBUTTON
VarSetCapacity(btn,32,0), VarSetCapacity(nfo,32,0)
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", pProc, "Uint", &btn, "Uint", 32, "Uint", 0)
iBitmap := NumGet(btn, 0)
idn := NumGet(btn, 4)
Statyle := NumGet(btn, 8)
If dwData := NumGet(btn,12)
iString := NumGet(btn,16)
Else dwData := NumGet(btn,16,"int64"), iString:=NumGet(btn,24,"int64")
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", dwData, "Uint", &nfo, "Uint", 32, "Uint", 0)
If NumGet(btn,12)
hWnd := NumGet(nfo, 0)
, uID := NumGet(nfo, 4)
, nMsg := NumGet(nfo, 8)
, hIcon := NumGet(nfo,20)
Else hWnd := NumGet(nfo, 0,"int64"), uID:=NumGet(nfo, 8), nMsg:=NumGet(nfo,12)
WinGet, pid, PID, ahk_id %hWnd%
WinGet, sProcess, ProcessName, ahk_id %hWnd%
WinGetClass, sClass, ahk_id %hWnd%
If !sExeName || (sExeName = sProcess) || (sExeName = pid)
VarSetCapacity(sTooltip,128), VarSetCapacity(wTooltip,128*2)
, DllCall("ReadProcessMemory", "Uint", hProc, "Uint", iString, "Uint", &wTooltip, "Uint", 128*2, "Uint", 0)
, DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "str", wTooltip, "int", -1, "str", sTooltip, "int", 128, "Uint", 0, "Uint", 0)
; , sTrayIcons .= "idx: " . A_Index-1 . " | idn: " . idn . " | Pid: " . pid . " | uID: " . uID . " | MessageID: " . nMsg . " | hWnd: " . hWnd . " | Class: " . sClass . " | Process: " . sProcess . "`n" . " | Tooltip: " . sTooltip . "`n"
, sTrayIcons .= "" . hWnd . ""
}
DllCall("VirtualFreeEx", "Uint", hProc, "Uint", pProc, "Uint", 0, "Uint", 0x8000)
DllCall("CloseHandle", "Uint", hProc)
Return sTrayIcons
}




RemoveTrayIcon(hWnd, uID, nMsg = 0, hIcon = 0, nRemove = 2)
{
NumPut(VarSetCapacity(ni,444,0), ni)
NumPut(hWnd , ni, 4)
NumPut(uID , ni, 8)
NumPut(1|2|4, ni,12)
NumPut(nMsg , ni,16)
NumPut(hIcon, ni,20)
Return DllCall("shell32\Shell_NotifyIconA", "Uint", nRemove, "Uint", &ni)
}





;User Timer Max Quantum Slice Resolution
;Quantum timer resolution
Set_User_Timer_QSR_Min:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 1) ;0.500 ms
return

Set_User_Timer_QSR_Max:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 999999) ;0.500 ms
return

Set_User_Timer_QSR_05:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 5000) ;0.500 ms
return

Set_User_Timer_QSR_1:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 10000) ;1.000 ms
return

Set_User_Timer_QSR_10:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 100000) ;10.000 ms
return

Set_User_Timer_QSR_156:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 156000) ;15.600 ms
return


Set_Tray_Icons_Default:
Network_Icons_Use_Default = Enable
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 145
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 132
return

Set_Tray_Icons_Custom:
Network_Icons_Use_Default = Disable
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 132
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 145
return


Set_Network_Use_Keyboard_Leds_Disable:
Network_Use_Keyboard_Leds = Disable
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 132
GetKeyState, KeyState, ScrollLock, T ;Bug fix for threading issues, so non of the leds end up getting stuck on...
if KeyState = U ;this one gets stuck on anyways every time it seems
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
return

Set_Network_Use_Keyboard_Leds_Enable:
Network_Use_Keyboard_Leds = Enable
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 145
return


Set_QuickLaunch_Mod_Disable:
QuickLaunch_Mod = Disable
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 132
return

Set_QuickLaunch_Mod_Enable:
QuickLaunch_Mod = Enable
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 145
return


Set_Aero_Peek_Disable:
Aero_Peek = Disable
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 132
Control, Disable,, TrayShowDesktopButtonWClass1, ahk_class Shell_TrayWnd
return

Set_Aero_Peek_Enable:
Aero_Peek = Enable
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 145
Control, Enable,, TrayShowDesktopButtonWClass1, ahk_class Shell_TrayWnd
return


Win7_Taskbar_Mod:

RunWait %ComSpec% /C "net stop UxSms",, Hide ;Stop UxSms

DetectHiddenWindows, On ;Enable Taskbar Autohide
VarSetCapacity(APPBARDATA, 36, 0) ;Var mem limit

RunWait %ComSpec% /C "taskkill /im dwm.exe /f",, Hide ;Restart DWM (Windows 8)

NumPut((ABS_ALWAYSONTOP := 0x2) | (ABS_AUTOHIDE := 0x1), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0x0A), "UInt", &APPBARDATA)

WinHide ahk_class Shell_TrayWnd
RunWait %ComSpec% /C "net start UxSms",, Hide ;Restart UxSms

NumPut((ABS_ALWAYSONTOP := 0x2), APPBARDATA, 32, "UInt") ;Disable Taskbar Autohide
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)

WinShow ahk_class Shell_TrayWnd
Reload ;Needed to refresh the desktop width var...
return


;;; Network Monitor Functions:

GetIfTable(ByRef tb, Border = True)
{
nSize := 4 + 860 * GetNumberOfInterfaces() + 8 ;Var mem limit calc
VarSetCapacity(tb, nSize) ;Var mem limit
Return DllCall("iphlpapi\GetIfTable", "Uint", &tb, "UintP", nSize, "int", Border)
}

GetNumberOfInterfaces()
{
DllCall("iphlpapi\GetNumberOfInterfaces", "UintP", nIf)
Return nIf
}

DecodeInteger(ptr)
{
Return *ptr | *++ptr << 8 | *++ptr << 16 | *++ptr << 24
}


;notes:
;typedef struct _MIB_IFROW {
; WCHAR wszName[MAX_INTERFACE_NAME_LEN];
; DWORD dwIndex;
; DWORD dwType;
; DWORD dwMtu;
; DWORD dwSpeed;
; DWORD dwPhysAddrLen;
; BYTE bPhysAddr[MAXLEN_PHYSADDR];
; DWORD dwAdminStatus;
; DWORD dwOperStatus;
; DWORD dwLastChange;
; DWORD dwInOctets;
; DWORD dwInUcastPkts;
; DWORD dwInNUcastPkts;
; DWORD dwInDiscards;
; DWORD dwInErrors;
; DWORD dwInUnknownProtos;
; DWORD dwOutOctets;
; DWORD dwOutUcastPkts;
; DWORD dwOutNUcastPkts;
; DWORD dwOutDiscards;
; DWORD dwOutErrors;
; DWORD dwOutQLen;
; DWORD dwDescrLen;
; BYTE bDescr[MAXLEN_IFDESCR];
;} MIB_IFROW, *PMIB_IFROW;


;;; Keyboard LED Functions:

KeyboardLED(LEDvalue, Cmd) ;LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4, Cmd = On / Off
{
Static h_device
If ! h_device ;initialise
{
device =\Device\KeyBoardClass0
SetUnicodeStr(fn, device)
h_device := NtCreateFile(fn, 0 + 0x00000100 + 0x00000080 + 0x00100000, 1, 1, 0x00000040 + 0x00000020, 0)
}

VarSetCapacity(output_actual, 4, 0)
input_size = 4
VarSetCapacity(input, input_size, 0)

If Cmd = On ;forces all choosen LED's to ON (LEDvalue = 0 -> LED's according to keystate)
{
KeyLED := LEDvalue | (GetKeyState("ScrollLock", "T") + 2 * GetKeyState("NumLock", "T") + 4 * GetKeyState("CapsLock", "T"))
}
If Cmd = Off ;forces all choosen LED's to OFF (LEDvalue = 0 -> LED's according to keystate)
{
LEDvalue := LEDvalue ^ 7
KeyLED := LEDvalue & (GetKeyState("ScrollLock", "T") + 2 * GetKeyState("NumLock", "T") + 4 * GetKeyState("CapsLock", "T"))
}
;EncodeInteger(KeyLED, 1, &input, 2) ;input bit pattern (KeyLED): bit 0 = scrolllock, bit 1 = numlock, bit 2 = capslock
input := Chr(1) Chr(1) Chr(KeyLED)
input := Chr(1)
success := DllCall("DeviceIoControl", "uint", h_device, "uint", CTL_CODE(0x0000000B, 2, 0, 0), "uint", &input, "uint", input_size, "uint", 0, "uint", 0, "uint", &output_actual, "uint", 0)
}

CTL_CODE(p_device_type, p_function, p_method, p_access)
{
Return, (p_device_type << 16) | (p_access << 14) | (p_function << 2) | p_method
}

NtCreateFile(ByRef wfilename, desiredaccess, sharemode, createdist, flags, fattribs)
{
VarSetCapacity(fh, 4, 0)
VarSetCapacity(objattrib, 24, 0)
VarSetCapacity(io, 8, 0)
VarSetCapacity(pus, 8)
uslen := DllCall("lstrlenW", "str", wfilename) * 2
InsertInteger(uslen, pus, 0, 2)
InsertInteger(uslen, pus, 2, 2)
InsertInteger(&wfilename, pus, 4)
InsertInteger(24, objattrib, 0)
InsertInteger(&pus, objattrib, 8)
status := DllCall("ntdll\ZwCreateFile", "str", fh, "UInt", desiredaccess, "str", objattrib, "str", io, "UInt", 0, "UInt", fattribs, "UInt", sharemode, "UInt", createdist, "UInt", flags, "UInt", 0, "UInt", 0, "UInt")
return % ExtractInteger(fh)
}

SetUnicodeStr(ByRef out, str_)
{
VarSetCapacity(st1, 8, 0)
InsertInteger(0x530025, st1)
VarSetCapacity(out, (StrLen(str_) + 1) * 2, 0)
DllCall("wsprintfW", "str", out, "str", st1, "str", str_, "Cdecl UInt")
}

;pSource is a string (buffer) whose memory area contains a raw/binary integer at pOffset.
;The caller should pass true for pSigned to interpret the result as signed vs. unsigned.
;pSize is the size of PSource's integer in bytes (e.g. 4 bytes for a DWORD or Int).
;pSource must be ByRef to avoid corruption during the formal-to-actual copying process
;(since pSource might contain valid data beyond its first binary zero).
ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4)
{
Loop %pSize% ;Build the integer by adding up its bytes.
result += *(&pSource + pOffset + A_Index - 1) << 8 * (A_Index - 1)
if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
return result ;Signed vs. unsigned doesn't matter in these cases.
return -(0xFFFFFFFF - result + 1) ;Otherwise, convert the value (now known to be 32-bit) to its signed counterpart
}

;The caller must ensure that pDest has sufficient capacity. To preserve any existing contents in pDest,
;only pSize number of bytes starting at pOffset are altered in it.
InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4)
{
Loop %pSize% ;Copy each byte in the integer into the structure as raw binary data.
DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1, "UInt", 1, "UChar", pInteger >> 8 * (A_Index - 1) & 0xFF)
}


;;; Hotkeys

F12:: ;Show / Hide Taskbar
{
If TaskBar_State = Hidden
{
NumPut((ABS_ALWAYSONTOP := 0x2), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)
WinShow ahk_class Shell_TrayWnd
TaskBar_State = Visable
}
else
{
DetectHiddenWindows, On
VarSetCapacity(APPBARDATA, 36, 0) ;var mem limit
NumPut((ABS_ALWAYSONTOP := 0x2) | (ABS_AUTOHIDE := 0x1), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)
WinHide ahk_class Shell_TrayWnd
TaskBar_State = Hidden
}
}

;Disable for now
;#t:: ;Show / Hide Active Toolbar
;{
; WinSet, Style, ^0xC00000, A
;}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Burn_Cycle
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Burn_Cycle:

;Code Timer for Debugging...
;DllCall("QueryPerformanceCounter", "Int64*", CounterBefore) ;External Var, CPU Tick Timer
;StartTime := A_TickCount ;Internal Var, MS Timer

if IP_Change = 0 ;cludge for multi threading
{
GoSub Network_Monitor
}

if QuickLaunch_Mod = Enable
{
GoSub QuickLaunch_Mod
}

;Opera title bar remover mod
IfWinActive, - Opera
{
WinSet, Style, -0xC00000, - Opera

WinGetPos,,, Var_Width, A,,,
if (Var_Width > Desktop_Width) ;Seems ok, but the script needs reloading baised on the taskbar width otherwise the desktop width var is not refreshed :(
{
WinMove, - Opera,, -3, -3, %Desktop_Width%, %Desktop_Height%,, ;Slowdown Part..
; WinMove, - Opera,, -3, -3, 1922, %Desktop_Height%,, ;Slowdown Part..
}
}

;Firefox title bar remover mod
IfWinActive, - Mozilla Firefox
{
WinSet, Style, -0xC00000, - Mozilla Firefox

WinGetPos,,, Var_Width, A,,,
if (Var_Width > Desktop_Width) ;Seems ok, but the script needs reloading baised on the taskbar width otherwise the desktop width var is not refreshed :(
{
WinMove, - Mozilla Firefox,, -3, -3, %Desktop_Width%, %Desktop_Height%,,
}
}

;Download_Rate_Secs := Round(Download_Rate * (((A_TickCount - StartTime) / 1000), 1))
;Upload_Rate_Secs := Round(Upload_Rate * (((A_TickCount - StartTime) / 1000), 1))

;needs null check...
if (IP_Address = "127.0.0.1" || IP_Address = "0.0.0.0")
{
Menu, Tray, Tip, Disconnected
}
else
{
Menu, Tray, Tip, IP: %IP_Address%`nDownload Rate: %Download_Rate% K`nUpload Rate: %Upload_Rate% K`nDownloaded Total: %Downloaded_Total% K`nUploaded Total: %Uploaded_Total% K
}

;DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
;ElapsedTime_pc := (CounterAfter - CounterBefore)
;ToolTip, Burn_Cycle:`n%ElapsedTime_pc% Ticks`n%ElapsedTime_ms% ms, 0, 0

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Read_Cfg
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Read_Cfg:

IniRead, Main_Loop_Timing, %A_ScriptDir%\NEO_nTray.ini, Main, Main_Loop_Timing

IniRead, Aero_Peek, %A_ScriptDir%\NEO_nTray.ini, Extra, Aero_Peek
IniRead, QuickLaunch_Mod, %A_ScriptDir%\NEO_nTray.ini, Extra, QuickLaunch_Mod
IniRead, TaskBar_State, %A_ScriptDir%\NEO_nTray.ini, Extra, TaskBar_State

IniRead, Port_Viewer, %A_ScriptDir%\NEO_nTray.ini, App_Locations, Port_Viewer

IniRead, Network_Icons_Use_Default, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Use_Default
IniRead, Network_Icons_Custom_1, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_1
IniRead, Network_Icons_Custom_2, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_2
IniRead, Network_Icons_Custom_3, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_3
IniRead, Network_Icons_Custom_4, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_4
IniRead, Network_Icons_Custom_5, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_5
IniRead, Network_Use_Keyboard_Leds, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Use_Keyboard_Leds

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Main Menu
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Main_Menu:

Menu, Menu_Settings_Tray_Icon, add, Default, Set_Tray_Icons_Default
Menu, Menu_Settings_Tray_Icon, add, Custom, Set_Tray_Icons_Custom
Menu, Menu_Settings, add, Tray Icon, :Menu_Settings_Tray_Icon
Menu, Menu_Settings, Icon, Tray Icon, shell32.dll, 303 ;not good in win2k3

Menu, Menu_Settings_Keyboard_Leds, add, Disable, Set_Network_Use_Keyboard_Leds_Disable
Menu, Menu_Settings_Keyboard_Leds, add, Enable, Set_Network_Use_Keyboard_Leds_Enable
Menu, Menu_Settings, add, Keyboard LEDs, :Menu_Settings_Keyboard_Leds
Menu, Menu_Settings, Icon, Keyboard LEDs, main.cpl, 6

Menu, Menu_Settings, add

Menu, Menu_Settings_QuickLaunch_Mod, add, Disable, Set_QuickLaunch_Mod_Disable
Menu, Menu_Settings_QuickLaunch_Mod, add, Enable, Set_QuickLaunch_Mod_Enable
Menu, Menu_Settings, add, QuickLaunch Mod, :Menu_Settings_QuickLaunch_Mod
Menu, Menu_Settings, Icon, QuickLaunch Mod, shell32.dll, 40

Menu, Menu_Settings_Aero_Peek, add, Disable, Set_Aero_Peek_Disable
Menu, Menu_Settings_Aero_Peek, add, Enable, Set_Aero_Peek_Enable
Menu, Menu_Settings, add, Aero Peek, :Menu_Settings_Aero_Peek
Menu, Menu_Settings, Icon, Aero Peek, shell32.dll, 40

Menu, Menu_Settings, add, Win7 Taskbar Mod, Win7_Taskbar_Mod
Menu, Menu_Settings, Icon, Win7 Taskbar Mod, shell32.dll, 40

Menu, Menu_Settings, add

;I woud prefer to have ahk's built in help function right here, but I can't figuer out the code for it

Menu, User_Timer_QSR, add, Min, Set_User_Timer_QSR_Min
Menu, User_Timer_QSR, Icon, Min, shell32.dll, 13
Menu, User_Timer_QSR, add, Max, Set_User_Timer_QSR_Max
Menu, User_Timer_QSR, Icon, Max, shell32.dll, 13
Menu, User_Timer_QSR, add, 0.5 ms, Set_User_Timer_QSR_05
Menu, User_Timer_QSR, Icon, 0.5 ms, shell32.dll, 13
Menu, User_Timer_QSR, add, 1 ms, Set_User_Timer_QSR_1
Menu, User_Timer_QSR, Icon, 1 ms, shell32.dll, 13
Menu, User_Timer_QSR, add, 10 ms, Set_User_Timer_QSR_10
Menu, User_Timer_QSR, Icon, 10 ms, shell32.dll, 13
Menu, User_Timer_QSR, add, 15.6 ms, Set_User_Timer_QSR_156
Menu, User_Timer_QSR, Icon, 15.6 ms, shell32.dll, 13
Menu, Menu_Settings, add, User Timer QSR Max, :User_Timer_QSR
Menu, Menu_Settings, Icon, User Timer QSR Max, shell32.dll, 13

Menu, Menu_Settings_Dev, add, Edit Script, Edit ;This should only be valid in script form, not in compiled form, I need to figuer that out...
Menu, Menu_Settings_Dev, Icon, Edit Script, shell32.dll, 71
Menu, Menu_Settings, add, Dev, :Menu_Settings_Dev
Menu, Menu_Settings, Icon, Dev, shell32.dll, 161

Menu, Tray, add, Port Viewer, Port_View
Menu, Tray, Icon, Port Viewer, shell32.dll, 172

Menu, Tray, add, Log Viewer, Log_View
Menu, Tray, Icon, Log Viewer, shell32.dll, 172

Menu, Tray, add, Abort Connections, Abort_Connections
Menu, Tray, Icon, Abort Connections, shell32.dll, 172

Menu, Tray, add, Change IP, Change_IP
Menu, Tray, Icon, Change IP, shell32.dll, 19

if Network_Icons_Use_Default = Enable
{
Menu, Tray, add, Disconnect, Disconnect
Menu, Tray, Icon, Disconnect, netshell.dll, 71, 1 ;Disconnected
}
else
{
Menu, Tray, add, Disconnect, Disconnect
Menu, Tray, Icon, Disconnect, %Network_Icons_Custom_5%
}

if Network_Icons_Use_Default = Enable
{
Menu, Tray, add, Connect, Connect
Menu, Tray, Icon, Connect, netshell.dll, 69, 1 ;193, 0dn 0up
}
else
{
Menu, Tray, add, Connect, Connect
Menu, Tray, Icon, Connect, %Network_Icons_Custom_1%
}

Menu, Tray, add, Network Connections, Network_Connections
Menu, Tray, Icon, Network Connections, shell32.dll, 89

Menu, Tray, add

Menu, Tray, Add, Settings, :Menu_Settings
Menu, Tray, Icon, Settings, shell32.dll, 13

Menu, Tray, add

Menu, Tray, add, Reload, Reload
Menu, Tray, Icon, Reload, shell32.dll, 239

Menu, Tray, add, Pause, Pause ;This needs a better pause icon, and needs a play icon or whatever once paused
Menu, Tray, Icon, Pause, shell32.dll, 110

Menu, Tray, add

Menu, Tray, add, Exit, Exit
Menu, Tray, Icon, Exit, shell32.dll, 28

Menu, Tray, Click, 1 ;Change from double left click to single left click
Menu, Tray, Default, Port Viewer ;Default Entry to run on double click

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Main_Menu_Cfg
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Main_Menu_Cfg:

if Network_Icons_Use_Default = Enable
{
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 145
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 132
}
if Network_Icons_Use_Default = Disable
{
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 132
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 145
}

if Network_Use_Keyboard_Leds = Enable
{
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 145
}
if Network_Use_Keyboard_Leds = Disable
{
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 132
}


if QuickLaunch_Mod = Disable
{
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 132
}
if QuickLaunch_Mod = Enable
{
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 145
}

if Aero_Peek = Disable
{
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 132
}
if Aero_Peek = Enable
{
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 145
}

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Network_Monitor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Network_Monitor:

;Code Timer for Debugging...
;DllCall("QueryPerformanceCounter", "Int64*", CounterBefore) ;External Var, CPU Tick Timer

;Needs null check too...
if (IP_Address = "127.0.0.1" || IP_Address = "0.0.0.0")
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 71, 1 ;Disconnected
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_5%
}
if Network_Use_Keyboard_Leds = Enable
{
GetKeyState, KeyState, ScrollLock, T
if KeyState = U
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
}

return
}

Download_Rate_New = 0
Upload_Rate_New = 0

GetIfTable(tb)

;notes:
; Return *ptr | *++ptr << 8 | *++ptr << 16 | *++ptr << 24
;typedef struct _MIB_IFROW {
; WCHAR wszName[MAX_INTERFACE_NAME_LEN];
; DWORD dwIndex;
; DWORD dwType;
; DWORD dwMtu;
; DWORD dwSpeed;
; DWORD dwPhysAddrLen;
; BYTE bPhysAddr[MAXLEN_PHYSADDR];
; DWORD dwAdminStatus;
; DWORD dwOperStatus;
; DWORD dwLastChange;
; DWORD dwInOctets; 552?
; DWORD dwInUcastPkts; 556?
; DWORD dwInNUcastPkts; 560?
; DWORD dwInDiscards; 564?
; DWORD dwInErrors; 568?
; DWORD dwInUnknownProtos; 572?
; DWORD dwOutOctets; 576?
; DWORD dwOutUcastPkts;
; DWORD dwOutNUcastPkts;
; DWORD dwOutDiscards;
; DWORD dwOutErrors;
; DWORD dwOutQLen;
; DWORD dwDescrLen;
; BYTE bDescr[MAXLEN_IFDESCR];
;} MIB_IFROW, *PMIB_IFROW;

;;Include this codes to exclude the loopback interface.
;;If DecodeInteger(&tb + 4 + 860 * (A_Index - 1) + 516) = 24
;;Continue
Loop, % DecodeInteger(&tb)
{
Download_Rate_New += DecodeInteger(&tb + 4 + 860 * (A_Index - 1) + 552) ;Total Incoming Octets
Upload_Rate_New += DecodeInteger(&tb + 4 + 860 * (A_Index - 1) + 576) ;Total Outgoing Octets
}

;Needs odd colon char thingy to work...
Download_Rate := Round(((Download_Rate_New - Download_Rate_Old) / 48), 1) ;Download rate calculation
Upload_Rate := Round(((Upload_Rate_New - Upload_Rate_Old) / 48), 1) ;Upload rate calculation

;Offline Testing...
;if DL_Old = %Download_Rate%
;{
; Download_Rate := Round((120.5 / 1024), 1)
;}
;if UP_Old = %Upload_Rate%
;{
; Upload_Rate := Round((120.5 / 1024), 1)
;}
;DL_Old = %Download_Rate%
;UP_Old = %Upload_Rate%


;Needs odd syntax
;Needs a few microsecs of latency before lighting up the keyboard leds

if (Download_Rate = 0 && Upload_Rate = 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 69, 1 ;193, 0dn 0up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_1%
}
if Network_Use_Keyboard_Leds = Enable
{
KeyboardLED(4, "Off")
Sleep, 1
KeyboardLED(1, "Off")
}
}
if (Download_Rate > 0 && Upload_Rate = 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 68, 1 ;192, +dn 0up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_2%
}
if Network_Use_Keyboard_Leds = Enable
{
KeyboardLED(4, "Off")
Sleep, 1
KeyboardLED(1, "On")
}
}
if (Download_Rate = 0 && Upload_Rate > 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 67, 1 ;191, 0dn +up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_3%
}
if Network_Use_Keyboard_Leds = Enable
{
Sleep, 1
KeyboardLED(1, "Off")
KeyboardLED(4, "On")
}
}
if (Download_Rate > 0 && Upload_Rate > 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 66, 1 ;190, +dn +up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_4%
}
if Network_Use_Keyboard_Leds = Enable
{
KeyboardLED(4, "On")
Sleep, 1
KeyboardLED(1, "On")
}
}


;Needs odd colon char to work...
Downloaded_Total := Round(Download_Rate_New / 48)
Uploaded_Total := Round(Upload_Rate_New / 48)

Download_Rate_Old = %Download_Rate_New%
Upload_Rate_Old = %Upload_Rate_New%

;DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
;ElapsedTime_pc := (CounterAfter - CounterBefore)

;ToolTip, Network_Monitor:`n%ElapsedTime_pc% Ticks`n%ElapsedTime_ms% ms, 0, 0

Return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; QuickLaunch_Mod
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

QuickLaunch_Mod:

Mouse_State_LButton_Old = %Mouse_State_LButton%

MouseGetPos,,,, Win32_Control
GetKeyState, Mouse_State_LButton, LButton

;small issue with timing and mod, if I was previously over the toolbar and now on the taskbar with the same toolbar name, it takes a little while to reg to get rid of the ctrl key

;issue with mod to taskbar part, new
;after windows is already open it continues to use the ctrl mod, which doesn't work to well afterwards

if A_OSVersion = WIN_7
{
if ((Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D")
; if ((Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D" || (Win32_Control = "MSTaskListWClass1") && Mouse_State_LButton = "D")
{
Send, {Control down}
}
else if (Mouse_State_LButton_Old = "D" && Mouse_State_LButton = "U") ;cheap hack
{
Send, {Control up}
}
}
else if A_OSVersion = WIN_2003
{
if ((Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D")
; if ((Win32_Control = "ToolbarWindow322") && Mouse_State_LButton = "D" || (Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D")
{
Send, {Control down}
}
else if (Mouse_State_LButton_Old = "D" && Mouse_State_LButton = "U") ;cheap hack
{
Send, {Control up}
}
}

;324...
;323 is the issue on win2k3 slim, taskbar becomes the other toolbar.
;323 is the one that works in win7
;322 is the one that works in win2k3

;MSTaskListWClass1 = taskbar


;I can either scan for the os or I can patch it out correctly
;1st one is the issue

;ToolbarWindow322 Win2k3 single col
;causes issues on win2k3, crtl gets stuck on the taskbar

;ToolbarWindow323 Win7 double col

;This code needs work, works great in win7, but it needs to be worked on in xp and win2k3

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Port_View
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Port_View:
;MsgBox, %Port_Viewer%
Run %Port_Viewer%
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Log_View
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Log_View:
;MsgBox, %Log_Viewer%
;Run %Log_Viewer%

;Proxomitron Log Window
PostMessage, 0x111, 0x3F5, 0,, ahk_class PrxTronCls

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Abort_Connections
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Abort_Connections:

;Proxomitron Abort Connections
PostMessage, 0x111, 0x3F0, 0,, ahk_class PrxTronCls

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Network_Connections
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Network_Connections:

;check to see if netman is enabled via reg, if so then don't run the special code below.
;If it is disabled at runtime, then run the special code below
;Would like to see a sub menu with net connections...

;Big prob, the thign creates a new proccess which I can't seem to track yet.
;So my script stops the netman service before exiting, or it keeps it in mem, both are not cool

;RunWait %ComSpec% /C "sc config netman start= demand",, Hide
;RunWait %ComSpec% /C "net start netman",, Hide

Run ::{7007acc7-3202-11d1-aad2-00805fc1270e},,, Win32_PID
;WinWaitClose ahk_pid %Win32_PID% ;Doesn't actually work...

;RunWait %ComSpec% /C "net stop netman",, Hide
;RunWait %ComSpec% /C "sc config netman start= disabled",, Hide

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Change_IP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Change_IP:

;issue here if ip was originally null
if (IP_Address = "127.0.0.1" || IP_Address = "0.0.0.0")
{
return
}

IP_Old = %IP_Address%

Download_Rate_New = 0
Upload_Rate_New = 0
Download_Rate_Old = 0
Upload_Rate_Old = 0
Downloaded_Total = 0
Uploaded_Total = 0

TrayTip, NEO_nTray, Changing IP...,, 16
Menu, Tray, Tip, Changing IP...

IP_Change = 1 ;cludge for multi threading

if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 71, 1 ;Disconnected
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_5%
}

if Network_Use_Keyboard_Leds = Enable
{
GetKeyState, KeyState, ScrollLock, T
if KeyState = U
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
}

IP_Change_Count = 0



While (A_IPAddress1 = IP_OLD)
{
IP_Change_Count += 1

if IP_Change_Count = 10
{
TrayTip, NEO_nTray, I tried to change your IP but after %IP_Change_Count% attempts I gave up...,, 16
Sleep 3000 ;Give the user 3 secs to read the msg...
Reload
return
}
else
{
RunWait %ComSpec% /C "IPCONFIG /RELEASE",, Hide
Sleep (1000 * %IP_Change_Count%) ;increase idle by 1sec per loop
RunWait %ComSpec% /C "IPCONFIG /RENEW",, Hide
}
}



TrayTip, NEO_nTray, Old IP Address: %IP_Old%`nNew IP Address: %A_IPAddress1%,, 16
IP_Change = 0 ;Cludge for multi-threading
Sleep 3000 ;Give the user 3 secs to read the msg...

Reload ;Cludge for mem leak on A_IPAddress1, reload the whole darn program after getting a new ip, init should pick up the new ip

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Disconnect
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Disconnect:

RunWait %ComSpec% /C "IPCONFIG /RELEASE",, Hide

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Connect
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Connect:

RunWait %ComSpec% /C "IPCONFIG /RENEW",, Hide

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Init
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Init:

IP_Change = 0 ;cludge for multi threading

;Try to reduce the mem leak as much as possible, and only call this once on init and not in the main loop, it won't beable to auto detect the ip at any given time but it should be good enough
VarSetCapacity(IP_Address, 15, 0) ;Var mem limit
VarSetCapacity(A_IP_Address, 15, 0) ;Var mem limit
IP_Address = %A_IPAddress1%

;Hides the everything on the taskbar including it's self, but leaves the start button
;WinHide ahk_class Shell_TrayWnd

GoSub Read_Cfg
GoSub Main_Menu
GoSub Main_Menu_Cfg

if Aero_Peek = Enable
{
GoSub Set_Aero_Peek_Enable
}
else
{
GoSub Set_Aero_Peek_Disable
}

SysGet, Desktop_Width, 61
SysGet, Desktop_Height, 62
EnvSub, Desktop_Width, 2
EnvSub, Desktop_Height, 2

SysGet, Monitor_Width, 0
SysGet, Monitor_Height, 1

;User Timer Max Quantum Slice Resolution
;Quantum timer resolution
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 156000) ;15.600 ms
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 100000) ;10.000 ms
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 10000) ;1.000 ms
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 5000) ;0.500 ms
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 1) ;Min


;Run "H:\Program Files\Proxomitron\Proxomitron-MOD.exe"
;Sleep, 250
;bypass
;PostMessage, 0x111, 0x3EF, 0,, ahk_class PrxTronCls
;Tray_Icon_hWnd = % TrayIcons()
;RemoveTrayIcon(Tray_Icon_hWnd, 1, 2)

;Reduce Mem Usage
Process, wait, AutoHotKey.exe ;Find the process
NewPID = %ErrorLevel% ;Save the PID
EmptyMem(NewPID)


return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Edit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Edit:

Edit

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Reload
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Reload:

Reload

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Pause
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Pause:

Pause

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Exit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Exit:

if Network_Use_Keyboard_Leds = Enable
{
GetKeyState, KeyState, ScrollLock, T
if KeyState = U
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
}

ExitApp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




NEO_nTray.ini




[Main]

;Main loop timing in (ms)
Main_Loop_Timing=20


[App_Locations]

;External port viewer program location
Port_Viewer="H:\Program Files\TCPIP View\Tcpview.exe"
;Port_Viewer="NETSTAT -a -b -n 100"


[Network]

;Use the built in default windows icons for the network status
;Network_Icons_Use_Default=Enable
Network_Icons_Use_Default=Disable

;Custom network status icon locations
;Network_Icons_Custom_1="%APPDATA%\Microsoft\Windows\Start Menu\Programs\15.ico"
;Network_Icons_Custom_2="%APPDATA%\Microsoft\Windows\Start Menu\Programs\16.ico"
;Network_Icons_Custom_3="%APPDATA%\Microsoft\Windows\Start Menu\Programs\17.ico"
;Network_Icons_Custom_4="%APPDATA%\Microsoft\Windows\Start Menu\Programs\14.ico"
;Network_Icons_Custom_5="%APPDATA%\Microsoft\Windows\Start Menu\Programs\13.ico"

Network_Icons_Custom_1="H:\15.ico"
Network_Icons_Custom_2="H:\16.ico"
Network_Icons_Custom_3="H:\17.ico"
Network_Icons_Custom_4="H:\14.ico"
Network_Icons_Custom_5="H:\13.ico"

Network_Use_Keyboard_Leds=Disable
;Network_Use_Keyboard_Leds=Enable


[Extra]

;QuickLaunch_Mod=Disable
QuickLaunch_Mod=Enable

Aero_Peek=Disable
;Aero_Peek=Enable

TaskBar_State=Visable
;TaskBar_State=Hidden

NEOAethyr
05-09-2012, 07:11 AM
Tiny update, after modding win8 up a bit I found that dwm.exe is run from winlogon.exe from then on.
So microsoft's taskkill program wasn't up for that anymore...
I replaced the line with pskill instead and that works, doesn't come with windows though..., not hard to find howevers...

NEO_nTray.ahk / .exe



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; NEO_nTray (NEO's Network Tray Tool)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Notes:

;ctrl left click also works for th etaskbar as well, restoring the last window
;so I may want to redo the code to include it

;
; %A_IPAddress1% Leaks massive amounts of memory, DO NOT use it!!!

;Code Timer for Debugging...
;DllCall("QueryPerformanceCounter", "Int64*", CounterBefore) ;External Var, CPU Tick Timer
;StartTime := A_TickCount ;Internal Var, MS Timer
;Sleep 1000
;ElapsedTime_ms := (A_TickCount - StartTime)
;DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
;ElapsedTime_pc := (CounterAfter - CounterBefore)
;ToolTip, %ElapsedTime_pc% Ticks`n%ElapsedTime_ms% ms

;This thing has gotten slower over the last rev or so...


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Entry Point
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#Persistent
#SingleInstance, Force
#MaxMem 1
#MaxThreads 3
SetBatchLines -1
Process, Priority,, BelowNormal
Menu, Tray, NoStandard ;Disable Standard AHK Menu Entries
SetTitleMatchMode, 2
DetectHiddenWindows, On ;Needed to detect proxomitron while minimized

GoSub Init

StartTime := A_TickCount ;Internal Var, MS Timer
ElapsedTime_ms := (A_TickCount - StartTime)

SetTimer, Burn_Cycle, %Main_Loop_Timing%
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Functions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

EmptyMem(PIDtoEmpty)
{
h:= DllCall("OpenProcess", "UInt", 0x001F0FFF, "Int", 0, "Int", PIDtoEmpty)
DllCall("SetProcessWorkingSetSize", "UInt", h, "Int", -1, "Int", -1)
DllCall("CloseHandle", "Int", h)
}



GetTrayBar()
{
ControlGet, hParent, hWnd,, TrayNotifyWnd1 , ahk_class Shell_TrayWnd
ControlGet, hChild , hWnd,, ToolbarWindow321, ahk_id %hParent%
Loop
{
ControlGet, hWnd, hWnd,, ToolbarWindow32%A_Index%, ahk_class Shell_TrayWnd
If Not hWnd
Break
Else If hWnd = %hChild%
{
idxTB := A_Index
Break
}
}
Return idxTB
}


TrayIcons(sExeName = "Proxomitron-MOD.exe")
{
WinGet, pidTaskbar, PID, ahk_class Shell_TrayWnd
hProc:= DllCall("OpenProcess", "Uint", 0x38, "int", 0, "Uint", pidTaskbar)
pProc:= DllCall("VirtualAllocEx", "Uint", hProc, "Uint", 0, "Uint", 32, "Uint", 0x1000, "Uint", 0x4)
idxTB:= GetTrayBar()
SendMessage, 0x418, 0, 0, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_BUTTONCOUNT
Loop, %ErrorLevel%
{
SendMessage, 0x417, A_Index-1, pProc, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_GETBUTTON
VarSetCapacity(btn,32,0), VarSetCapacity(nfo,32,0)
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", pProc, "Uint", &btn, "Uint", 32, "Uint", 0)
iBitmap := NumGet(btn, 0)
idn := NumGet(btn, 4)
Statyle := NumGet(btn, 8)
If dwData := NumGet(btn,12)
iString := NumGet(btn,16)
Else dwData := NumGet(btn,16,"int64"), iString:=NumGet(btn,24,"int64")
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", dwData, "Uint", &nfo, "Uint", 32, "Uint", 0)
If NumGet(btn,12)
hWnd := NumGet(nfo, 0)
, uID := NumGet(nfo, 4)
, nMsg := NumGet(nfo, 8)
, hIcon := NumGet(nfo,20)
Else hWnd := NumGet(nfo, 0,"int64"), uID:=NumGet(nfo, 8), nMsg:=NumGet(nfo,12)
WinGet, pid, PID, ahk_id %hWnd%
WinGet, sProcess, ProcessName, ahk_id %hWnd%
WinGetClass, sClass, ahk_id %hWnd%
If !sExeName || (sExeName = sProcess) || (sExeName = pid)
VarSetCapacity(sTooltip,128), VarSetCapacity(wTooltip,128*2)
, DllCall("ReadProcessMemory", "Uint", hProc, "Uint", iString, "Uint", &wTooltip, "Uint", 128*2, "Uint", 0)
, DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "str", wTooltip, "int", -1, "str", sTooltip, "int", 128, "Uint", 0, "Uint", 0)
; , sTrayIcons .= "idx: " . A_Index-1 . " | idn: " . idn . " | Pid: " . pid . " | uID: " . uID . " | MessageID: " . nMsg . " | hWnd: " . hWnd . " | Class: " . sClass . " | Process: " . sProcess . "`n" . " | Tooltip: " . sTooltip . "`n"
, sTrayIcons .= "" . hWnd . ""
}
DllCall("VirtualFreeEx", "Uint", hProc, "Uint", pProc, "Uint", 0, "Uint", 0x8000)
DllCall("CloseHandle", "Uint", hProc)
Return sTrayIcons
}




RemoveTrayIcon(hWnd, uID, nMsg = 0, hIcon = 0, nRemove = 2)
{
NumPut(VarSetCapacity(ni,444,0), ni)
NumPut(hWnd , ni, 4)
NumPut(uID , ni, 8)
NumPut(1|2|4, ni,12)
NumPut(nMsg , ni,16)
NumPut(hIcon, ni,20)
Return DllCall("shell32\Shell_NotifyIconA", "Uint", nRemove, "Uint", &ni)
}





;User Timer Max Quantum Slice Resolution
;Quantum timer resolution
Set_User_Timer_QSR_Min:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 1) ;0.500 ms
return

Set_User_Timer_QSR_Max:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 999999) ;0.500 ms
return

Set_User_Timer_QSR_05:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 5000) ;0.500 ms
return

Set_User_Timer_QSR_1:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 10000) ;1.000 ms
return

Set_User_Timer_QSR_10:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 100000) ;10.000 ms
return

Set_User_Timer_QSR_156:
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 156000) ;15.600 ms
return


Set_Tray_Icons_Default:
Network_Icons_Use_Default = Enable
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 145
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 132
return

Set_Tray_Icons_Custom:
Network_Icons_Use_Default = Disable
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 132
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 145
return


Set_Network_Use_Keyboard_Leds_Disable:
Network_Use_Keyboard_Leds = Disable
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 132
GetKeyState, KeyState, ScrollLock, T ;Bug fix for threading issues, so non of the leds end up getting stuck on...
if KeyState = U ;this one gets stuck on anyways every time it seems
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
return

Set_Network_Use_Keyboard_Leds_Enable:
Network_Use_Keyboard_Leds = Enable
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 145
return


Set_QuickLaunch_Mod_Disable:
QuickLaunch_Mod = Disable
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 132
return

Set_QuickLaunch_Mod_Enable:
QuickLaunch_Mod = Enable
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 145
return


Set_Aero_Peek_Disable:
Aero_Peek = Disable
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 132
Control, Disable,, TrayShowDesktopButtonWClass1, ahk_class Shell_TrayWnd
return

Set_Aero_Peek_Enable:
Aero_Peek = Enable
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 145
Control, Enable,, TrayShowDesktopButtonWClass1, ahk_class Shell_TrayWnd
return


Win7_Taskbar_Mod:

RunWait %ComSpec% /C "net stop UxSms",, Hide ;Stop UxSms

DetectHiddenWindows, On ;Enable Taskbar Autohide
VarSetCapacity(APPBARDATA, 36, 0) ;Var mem limit

;After modding win8 a bit winlogon exe's dwm.exe and taskkill cannot find it, so pskill does the trick for now
;RunWait %ComSpec% /C "taskkill /im dwm.exe /f",, Hide ;Restart DWM (Windows 8)
RunWait %ComSpec% /C "pskill dwm.exe",, Hide ;Restart DWM (Windows 8)

NumPut((ABS_ALWAYSONTOP := 0x2) | (ABS_AUTOHIDE := 0x1), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0x0A), "UInt", &APPBARDATA)

WinHide ahk_class Shell_TrayWnd
RunWait %ComSpec% /C "net start UxSms",, Hide ;Restart UxSms

NumPut((ABS_ALWAYSONTOP := 0x2), APPBARDATA, 32, "UInt") ;Disable Taskbar Autohide
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)

WinShow ahk_class Shell_TrayWnd
Reload ;Needed to refresh the desktop width var...
return


;;; Network Monitor Functions:

GetIfTable(ByRef tb, Border = True)
{
nSize := 4 + 860 * GetNumberOfInterfaces() + 8 ;Var mem limit calc
VarSetCapacity(tb, nSize) ;Var mem limit
Return DllCall("iphlpapi\GetIfTable", "Uint", &tb, "UintP", nSize, "int", Border)
}

GetNumberOfInterfaces()
{
DllCall("iphlpapi\GetNumberOfInterfaces", "UintP", nIf)
Return nIf
}

DecodeInteger(ptr)
{
Return *ptr | *++ptr << 8 | *++ptr << 16 | *++ptr << 24
}


;notes:
;typedef struct _MIB_IFROW {
; WCHAR wszName[MAX_INTERFACE_NAME_LEN];
; DWORD dwIndex;
; DWORD dwType;
; DWORD dwMtu;
; DWORD dwSpeed;
; DWORD dwPhysAddrLen;
; BYTE bPhysAddr[MAXLEN_PHYSADDR];
; DWORD dwAdminStatus;
; DWORD dwOperStatus;
; DWORD dwLastChange;
; DWORD dwInOctets;
; DWORD dwInUcastPkts;
; DWORD dwInNUcastPkts;
; DWORD dwInDiscards;
; DWORD dwInErrors;
; DWORD dwInUnknownProtos;
; DWORD dwOutOctets;
; DWORD dwOutUcastPkts;
; DWORD dwOutNUcastPkts;
; DWORD dwOutDiscards;
; DWORD dwOutErrors;
; DWORD dwOutQLen;
; DWORD dwDescrLen;
; BYTE bDescr[MAXLEN_IFDESCR];
;} MIB_IFROW, *PMIB_IFROW;


;;; Keyboard LED Functions:

KeyboardLED(LEDvalue, Cmd) ;LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4, Cmd = On / Off
{
Static h_device
If ! h_device ;initialise
{
device =\Device\KeyBoardClass0
SetUnicodeStr(fn, device)
h_device := NtCreateFile(fn, 0 + 0x00000100 + 0x00000080 + 0x00100000, 1, 1, 0x00000040 + 0x00000020, 0)
}

VarSetCapacity(output_actual, 4, 0)
input_size = 4
VarSetCapacity(input, input_size, 0)

If Cmd = On ;forces all choosen LED's to ON (LEDvalue = 0 -> LED's according to keystate)
{
KeyLED := LEDvalue | (GetKeyState("ScrollLock", "T") + 2 * GetKeyState("NumLock", "T") + 4 * GetKeyState("CapsLock", "T"))
}
If Cmd = Off ;forces all choosen LED's to OFF (LEDvalue = 0 -> LED's according to keystate)
{
LEDvalue := LEDvalue ^ 7
KeyLED := LEDvalue & (GetKeyState("ScrollLock", "T") + 2 * GetKeyState("NumLock", "T") + 4 * GetKeyState("CapsLock", "T"))
}
;EncodeInteger(KeyLED, 1, &input, 2) ;input bit pattern (KeyLED): bit 0 = scrolllock, bit 1 = numlock, bit 2 = capslock
input := Chr(1) Chr(1) Chr(KeyLED)
input := Chr(1)
success := DllCall("DeviceIoControl", "uint", h_device, "uint", CTL_CODE(0x0000000B, 2, 0, 0), "uint", &input, "uint", input_size, "uint", 0, "uint", 0, "uint", &output_actual, "uint", 0)
}

CTL_CODE(p_device_type, p_function, p_method, p_access)
{
Return, (p_device_type << 16) | (p_access << 14) | (p_function << 2) | p_method
}

NtCreateFile(ByRef wfilename, desiredaccess, sharemode, createdist, flags, fattribs)
{
VarSetCapacity(fh, 4, 0)
VarSetCapacity(objattrib, 24, 0)
VarSetCapacity(io, 8, 0)
VarSetCapacity(pus, 8)
uslen := DllCall("lstrlenW", "str", wfilename) * 2
InsertInteger(uslen, pus, 0, 2)
InsertInteger(uslen, pus, 2, 2)
InsertInteger(&wfilename, pus, 4)
InsertInteger(24, objattrib, 0)
InsertInteger(&pus, objattrib, 8)
status := DllCall("ntdll\ZwCreateFile", "str", fh, "UInt", desiredaccess, "str", objattrib, "str", io, "UInt", 0, "UInt", fattribs, "UInt", sharemode, "UInt", createdist, "UInt", flags, "UInt", 0, "UInt", 0, "UInt")
return % ExtractInteger(fh)
}

SetUnicodeStr(ByRef out, str_)
{
VarSetCapacity(st1, 8, 0)
InsertInteger(0x530025, st1)
VarSetCapacity(out, (StrLen(str_) + 1) * 2, 0)
DllCall("wsprintfW", "str", out, "str", st1, "str", str_, "Cdecl UInt")
}

;pSource is a string (buffer) whose memory area contains a raw/binary integer at pOffset.
;The caller should pass true for pSigned to interpret the result as signed vs. unsigned.
;pSize is the size of PSource's integer in bytes (e.g. 4 bytes for a DWORD or Int).
;pSource must be ByRef to avoid corruption during the formal-to-actual copying process
;(since pSource might contain valid data beyond its first binary zero).
ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4)
{
Loop %pSize% ;Build the integer by adding up its bytes.
result += *(&pSource + pOffset + A_Index - 1) << 8 * (A_Index - 1)
if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
return result ;Signed vs. unsigned doesn't matter in these cases.
return -(0xFFFFFFFF - result + 1) ;Otherwise, convert the value (now known to be 32-bit) to its signed counterpart
}

;The caller must ensure that pDest has sufficient capacity. To preserve any existing contents in pDest,
;only pSize number of bytes starting at pOffset are altered in it.
InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4)
{
Loop %pSize% ;Copy each byte in the integer into the structure as raw binary data.
DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1, "UInt", 1, "UChar", pInteger >> 8 * (A_Index - 1) & 0xFF)
}


;;; Hotkeys

F12:: ;Show / Hide Taskbar
{
If TaskBar_State = Hidden
{
NumPut((ABS_ALWAYSONTOP := 0x2), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)
WinShow ahk_class Shell_TrayWnd
TaskBar_State = Visable
}
else
{
DetectHiddenWindows, On
VarSetCapacity(APPBARDATA, 36, 0) ;var mem limit
NumPut((ABS_ALWAYSONTOP := 0x2) | (ABS_AUTOHIDE := 0x1), APPBARDATA, 32, "UInt")
DllCall("Shell32.dll\SHAppBarMessage", "UInt", (ABM_SETSTATE := 0xA), "UInt", &APPBARDATA)
WinHide ahk_class Shell_TrayWnd
TaskBar_State = Hidden
}
}

;Disable for now
;#t:: ;Show / Hide Active Toolbar
;{
; WinSet, Style, ^0xC00000, A
;}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Burn_Cycle
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Burn_Cycle:

;Code Timer for Debugging...
;DllCall("QueryPerformanceCounter", "Int64*", CounterBefore) ;External Var, CPU Tick Timer
;StartTime := A_TickCount ;Internal Var, MS Timer

if IP_Change = 0 ;cludge for multi threading
{
GoSub Network_Monitor
}

if QuickLaunch_Mod = Enable
{
GoSub QuickLaunch_Mod
}

;Opera title bar remover mod
IfWinActive, - Opera
{
WinSet, Style, -0xC00000, - Opera

WinGetPos,,, Var_Width, A,,,
if (Var_Width > Desktop_Width) ;Seems ok, but the script needs reloading baised on the taskbar width otherwise the desktop width var is not refreshed :(
{
WinMove, - Opera,, -3, -3, %Desktop_Width%, %Desktop_Height%,, ;Slowdown Part..
; WinMove, - Opera,, -3, -3, 1922, %Desktop_Height%,, ;Slowdown Part..
}
}

;Firefox title bar remover mod
IfWinActive, - Mozilla Firefox
{
WinSet, Style, -0xC00000, - Mozilla Firefox

WinGetPos,,, Var_Width, A,,,
if (Var_Width > Desktop_Width) ;Seems ok, but the script needs reloading baised on the taskbar width otherwise the desktop width var is not refreshed :(
{
WinMove, - Mozilla Firefox,, -3, -3, %Desktop_Width%, %Desktop_Height%,,
}
}

;Download_Rate_Secs := Round(Download_Rate * (((A_TickCount - StartTime) / 1000), 1))
;Upload_Rate_Secs := Round(Upload_Rate * (((A_TickCount - StartTime) / 1000), 1))

;needs null check...
if (IP_Address = "127.0.0.1" || IP_Address = "0.0.0.0")
{
Menu, Tray, Tip, Disconnected
}
else
{
Menu, Tray, Tip, IP: %IP_Address%`nDownload Rate: %Download_Rate% K`nUpload Rate: %Upload_Rate% K`nDownloaded Total: %Downloaded_Total% K`nUploaded Total: %Uploaded_Total% K
}

;DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
;ElapsedTime_pc := (CounterAfter - CounterBefore)
;ToolTip, Burn_Cycle:`n%ElapsedTime_pc% Ticks`n%ElapsedTime_ms% ms, 0, 0

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Read_Cfg
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Read_Cfg:

IniRead, Main_Loop_Timing, %A_ScriptDir%\NEO_nTray.ini, Main, Main_Loop_Timing

IniRead, Aero_Peek, %A_ScriptDir%\NEO_nTray.ini, Extra, Aero_Peek
IniRead, QuickLaunch_Mod, %A_ScriptDir%\NEO_nTray.ini, Extra, QuickLaunch_Mod
IniRead, TaskBar_State, %A_ScriptDir%\NEO_nTray.ini, Extra, TaskBar_State

IniRead, Port_Viewer, %A_ScriptDir%\NEO_nTray.ini, App_Locations, Port_Viewer

IniRead, Network_Icons_Use_Default, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Use_Default
IniRead, Network_Icons_Custom_1, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_1
IniRead, Network_Icons_Custom_2, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_2
IniRead, Network_Icons_Custom_3, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_3
IniRead, Network_Icons_Custom_4, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_4
IniRead, Network_Icons_Custom_5, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Icons_Custom_5
IniRead, Network_Use_Keyboard_Leds, %A_ScriptDir%\NEO_nTray.ini, Network, Network_Use_Keyboard_Leds

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Main Menu
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Main_Menu:

Menu, Menu_Settings_Tray_Icon, add, Default, Set_Tray_Icons_Default
Menu, Menu_Settings_Tray_Icon, add, Custom, Set_Tray_Icons_Custom
Menu, Menu_Settings, add, Tray Icon, :Menu_Settings_Tray_Icon
Menu, Menu_Settings, Icon, Tray Icon, shell32.dll, 303 ;not good in win2k3

Menu, Menu_Settings_Keyboard_Leds, add, Disable, Set_Network_Use_Keyboard_Leds_Disable
Menu, Menu_Settings_Keyboard_Leds, add, Enable, Set_Network_Use_Keyboard_Leds_Enable
Menu, Menu_Settings, add, Keyboard LEDs, :Menu_Settings_Keyboard_Leds
Menu, Menu_Settings, Icon, Keyboard LEDs, main.cpl, 6

Menu, Menu_Settings, add

Menu, Menu_Settings_QuickLaunch_Mod, add, Disable, Set_QuickLaunch_Mod_Disable
Menu, Menu_Settings_QuickLaunch_Mod, add, Enable, Set_QuickLaunch_Mod_Enable
Menu, Menu_Settings, add, QuickLaunch Mod, :Menu_Settings_QuickLaunch_Mod
Menu, Menu_Settings, Icon, QuickLaunch Mod, shell32.dll, 40

Menu, Menu_Settings_Aero_Peek, add, Disable, Set_Aero_Peek_Disable
Menu, Menu_Settings_Aero_Peek, add, Enable, Set_Aero_Peek_Enable
Menu, Menu_Settings, add, Aero Peek, :Menu_Settings_Aero_Peek
Menu, Menu_Settings, Icon, Aero Peek, shell32.dll, 40

Menu, Menu_Settings, add, Win7 Taskbar Mod, Win7_Taskbar_Mod
Menu, Menu_Settings, Icon, Win7 Taskbar Mod, shell32.dll, 40

Menu, Menu_Settings, add

;I woud prefer to have ahk's built in help function right here, but I can't figuer out the code for it

Menu, User_Timer_QSR, add, Min, Set_User_Timer_QSR_Min
Menu, User_Timer_QSR, Icon, Min, shell32.dll, 13
Menu, User_Timer_QSR, add, Max, Set_User_Timer_QSR_Max
Menu, User_Timer_QSR, Icon, Max, shell32.dll, 13
Menu, User_Timer_QSR, add, 0.5 ms, Set_User_Timer_QSR_05
Menu, User_Timer_QSR, Icon, 0.5 ms, shell32.dll, 13
Menu, User_Timer_QSR, add, 1 ms, Set_User_Timer_QSR_1
Menu, User_Timer_QSR, Icon, 1 ms, shell32.dll, 13
Menu, User_Timer_QSR, add, 10 ms, Set_User_Timer_QSR_10
Menu, User_Timer_QSR, Icon, 10 ms, shell32.dll, 13
Menu, User_Timer_QSR, add, 15.6 ms, Set_User_Timer_QSR_156
Menu, User_Timer_QSR, Icon, 15.6 ms, shell32.dll, 13
Menu, Menu_Settings, add, User Timer QSR Max, :User_Timer_QSR
Menu, Menu_Settings, Icon, User Timer QSR Max, shell32.dll, 13

Menu, Menu_Settings_Dev, add, Edit Script, Edit ;This should only be valid in script form, not in compiled form, I need to figuer that out...
Menu, Menu_Settings_Dev, Icon, Edit Script, shell32.dll, 71
Menu, Menu_Settings, add, Dev, :Menu_Settings_Dev
Menu, Menu_Settings, Icon, Dev, shell32.dll, 161

Menu, Tray, add, Port Viewer, Port_View
Menu, Tray, Icon, Port Viewer, shell32.dll, 172

Menu, Tray, add, Log Viewer, Log_View
Menu, Tray, Icon, Log Viewer, shell32.dll, 172

Menu, Tray, add, Abort Connections, Abort_Connections
Menu, Tray, Icon, Abort Connections, shell32.dll, 172

Menu, Tray, add, Change IP, Change_IP
Menu, Tray, Icon, Change IP, shell32.dll, 19

if Network_Icons_Use_Default = Enable
{
Menu, Tray, add, Disconnect, Disconnect
Menu, Tray, Icon, Disconnect, netshell.dll, 71, 1 ;Disconnected
}
else
{
Menu, Tray, add, Disconnect, Disconnect
Menu, Tray, Icon, Disconnect, %Network_Icons_Custom_5%
}

if Network_Icons_Use_Default = Enable
{
Menu, Tray, add, Connect, Connect
Menu, Tray, Icon, Connect, netshell.dll, 69, 1 ;193, 0dn 0up
}
else
{
Menu, Tray, add, Connect, Connect
Menu, Tray, Icon, Connect, %Network_Icons_Custom_1%
}

Menu, Tray, add, Network Connections, Network_Connections
Menu, Tray, Icon, Network Connections, shell32.dll, 89

Menu, Tray, add

Menu, Tray, Add, Settings, :Menu_Settings
Menu, Tray, Icon, Settings, shell32.dll, 13

Menu, Tray, add

Menu, Tray, add, Reload, Reload
Menu, Tray, Icon, Reload, shell32.dll, 239

Menu, Tray, add, Pause, Pause ;This needs a better pause icon, and needs a play icon or whatever once paused
Menu, Tray, Icon, Pause, shell32.dll, 110

Menu, Tray, add

Menu, Tray, add, Exit, Exit
Menu, Tray, Icon, Exit, shell32.dll, 28

Menu, Tray, Click, 1 ;Change from double left click to single left click
Menu, Tray, Default, Port Viewer ;Default Entry to run on double click

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Main_Menu_Cfg
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Main_Menu_Cfg:

if Network_Icons_Use_Default = Enable
{
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 145
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 132
}
if Network_Icons_Use_Default = Disable
{
Menu, Menu_Settings_Tray_Icon, Icon, Default, shell32.dll, 132
Menu, Menu_Settings_Tray_Icon, Icon, Custom, shell32.dll, 145
}

if Network_Use_Keyboard_Leds = Enable
{
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 145
}
if Network_Use_Keyboard_Leds = Disable
{
Menu, Menu_Settings_Keyboard_Leds, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Keyboard_Leds, Icon, Enable, shell32.dll, 132
}


if QuickLaunch_Mod = Disable
{
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 132
}
if QuickLaunch_Mod = Enable
{
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_QuickLaunch_Mod, Icon, Enable, shell32.dll, 145
}

if Aero_Peek = Disable
{
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 145
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 132
}
if Aero_Peek = Enable
{
Menu, Menu_Settings_Aero_Peek, Icon, Disable, shell32.dll, 132
Menu, Menu_Settings_Aero_Peek, Icon, Enable, shell32.dll, 145
}

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Network_Monitor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Network_Monitor:

;Code Timer for Debugging...
;DllCall("QueryPerformanceCounter", "Int64*", CounterBefore) ;External Var, CPU Tick Timer

;Needs null check too...
if (IP_Address = "127.0.0.1" || IP_Address = "0.0.0.0")
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 71, 1 ;Disconnected
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_5%
}
if Network_Use_Keyboard_Leds = Enable
{
GetKeyState, KeyState, ScrollLock, T
if KeyState = U
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
}

return
}

Download_Rate_New = 0
Upload_Rate_New = 0

GetIfTable(tb)

;notes:
; Return *ptr | *++ptr << 8 | *++ptr << 16 | *++ptr << 24
;typedef struct _MIB_IFROW {
; WCHAR wszName[MAX_INTERFACE_NAME_LEN];
; DWORD dwIndex;
; DWORD dwType;
; DWORD dwMtu;
; DWORD dwSpeed;
; DWORD dwPhysAddrLen;
; BYTE bPhysAddr[MAXLEN_PHYSADDR];
; DWORD dwAdminStatus;
; DWORD dwOperStatus;
; DWORD dwLastChange;
; DWORD dwInOctets; 552?
; DWORD dwInUcastPkts; 556?
; DWORD dwInNUcastPkts; 560?
; DWORD dwInDiscards; 564?
; DWORD dwInErrors; 568?
; DWORD dwInUnknownProtos; 572?
; DWORD dwOutOctets; 576?
; DWORD dwOutUcastPkts;
; DWORD dwOutNUcastPkts;
; DWORD dwOutDiscards;
; DWORD dwOutErrors;
; DWORD dwOutQLen;
; DWORD dwDescrLen;
; BYTE bDescr[MAXLEN_IFDESCR];
;} MIB_IFROW, *PMIB_IFROW;

;;Include this codes to exclude the loopback interface.
;;If DecodeInteger(&tb + 4 + 860 * (A_Index - 1) + 516) = 24
;;Continue
Loop, % DecodeInteger(&tb)
{
Download_Rate_New += DecodeInteger(&tb + 4 + 860 * (A_Index - 1) + 552) ;Total Incoming Octets
Upload_Rate_New += DecodeInteger(&tb + 4 + 860 * (A_Index - 1) + 576) ;Total Outgoing Octets
}

;Needs odd colon char thingy to work...
Download_Rate := Round(((Download_Rate_New - Download_Rate_Old) / 48), 1) ;Download rate calculation
Upload_Rate := Round(((Upload_Rate_New - Upload_Rate_Old) / 48), 1) ;Upload rate calculation

;Offline Testing...
;if DL_Old = %Download_Rate%
;{
; Download_Rate := Round((120.5 / 1024), 1)
;}
;if UP_Old = %Upload_Rate%
;{
; Upload_Rate := Round((120.5 / 1024), 1)
;}
;DL_Old = %Download_Rate%
;UP_Old = %Upload_Rate%


;Needs odd syntax
;Needs a few microsecs of latency before lighting up the keyboard leds

if (Download_Rate = 0 && Upload_Rate = 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 69, 1 ;193, 0dn 0up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_1%
}
if Network_Use_Keyboard_Leds = Enable
{
KeyboardLED(4, "Off")
Sleep, 1
KeyboardLED(1, "Off")
}
}
if (Download_Rate > 0 && Upload_Rate = 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 68, 1 ;192, +dn 0up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_2%
}
if Network_Use_Keyboard_Leds = Enable
{
KeyboardLED(4, "Off")
Sleep, 1
KeyboardLED(1, "On")
}
}
if (Download_Rate = 0 && Upload_Rate > 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 67, 1 ;191, 0dn +up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_3%
}
if Network_Use_Keyboard_Leds = Enable
{
Sleep, 1
KeyboardLED(1, "Off")
KeyboardLED(4, "On")
}
}
if (Download_Rate > 0 && Upload_Rate > 0)
{
if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 66, 1 ;190, +dn +up
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_4%
}
if Network_Use_Keyboard_Leds = Enable
{
KeyboardLED(4, "On")
Sleep, 1
KeyboardLED(1, "On")
}
}


;Needs odd colon char to work...
Downloaded_Total := Round(Download_Rate_New / 48)
Uploaded_Total := Round(Upload_Rate_New / 48)

Download_Rate_Old = %Download_Rate_New%
Upload_Rate_Old = %Upload_Rate_New%

;DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
;ElapsedTime_pc := (CounterAfter - CounterBefore)

;ToolTip, Network_Monitor:`n%ElapsedTime_pc% Ticks`n%ElapsedTime_ms% ms, 0, 0

Return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; QuickLaunch_Mod
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

QuickLaunch_Mod:

Mouse_State_LButton_Old = %Mouse_State_LButton%

MouseGetPos,,,, Win32_Control
GetKeyState, Mouse_State_LButton, LButton

;small issue with timing and mod, if I was previously over the toolbar and now on the taskbar with the same toolbar name, it takes a little while to reg to get rid of the ctrl key

;issue with mod to taskbar part, new
;after windows is already open it continues to use the ctrl mod, which doesn't work to well afterwards

if A_OSVersion = WIN_7
{
if ((Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D")
; if ((Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D" || (Win32_Control = "MSTaskListWClass1") && Mouse_State_LButton = "D")
{
Send, {Control down}
}
else if (Mouse_State_LButton_Old = "D" && Mouse_State_LButton = "U") ;cheap hack
{
Send, {Control up}
}
}
else if A_OSVersion = WIN_2003
{
if ((Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D")
; if ((Win32_Control = "ToolbarWindow322") && Mouse_State_LButton = "D" || (Win32_Control = "ToolbarWindow323") && Mouse_State_LButton = "D")
{
Send, {Control down}
}
else if (Mouse_State_LButton_Old = "D" && Mouse_State_LButton = "U") ;cheap hack
{
Send, {Control up}
}
}

;324...
;323 is the issue on win2k3 slim, taskbar becomes the other toolbar.
;323 is the one that works in win7
;322 is the one that works in win2k3

;MSTaskListWClass1 = taskbar


;I can either scan for the os or I can patch it out correctly
;1st one is the issue

;ToolbarWindow322 Win2k3 single col
;causes issues on win2k3, crtl gets stuck on the taskbar

;ToolbarWindow323 Win7 double col

;This code needs work, works great in win7, but it needs to be worked on in xp and win2k3

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Port_View
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Port_View:
;MsgBox, %Port_Viewer%
Run %Port_Viewer%
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Log_View
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Log_View:
;MsgBox, %Log_Viewer%
;Run %Log_Viewer%

;Proxomitron Log Window
PostMessage, 0x111, 0x3F5, 0,, ahk_class PrxTronCls

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Abort_Connections
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Abort_Connections:

;Proxomitron Abort Connections
PostMessage, 0x111, 0x3F0, 0,, ahk_class PrxTronCls

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Network_Connections
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Network_Connections:

;check to see if netman is enabled via reg, if so then don't run the special code below.
;If it is disabled at runtime, then run the special code below
;Would like to see a sub menu with net connections...

;Big prob, the thign creates a new proccess which I can't seem to track yet.
;So my script stops the netman service before exiting, or it keeps it in mem, both are not cool

;RunWait %ComSpec% /C "sc config netman start= demand",, Hide
;RunWait %ComSpec% /C "net start netman",, Hide

Run ::{7007acc7-3202-11d1-aad2-00805fc1270e},,, Win32_PID
;WinWaitClose ahk_pid %Win32_PID% ;Doesn't actually work...

;RunWait %ComSpec% /C "net stop netman",, Hide
;RunWait %ComSpec% /C "sc config netman start= disabled",, Hide

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Change_IP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Change_IP:

;issue here if ip was originally null
if (IP_Address = "127.0.0.1" || IP_Address = "0.0.0.0")
{
return
}

IP_Old = %IP_Address%

Download_Rate_New = 0
Upload_Rate_New = 0
Download_Rate_Old = 0
Upload_Rate_Old = 0
Downloaded_Total = 0
Uploaded_Total = 0

TrayTip, NEO_nTray, Changing IP...,, 16
Menu, Tray, Tip, Changing IP...

IP_Change = 1 ;cludge for multi threading

if Network_Icons_Use_Default = Enable
{
Menu, Tray, Icon, netshell.dll, 71, 1 ;Disconnected
}
else
{
Menu, Tray, Icon, %Network_Icons_Custom_5%
}

if Network_Use_Keyboard_Leds = Enable
{
GetKeyState, KeyState, ScrollLock, T
if KeyState = U
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
}

IP_Change_Count = 0



While (A_IPAddress1 = IP_OLD)
{
IP_Change_Count += 1

if IP_Change_Count = 10
{
TrayTip, NEO_nTray, I tried to change your IP but after %IP_Change_Count% attempts I gave up...,, 16
Sleep 3000 ;Give the user 3 secs to read the msg...
Reload
return
}
else
{
RunWait %ComSpec% /C "IPCONFIG /RELEASE",, Hide
Sleep (1000 * %IP_Change_Count%) ;increase idle by 1sec per loop
RunWait %ComSpec% /C "IPCONFIG /RENEW",, Hide
}
}



TrayTip, NEO_nTray, Old IP Address: %IP_Old%`nNew IP Address: %A_IPAddress1%,, 16
IP_Change = 0 ;Cludge for multi-threading
Sleep 3000 ;Give the user 3 secs to read the msg...

Reload ;Cludge for mem leak on A_IPAddress1, reload the whole darn program after getting a new ip, init should pick up the new ip

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Disconnect
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Disconnect:

RunWait %ComSpec% /C "IPCONFIG /RELEASE",, Hide

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Connect
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Connect:

RunWait %ComSpec% /C "IPCONFIG /RENEW",, Hide

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Init
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Init:

IP_Change = 0 ;cludge for multi threading

;Try to reduce the mem leak as much as possible, and only call this once on init and not in the main loop, it won't beable to auto detect the ip at any given time but it should be good enough
VarSetCapacity(IP_Address, 15, 0) ;Var mem limit
VarSetCapacity(A_IP_Address, 15, 0) ;Var mem limit
IP_Address = %A_IPAddress1%

;Hides the everything on the taskbar including it's self, but leaves the start button
;WinHide ahk_class Shell_TrayWnd

GoSub Read_Cfg
GoSub Main_Menu
GoSub Main_Menu_Cfg

if Aero_Peek = Enable
{
GoSub Set_Aero_Peek_Enable
}
else
{
GoSub Set_Aero_Peek_Disable
}

SysGet, Desktop_Width, 61
SysGet, Desktop_Height, 62
EnvSub, Desktop_Width, 2
EnvSub, Desktop_Height, 2

SysGet, Monitor_Width, 0
SysGet, Monitor_Height, 1

;User Timer Max Quantum Slice Resolution
;Quantum timer resolution
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 156000) ;15.600 ms
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 100000) ;10.000 ms
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 10000) ;1.000 ms
;DllCall("ntdll.dll\NtSetTimerResolution", UInt, 5000) ;0.500 ms
DllCall("ntdll.dll\NtSetTimerResolution", UInt, 1) ;Min


;Run "H:\Program Files\Proxomitron\Proxomitron-MOD.exe"
;Sleep, 250
;bypass
;PostMessage, 0x111, 0x3EF, 0,, ahk_class PrxTronCls
;Tray_Icon_hWnd = % TrayIcons()
;RemoveTrayIcon(Tray_Icon_hWnd, 1, 2)


;Reduce Mem Usage
Process, wait, AutoHotKey.exe ;Find the process
NewPID = %ErrorLevel% ;Save the PID
EmptyMem(NewPID)


return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Edit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Edit:

Edit

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Reload
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Reload:

Reload

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Pause
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Pause:

Pause

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Exit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Exit:

if Network_Use_Keyboard_Leds = Enable
{
GetKeyState, KeyState, ScrollLock, T
if KeyState = U
{
KeyboardLED(1, "Off")
}
GetKeyState, KeyState, CapsLock, T
if KeyState = U
{
KeyboardLED(4, "Off")
}
GetKeyState, KeyState, NumLock, T
if KeyState = U
{
KeyboardLED(2, "Off")
}
}

ExitApp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;