例子:將下面**複製到乙個指令碼中去例如123.ps1,
執行完成後需要自己重啟explorer.exe,才能得到效果。
通過這種方法會存在一種問題是需要重啟explorer.exe,所以介面會閃爍一下。
param(
[parameter(mandatory=$true,helpmessage='the name of the program')][string]$programname,
[parameter(mandatory=$true,helpmessage='the setting (2 = show icon and notifications 1 = hide icon and notifications, 0 = only show notifications')]
[validatescript( return $true})]
[int16]$setting
)$enctext = new-object system.text.utf8encoding
[byte] $bytregkey = @()
$strregkey = ""
$bytregkey = $(get-itemproperty $(get-item 'hkcu:\software\classes\local settings\software\microsoft\windows\currentversion\traynotify').pspath).iconstreams
for($x=0; $x -le $bytregkey.count; $x++)
1 2
}}function rot13($bytetorot)
elseif($bytetorot -gt 96 -and $bytetorot -lt 123)
else
} else
}}[byte] $header = @()
$items = @{}
for($x=0; $x -lt 20; $x++)
for($x=0; $x -lt $(($bytregkey.count-20)/1640); $x++)
foreach($key in $items.keys)
1 2 }}
}
這種方法和上面的powershell一樣,會導致介面閃爍。
using system;
using system.collections.generic;
using system.text;
using microsoft.win32;
using system.collections;
using system.diagnostics;
class program
else
}//------------------------
arraylist blocklist = p1.storeblocks(allwithoutheader);
console.writeline("name(or part) of program:");
prname = console.readline();
string alldatastring = null;
bool found = false;
int value = 0;
int blocknumber = 0;
for (int i = 0; i < blocklist.count; i++)}}
}}
if (found == false)
console.writeline("new setting:");
value = convert.toint32(console.readline());
((list)(blocklist[blocknumber]))[528] = (byte)(value);
byte alloriginal = p1.getoriginalformat(blocklist, allwithoutheader.length);
byte combined = p1.combine(header, alloriginal);
mykey.setvalue("iconstreams", combined);
console.writeline("successfully wrote to registry, please restart explorer.exe");
process pp = process.getprocessesbyname("explorer");
foreach (process p in pp)
process.start("explorer.exe");
}private byte combine(byte first, byte second)
private arraylist storeblocks(byte all)
}return main;
}private byte getoriginalformat(arraylist list, int buffersize)
}return original;
}private string transform(string value)
else
}else if (number >= 'a' && number <= 'z')
else
}array[i] = (char)number;
}return new string(array);
}}
具體在win7上工作的很好,win8沒測試,但是win10 1809沒有反應。
系統托盤程式設計
所謂的 托盤 在windows系統介面中,指的就是下面任務條右側,有繫 統時間等等的標誌的那一部分。二 托盤程式設計相關函式 winshellapi bool winapi shell notifyicon dword dwmessage,pnotifyicondata pnid 這個函式呢,負責向...
系統托盤程式
系統托盤程式 與系統托盤通訊的函式 shell notifyicon dword dwmessage,pnotifyicondata pnid 第乙個引數dwmessage可以取以下值 1 nim add 向托盤中加入乙個圖示 2 nim modify修改托盤中的圖示 3 nim delete 從托...
DELPHI 系統托盤
然後詳細說明下具體實現方法 1 在user處添家乙個 shellapi 這樣就可以代用這個api了,如 uses windows,messages,shellapi 2 宣告兩個常量 const mousemsg wm user 1 自定義訊息,用於處理使用者在圖示上點選滑鼠的事件 iid 100 ...