Bunu Perl ile yapabilirsin. Windows, her klasörde gizli bir sistem Dekstop.ini
dosyasını kullanarak dizin simgelerini denetler. içindekiler şöyle görünür: Windows XP'de
[.ShellClassInfo]
IconFile=%SystemRoot%\system32\SHELL32.dll
IconIndex=41
(ve diğer sistemlerde varsayalım), simge 41 bir ağaçtır. Yukarıdaki kod çalıştırırsanız
#!/usr/bin/perl
use strict;
use warnings;
use Win32API::File qw(createFile WriteFile fileLastError CloseHandle);
my $file = createFile(
'Desktop.ini',
{
Access => 'w', # Write access
Attributes => 'hs', # Hidden system file
Create => 'tc', # Truncate/create
}
) or die "Can't create Desktop.ini - " . fileLastError();
WriteFile(
$file,
"[.ShellClassInfo]\r\n" .
"IconFile=%SystemRoot%\\system32\\SHELL32.dll\r\n" .
"IconIndex=41\r\n",
0, [], []
) or die "Can't write Desktop.ini - " . fileLastError();
CloseHandle($file) or die "Can't close Desktop.ini - " . fileLastError();
, bu belirlesin: Windows bu onu oluşturmak için Win32API::File
içine kazmak gerekir anlamına gelir, bu dosyanın açıkça işe yaraması için bir sistem dosya olarak ayarlanabilir gerektirir Geçerli dizinin bir ağacın simgesi. Gezgini değiştirmek için kaşif listesini yenilemeniz gerekebilir.
Simgeleri değiştirmenin bir yoluna sahip olduğumuza göre, şimdi bütün bir sürücüden geçebilir ve desenimizle eşleşen her klasörü değiştirebiliriz. Biz File::Find
, ya da alternatiflerden birine (örneğin File::Find::Rule
veya File::Next
) ile oldukça kolayca yapabilirsiniz:
#!/usr/bin/perl
use strict;
use warnings;
use File::Find qw(find);
use Win32API::File qw(createFile WriteFile fileLastError CloseHandle);
my $topdir = $ARGV[0] or die "Usage: $0 path\n";
find(\&changeIcon, $topdir);
sub changeIcon {
return if not /documents$/i; # Skip non-documents folders
return if not -d; # Skip non-directories.
my $file = createFile(
"$_\\Desktop.ini",
{
Access => 'w', # Write access
Attributes => 'hs', # Hidden system file
Create => 'tc', # Truncate/create
}
) or die "Can't create Desktop.ini - " . fileLastError();
WriteFile(
$file,
"[.ShellClassInfo]\r\n" .
"IconFile=%SystemRoot%\\system32\\SHELL32.dll\r\n" .
"IconIndex=41\r\n",
0, [], []
) or die "Can't write Desktop.ini - " . fileLastError();
CloseHandle($file) or die "Can't close Desktop.ini - " . fileLastError();
}
Ne yazık ki, sadece dizin şu anda varsa ikon sadece değişti alır tesbit ettik , ya da bir kez vardı, bir simge ... dizinin kendisi üzerinde ayarlanmış bir öznitelik var, Windows, bir Desktop.ini
dosya için bakmak neden, ama ben ne olduğunu anlamaya hayatım için yapamam. Bu nedenle, yukarıdaki çözüm eksiktir; Ayrıca, simgeyi eklediğimiz dizindeki öznitelikleri bulmalı ve düzeltmeliyiz.
Paul
http://msdn.microsoft.com/en-us/library/cc144102.aspx adresine göre, sistem klasörünü de içeren klasöre ayarlamanız gerekir. – ephemient
http://www.google.com/search?btnI=&q=%22Customizing+Folders+with+Desktop.ini%22 –