最近我發布了一些關于桌面圖标的有趣視頻,例如哎呀,我的桌面瘋掉了,我的電腦會替我說愛你,裡面利用圖标擺出各種各樣的造型,還有桌面上的圖标可以玩貪吃蛇,天哪,技術宅們的電腦這麼神奇嗎?用圖标玩起了貪吃蛇。
擺成I的字母形狀
擺成原型
有些朋友以為這是病毒,其實隻是我自己寫了一些自娛自樂的小程序。因為有些朋友想學,在這給大家做一個教程科普一下做法,如果大家喜歡請留言,我會根據大家的反饋繼續推出更多好玩的教程和視頻。言歸正傳,下面是正餐時間(代碼為C#編寫):
我們首先定義一些常量,LVM_GETITEMCOUNT,LVM_SETITEMPOSITION代表了兩個操作指令,一個是用來獲取圖标的個數,一個用來修改圖标的位置。
constuint LVM_FIRST = 0x1000;
constuint LVM_GETITEMCOUNT = LVM_FIRST 4;
constuint LVM_SETITEMPOSITION = LVM_FIRST 15;
接下來我們來定義兩個方法,ListView_GetItemCount用來獲取桌面上圖标的個數,它的參數為圖标所在容器的句柄(看不懂沒關系,下面有具體用法)。
publicint ListView_GetItemCount(IntPtr AHandle)
{
return SendMessage(AHandle, LVM_GETITEMCOUNT, 0, 0);
}
ListView_SetItemPosition用來設定圖标的位置,它的參數為圖标所在的容器的句柄,要設定圖标的标号(第幾個),目标位置的坐标X和Y。
public void ListView_SetItemPosition(IntPtr AHandle, int AIndex, int X, int Y)
{
SendMessage(vHandle, LVM_SETITEMPOSITION, AIndex, Y* 0x10000 X);
}
我們看到這兩個函數裡面都調用了SendMessage方法,其作用是往存放圖标的容器發送消息來執行特定的動作。例如SendMessage(AHandle, LVM_GETITEMCOUNT, 0, 0);含義為告訴AHandle這個容器LVM_GETITEMCOUNT消息要求其返回圖标的個數。
下面是一個讓圖标消失的小例子:
桌面上圖标是放在一個容器裡的,要控制它我們首先要找到圖标所在的容器。
IntPtr vHandle = FindWindow("Progman", null);
vHandle = FindWindowEx(vHandle, IntPtr.Zero, "SHELLDLL_DefView", null);
vHandle = FindWindowEx(vHandle, IntPtr.Zero, "SysListView32", null);
此時vHandle就是容器的句柄了,把它作為參數調用獲取圖标個數的函數
int vItemCount = ListView_GetItemCount(vHandle);
vItemCount就是圖标的數量,下面我們循環把所有的圖标位置都設為(-100,-100)
for (int i = 0; i < vItemCount; i ){
ListView_SetItemPosition(vHandle, i, -100, -100);
}
為什麼是-100呢,因為桌面左上角坐标為0,0,都設為-100圖标就都放在屏幕外了,整體效果就是圖标都消失了。當然可以發揮想象,設置其他值來擺些漂亮的造型。
更多好玩創意視頻、程序歡迎關注我的頭條号,或者微博6liwe9。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!