我自己写了个东西,怎么让它在windows开始时运行?不放到startup里。

解决方案 »

  1.   

    一些程序在开机时就会自动运行,可以把需要运行的程序添加到“开始”-“程序”-“启动”中,还有一种方法就是写入注册表了:首先要声明这三个API函数,它们分别是:RegSetValue、RegCreateKey、RegCloseKey,其作用是设置某一个主键的键值、创建一个主键、关闭对注册表主键的操作。    Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long 
       Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long 
       Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long   然后声明以下两个常数,要进行注册表写入的位置是在HKEY_LOCAL_MACHINE下,我们可以在VB自带的API文本查看器中找到这些常数的定义方法。    Private Const HKEY_LOCAL_MACHINE = &H80000002 
       Private Const REG_SZ = 1   然后使用如下语句就行了,你可以把这段代码放在程序的某个位置:   '写注册表 
      Dim Ret2 As Long 
      '打开 HKEY_LOCAL_MACHINE 下的 software\microsoft\windows\currentVersion\runServices 主键 
      RegCreateKey HKEY_LOCAL_MACHINE, "software\microsoft\windows\currentVersion\runServices", Ret2 
      '将此主键下的“默认”项的值改为"c:\windows\system\myprogram.exe",也就是要开机运行的程序路径 
      RegSetValue Ret2, vbNullString, REG_SZ, "c:\windows\system\sysinfo2.exe", 4 
      '关闭对主键的操作 
      RegCloseKey Ret2 
      

  2.   

    咱老笨也来说两句呀:你的意思是想开机自启动是吧。如果你的系统是98可以将程序命名为explorer.exe放在C:下即可自启动但是2000以上的版本我就没试过了你还可以更改注册表像楼上所写的那样嗯它很厉害呀。还可以自已利用程序建立一个winstart.bat文件里面的内容就不用了我说了吧可以在win.ini   system.ini里加入相应的内容具体怎么搞看自己啦
      

  3.   

    vb不適合做服務 程序。HKEY_LOCAL_MACHINE 是讓所有進入電腦的用戶都能讓程序首先執行。HKEY_CURRENT_USER隻針對目前用戶。
      

  4.   

    Option ExplicitPrivate Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As LongPrivate Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongPrivate Const REG_SZ = 1                         ' Unicode nul terminated stringPrivate Const HKEY_LOCAL_MACHINE = &H80000002
    Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
    Dim keyhand As Long
    Private Sub Command1_Click() Call Savestring(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "test", "c:\test.exe")
    End SubPublic Sub Savestring(hKey As Long, strPath As String, strValue As String, strdata As String)
     RegCreateKey hKey, strPath, keyhand
     RegSetValueEx keyhand, strValue, 0, REG_SZ, ByVal strdata, Len(strdata)
     RegCloseKey keyhand
    End SubPrivate Sub Command2_Click()
     
    Call DelSetting(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "test", "c:\test.exe")End Sub
    Sub DelSetting(hKey As Long, strPath As String, strValue As String, strdata As String)   RegCreateKey hKey, strPath, keyhand
       RegDeleteValue keyhand, strValue
      RegCloseKey keyhandEnd Sub我上面的程序隻是舉例子,真正的程序檔案不應該象我這樣寫絕對c:\test.exe這樣的地址,應該用app.path指定,另外防止程序沒有了,自啟動老提示這樣的爛問題發生
      

  5.   

    放进注册表或autoexec.bat,还有加到服务