利用注册表(Registry)注册新文件类型并指定默认打开程序

Private Declare Function FindExecutable Lib “shell32.dll” Alias “FindExecutableA” (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long

Public Sub Associate(ByVal FileExtend As String, ByVal FileType As String, ByVal FileDescribe As String, ByVal FileIcon As String, ByVal ProgramName As String) ‘注册文件类型,并设置在浏览器双击打开文件
‘第四位参数说明
‘”C:\WINDOWS\SYSTEM32\shell32.dll,-151″,软件指定图标
‘ProgramName,应用软件图标
‘”%1″,系统指定图标
On Error Resume Next
Dim hkey As Long, ReturnVal As Long
ReturnVal = RegCreateKeyEx(HKEY_CLASSES_ROOT, FileExtend, 0, vbNullString, 0, KEY_ALL_ACCESS, 0, hkey, 0)
If ReturnVal = 0 Then
RegSetValueEx hkey, vbNullString, 0, 1, FileType, LenB(StrConv(FileType, vbFromUnicode)) ‘Len(FileType) 汉字时不准
RegCloseKey hkey
End If
ReturnVal = RegCreateKeyEx(HKEY_CLASSES_ROOT, FileType, 0, vbNullString, 0, KEY_ALL_ACCESS, 0, hkey, 0)
If ReturnVal = 0 Then
RegSetValueEx hkey, vbNullString, 0, 1, FileDescribe, LenB(StrConv(FileDescribe, vbFromUnicode)) ‘Len(FileDescribe) 汉字时不准
RegCloseKey hkey
End If
ReturnVal = RegCreateKeyEx(HKEY_CLASSES_ROOT, FileType & “\DefaultIcon”, 0, vbNullString, 0, KEY_ALL_ACCESS, 0, hkey, 0)
If ReturnVal = 0 Then
RegSetValueEx hkey, vbNullString, 0, 1, FileIcon, LenB(StrConv(FileIcon, vbFromUnicode)) ‘Len(FileIcon) 汉字时不准
RegCloseKey hkey
End If
ReturnVal = RegCreateKeyEx(HKEY_CLASSES_ROOT, FileType & “\Shell\Open\Command”, 0, vbNullString, 0, KEY_ALL_ACCESS, 0, hkey, 0)
If ReturnVal = 0 Then
ProgramName = ProgramName & Space$(1) & “/open %1”
RegSetValueEx hkey, vbNullString, 0, 1, ProgramName, LenB(StrConv(ProgramName, vbFromUnicode)) ‘Len(ProgramName) 汉字时不准
RegCloseKey hkey
End If
On Error GoTo 0
End Sub

Public Sub DisAssociate(ByVal FileExtend As String, ByVal FileType As String) ‘解除在浏览器双击打开文件
DelKey HKEY_CLASSES_ROOT, FileExtend
DelKey HKEY_CLASSES_ROOT, FileType
SHDeleteKey HKEY_CLASSES_ROOT, FileType ‘删除含有子项的项
End Sub

Public Sub SetRightMenu(ByVal sMenuShow As String, ByVal sProgram As String) ‘设置在系统右键菜单打开文件
Call SaveString(HKEY_CLASSES_ROOT, “*\shell\” & sMenuShow & “\command”, “”, sProgram & Space$(1) & “%1″) ‘”” 代表子项 command 的字符串值(默认)
End Sub

Public Sub DisRightMenu(ByVal sMenuShow As String) ‘解除在系统右键菜单打开文件
SHDeleteKey HKEY_CLASSES_ROOT, sMenuShow ‘删除含有子项的项
End Sub

Public Function GetAssociatedProgram(ByVal sExtension As String) As String ‘根据扩展名查找默认打开程序
GetAssociatedProgram = “”
‘If LCase(sExtension) = “dwg” Then
‘GetAssociatedProgram = Trim(GetString(HKEY_CLASSES_ROOT, “AutoCAD\Shell\Open\command”, vbNullString))
‘If GetAssociatedProgram = “” Then GetAssociatedProgram = Trim(GetString(HKEY_LOCAL_MACHINE, “SOFTWARE\Classes\autocad\shell\open\command”, vbNullString)) ‘Belt and braces
‘Exit Function
‘End If
‘ Reading the host program of DWG from the registry.
Dim temp_title As String
Dim temp_path As String
Dim fnum As Integer
Dim result As String
Dim pos As Integer
‘ Get a temporary file name with this extension.
GetTempFile IIf(LCase(sExtension) = “dwg”, “dxf”, sExtension), temp_path, temp_title
‘ Findexecutable cannot find the host program of DWG. The host programs of DXF and DWT can be found, and they are the same host program as DWG.
‘ Make the file.
fnum = FreeFile
Open temp_path & temp_title For Output As fnum
Close fnum
‘ Get the associated executable.
result = Space$(1024)
FindExecutable temp_title, temp_path, result
pos = InStr(result, Chr$(0))
GetAssociatedProgram = Left$(result, pos – 1)
‘ Delete the temporary file.
Kill temp_path & temp_title
End Function

Private Sub GetTempFile(ByVal sExtension As String, ByRef temp_path As String, ByRef temp_title As String)’ Return a temporary file name.
Dim I As Integer
If Left$(sExtension, 1) <> “.” Then sExtension = “.” & sExtension
temp_path = Environ(“TEMP”)
If Right$(temp_path, 1) <> “\” Then temp_path = temp_path & “\”
I = 0
Do
temp_title = “tmp” & Format$(I) & sExtension
If Len(Dir$(temp_path & temp_title)) = 0 Then Exit Do
I = I + 1
Loop
End Sub

‘效果
Public Sub Main()
On Error Resume Next
Dim OptFile As String ‘所选文件的名称
If Len(Command) = 0 Then ‘点击软件本身启动 Command = “”
‘GO ON
Else
If LCase(Left(Command, 6)) = “/open” & Space$(1) Then ‘浏览器双击启动 Command = “/open D:\Test.iso”
OptFile = Right(Command, Len(Command) – 6)
Else ‘系统右键菜单启动 Command = “D:\Test.iso”
OptFile = Command
End If
End If
‘GO ON
On Error GoTo 0
End Sub

‘调用
Sub SetFile()
Dim sProgram As String
sProgram = “C:\Windows\notepad.exe”
Dim sShow As String
sShow = “Open With notepad”
Call Associate(“.iso”, “ISO File”, “”, “%1”, sProgram) ‘注册后缀为 iso 的文件,并确定其默认打开程序为 sProgram
Call SetRightMenu(sShow, sProgram) ‘在系统右键菜单增加一项显示字符为show,并指定由sProgram打开所选文件
End Sub

朝鲜人的姓氏和本贯

    姓氏和名字,对一个人来说本来没有什么特殊意义,只不过是为了区别这个人与那个人而设定的一种人为的代号而已。但她反映着一个民族的繁衍历史和沿革。

    但是,朝鲜人又与别的民族还有相异之点。这就是,从祖先开始沿袭下来的习惯——“本贯”。所谓“本贯”,就是本家族认定和公认的祖先曾居住过的地方。就是说,通过本贯能反映出一个家族其子子孙孙、世世代代繁衍下来的血统关系。一个家庭在生活过程中,由于种种原因,虽然不在同一个地方居住,但经过查家谱或本贯,就能清楚地了解是否同属一个祖宗的血缘亲属关系。在本贯形成、演变过程中,有的姓氏只有一个本贯,而有的姓氏则多达上百个本贯,而且依据这个本贯所形成的民间风俗习惯,有的一直沿用至今。

    现在朝鲜人仍沿用的本贯,除个别姓氏的家庭沿用中国地名外,绝大部分姓氏沿用的本贯都是朝鲜地名。这是在长时期的历史演变过程中形成的。  从历史上看,朝鲜族的姓氏和本贯的形成和沿用,主要有以下几种情况:

    1.朝鲜人在经过几千年的发展过程中,出现了在血缘关系基础上形成的稳定的共同体。可见,朝鲜人的姓氏和本贯的产生和沿用,已有几千年的历史,这是主流。

    2.从历史上看,有的家庭收受国王所赏赐的姓名或本贯,这个家庭就感到无尚的光荣,就抛弃原来已有的姓氏和本贯,开始采用国王所赐给的姓氏和本贯,以此炫耀本家庭的社会地位。这类情况大致有两种:一种是在不同历史时期,在疆场上为国出力,立下战功,受到国王的重用和赏赐。据传,新罗时期,李瑗的三个儿子李枝春、李叶春、李花春都是新罗将领。他们因率军在抵御倭寇战斗中都立下了战功,新罗景文王以赐姓名的形式奖励这三位有贡献的将领。对这三人都赐“安”姓。新罗王还下诏改李枝春为安邦俊、李叶春为安邦杰、李花春为安杰侠,并封安邦俊为竹山君、封安邦杰为广州君。从此,这两个人就成了后来竹山安氏、广州(注:朝鲜百济南汉山城)安氏的始祖。又传,青海李氏的始祖之兰,本来姓名是佟豆兰。他在高丽公珉王朝廷做官过程中被封为青海君。便遵照高丽王所赐,把自己的姓名改为李之兰。佟豆兰为永怀国王所赐的这一荣誉,宣布自己的子孙后代都是青海李氏。这样,佟豆兰也就成为青海李氏的始祖。

    又如,安东权氏的始祖权幸,本来原名叫金幸。金幸于高丽敬顺王二年任古昌郡守时,与金宣平、张贞弼等人在瓶山大破后百济王甄英,为高丽统一朝鲜立下了汗马功劳。于是,国王赐给金幸于权氏,并把古昌郡改为安东府。金幸遵照国王赏赐,把金姓改为权姓,叫权幸,其子孙后代也就改为安东权氏,权幸便成为安东权氏的始祖。

    另外,还有一种情况是,虽然不是战将武士,但在文化、艺术等其他方面为国家做出突出贡献的人也有得到国王恩赐的机遇。如旌善文氏的始祖文林翰,其原来不姓文氏而是金氏。据传,他在高丽时期朝廷派到中国求学,因在中国学习期间和回到高丽以后,都能写出一手好文章而闻名全国。国王对此非常高兴,就赐给文姓,取名林翰。于是,文林翰就成为旌善文氏的始祖。

    3.随着历史的发展、时代的变迁,各民族之间相互往来的情况是经常发生的。在相互往来过程中,一些外民族到朝鲜半岛上定居、归化,成为朝鲜族的组成部分的事情是常有的。从有关历史资料上看,归化成朝鲜族的有汉族、维吾尔族、回族以及日本人等多种民族。

    从有关史料记载上看,异民族归化成朝鲜族的情况,大致有以下几类:

    第一种是,在本国受迫害而避难到朝鲜来以后长期寄居,融化成朝鲜族的。据传,朝鲜族的韩氏、奇氏、鲜于氏等三个姓氏的始祖是箕子。箕子,本来是汉族,是中国历史上殷朝末期的王公贵族,位列三公,曾辅纣为文师。后来,由于“殷道衰,箕子去之朝鲜,教其民以礼义,田蚕织作。”据朝鲜的一些资料提供的情况看,箕子本来是殷朝的贤臣,他亲眼看到殷朝被周武王所灭,觉得“忠臣不事二主”,就与几位仁人志士离开中国的中原,避难到朝鲜半岛,并建立了箕子朝鲜。箕子及其后代一直居住在朝鲜,到他的48代孙开始分支,分成韩氏、奇氏、鲜于氏。这三个姓氏都立箕子为各自的始祖。

    当时,与箕子一起到朝鲜半岛,帮助箕子一起建立箕子朝鲜的功臣还有南宫修、景汝松、琴应、康候、鲁启、弓钦等人。他们都与箕子一起定居在朝鲜。后来,他们也就各自成为朝鲜族的南宫氏、景氏、琴氏、康氏、鲁氏、弓氏的始祖。

    广宁高氏的始祖高有宝本来是汉族人。当中国局势发生急剧的变化,明清两个朝代相互交替时,高有宝因不愿意做清朝官吏,就逃到朝鲜落籍,成为朝鲜族广宁高氏的始祖(注:广宁为中国地名,详址不清)。

卢穗,本来是汉族。唐玄宗时,为躲避安禄山之叛乱,携九个儿子(垓、垠、址、互、满、刊、增、坡、垣)到朝鲜定居。后来,卢穗的九个儿子依次被封为光州伯、山伯、交河伯、丰川伯、长渊伯、安东伯、安康伯、延后伯、平壤伯、谷山伯。以后,卢穗九个儿子的子孙后代就以这些地名为自己家庭的本贯,并把卢穗的九个儿子中被封到某地去者为自己家族的始祖。

    除此之外,还有上谷麻氏、海州石氏、浙江柴氏、陇西李氏、广东陈氏、庆州偰氏等都属此种类型。

    第二种情况是,有时因朝鲜局势紧张,朝鲜当局就向中国求助,当战争结束后,中国派到朝鲜的官兵仍长期留在朝鲜,融化为朝鲜族。据传,延安李氏的始祖本来是茂姓,是汉族。朝鲜三国鼎立时期,新罗国王为击败百济而向中国唐朝求助。唐朝派军,中郎将茂也随军到朝鲜,帮助新罗战败百济统一朝鲜后,中郎将茂并未随军回到唐朝,而一直留在朝鲜。新罗武烈王七年(公元660年),中郎将茂被新罗国王任为延安伯。他就以唐朝皇帝的姓氏为自己的姓,就把茂姓改为李姓,以延安为本贯,他便成为朝鲜族延安李氏的始祖。

苏州贾氏的始祖是贾维鍮,字无局,号知白堂,汉族,曾任明朝兵部尚书,后任蓟辽都察使。朝鲜壬辰倭乱时,遵照明朝皇帝的派遣,贾维鍮率明朝援军到朝鲜参战。在朝鲜釜山与倭寇战斗中以身殉职。他的后代一直留在朝鲜,贾维鍮成为朝鲜族苏州贾氏的始祖。

    此外,还有广州董氏、杜陵杜氏、浙江徐氏、浙江秋氏、浙江张氏、颖阳千氏、秋溪秋氏、浙江彭氏、浙江片氏等都属于因战争从中国到朝鲜后定居下来的后裔。

    第三种情况是,受皇帝或国王的派遣,到国外执行任务,但在出国途中遇险不能回到本国,就长期居住在朝鲜而改为朝鲜族。据传新罗时,中国汉朝的黄洛和互大林等人受命去交趾国,途中在海上遇到大风,被漂流到新罗平海丒山港,以后就在那里长期定居,归化成朝鲜族,成为朝鲜族黄氏和互氏的始祖。

    南氏的始祖金忠,本来是唐朝的按廉使,是汉族。唐玄宗以金忠为按廉使,组织使团派往日本国。金忠在带领使团去日本途中遇到台风,千辛万苦,死里逃生,随风漂流到朝鲜的丒山港。他在朝鲜人民的救护下就定居在那里,再也没有返回本国。高丽敬德王二年,高丽国王赐给金忠于南姓。后来,金忠的后代洪甫、君甫、匡甫三兄弟都为高丽国立了大功。高丽国忠烈王就任洪甫为英阳君、君甫为宜宁君、匡甫为固城君。他们也就把这三个地方定为各自的本贯。这样,洪甫、君甫、匡甫成为英阳南氏、宜宁南氏、固城南氏的始祖。

    第四种情况是受本国朝廷的派遣,到朝鲜以后未再回国,长期居留在朝鲜。高句丽英留王二十二年(公元639年)时,唐朝派天河到高句丽讲儒学,后他又到新罗继续讲儒学。到新罗讲学时,新罗国王封天河为唐城伯(注:唐城,现在朝鲜南阳旧名)。后来,其后代就把天河崇拜为南阳洪氏的始祖。

    元朝顺帝时,孔子第54代孙绍陪送鲁国公主到高丽国。绍到高丽国后,再也没有回到元朝,便成为朝鲜族曲阜孔氏的始祖。

    宋朝时期,中国朱熹的曾孙潜携其子余庆于高丽高宗王十一年(公元1224年)到高丽国定居,成为朝鲜族朱氏的始祖。

    日本人沙也可,是加藤清正的一员将领。壬辰倭乱时,他到朝鲜不愿与朝鲜人民为敌,故意躲避战斗。当战争结束后,他就一直居留在朝鲜,并把原来日本名沙也可改为朝鲜名金忠善,朝鲜国王念他对朝鲜又忠诚、又善良,就赐本贯为金海。从此,他就成为金海金氏的始祖(注:金海金氏、还有以金首露为始祖的一派。这一派,历史上称为法兴派,自称为正统派。所以这一派与日本人金忠善为始祖的金海金氏,虽然姓氏、本贯都一样,但并非一个家族)。

    4.本来一个姓,但后来又分成好几个姓。据传,朝鲜族本来没有诸葛这个复姓。但诸葛亮的20世孙迁居到朝鲜以后,成为诸葛氏的始祖。他的后代在朝鲜到第12世孙时,有哥兄弟两人,大的叫“泓”、二的叫“滢”。他们哥俩经过商量后,决定把“诸葛”这个复姓分割成单姓。老大泓改姓为“诸”,老二滢改姓为“葛”。于是,泓成为漆原诸氏的始祖,滢成为清州葛氏的始祖。

    5.原来是同一个姓氏、同一个本贯的同一个家庭,由于长期不在同一个地方一起居住,又加上一些其他原因,陆续分出好多个本贯。如庆州李氏的后裔中先后出现14个本贯。庆州李氏始祖李谒平的后代李开宣布从自己起改为陕川李氏、李渭宣布从自己起改为车城李氏。这样,李开就成为陕川李氏的始祖,李渭成为车城李氏的始祖。之后,又陆续分离出了以李润张为始祖的昌平李氏,以李润张的弟弟李润远为始祖的加平李氏。后又分离出以李润张5世孙李周佐为始祖的牙山李氏,以李润张6世孙李禹偁为始祖的载宁李氏,以李阳植为始祖的羽溪李氏。后又以李阳植的17世孙李永倖为始祖的晋州李氏、以李阳植的22世孙李攀桂为始祖的原州李氏,等等。

    6.以在民间流传下来的神话故事来说明姓氏和本贯的形成过程。据传,很早很早以前,朝鲜南部有个地方叫斯卢六村。当时天下大乱,人人盼望天下早日太平。斯卢六村附近的村长们汇集在阏川(注:地名)共同研究、讨论如何实现天下太平的事情。他们一致感到天下大乱是由于还没有找到英明的君主。他们为引出精明强干的君主,便向天跪拜祈祷。这时,他们都见到从离他们不远的草坪中有一股瑞气直冲向天,并听到惊天动地的龙马鸣叫声。面对这种突然发生的事情,人们大惊失色,个个感到很奇异。他们一起向龙马鸣叫、瑞气上升的草坪走去。到跟前一看,并不见什么龙马,只发现草坪中有一个既象球,又象瓢的大肉块(胞胎)。一起去的人中有一位胆子大的便拔出刀向肉块砍去,把肉块劈成两半。大家看到从肉块里蹦出一个英俊的男孩子,大家都惊呆了。斯卢六村的村长把这个男孩抱回村收养。大家商量为这个孩子起什么名字好。因为这个英俊的男孩子是在散发瑞气的赫赫有名的地方,从瓢似的大肉块里出世的,所以大家给这个孩子起名叫朴赫居世。当朴赫居世长到13岁时,已聪明过人,斯卢六村及邻近村的村长们就把他推举为王。他接受王位以后,定国名为新罗。这样,朴赫居世便成为新罗的开国之王,也成为朝鲜族朴氏的始祖。朝鲜族朴姓的本贯虽然很多,但都崇拜民间传说的具有神话色彩的朴赫居世为朴氏的共同始祖。

    7.在历史演进过程中,由于某种原因,有些家庭抛弃原来姓氏或本贯,改用别的姓氏或本贯;而有的家庭,则只抛弃原来姓氏,而继续保留原来的本贯。如,现在醴泉权氏的始祖,本来不是姓权,而是姓昕。据传,醴泉权氏的始祖是昕迪臣。他娶安东权氏的女儿为妻,生的儿子名叫得圭。昕得圭后来任醴泉府尹,就在醴泉定居。后来,昕得圭的儿子昕寿昌所娶的妻子也是安东权氏。昕寿昌的孙子昕升朝所娶的妻子也是安东权氏。不巧不成书,到昕升朝的儿子昕暹时期,正好赶上高丽29代王忠穆王登殿。忠穆王的名字也叫“昕”。在封建社会有个规矩,就是一般老百姓的名字不允许与国王的名字同一个字。如遇到这种情况,就必须改成别的什么字,不然就会遭到不幸。根据这种条规,由于高丽国王的名字中有“昕”字,昕氏家不得不改姓,因为始祖起娶过同一个安东权氏的妻,就改“昕氏”为权氏。

    据初步统计,各地朝鲜族的姓氏共有250多个,其中在历史上其他民族归化成朝鲜族的有135个姓氏。根据珲春市公安局户籍科1991年年底的统计,居住在珲春市境内的朝鲜族所使用的姓氏有171个。在珲春居住的朝鲜族所使用的每个姓氏的本贯(本贯中,也包括居住在外地的朝鲜族所使用的本贯)多少也不尽一致。

    一种情况是,有的家族虽有姓氏,但这些家族的祖先一直没有确定本贯,其后代子孙也没有人再过问这个事情。也就是说,只有姓氏而没有本贯。

    第二种情况是,有些本来有姓氏又有本贯的家庭,后来由于某种原因,只沿用原来姓氏,但本贯已失传。有的抛弃原来姓氏而改用别的姓氏,其家庭的子孙后代已无法查出祖先曾经使用过的姓氏或本贯。