精华内容
下载资源
问答
  • 如何关闭calc进程 Dim proc As New Process proc.StartInfo.FileName = "calc.exe" proc.Start() 利用上面程序,我可以用vb.net实现启动外部程序calc.exe , 1,请问,加什么参数可以让calc.exe在后台启动...
  • 使用.net 调用Excel 生成Excel 报表 的时候 会出现 Excel.exe的进程不能关闭. 反复打开几次就会多几次Excel.exe的问题. ...直被一个问题困扰就是导出excel时如何关闭excel进程,我使用过oExcelApp.Quit(); 也用过

    使用.net 调用Excel 生成Excel 报表 的时候 会出现 Excel.exe的进程不能关闭. 反复打开几次就会多几次Excel.exe的问题.

    网上使用的关闭此进程的方法.

    ... ....

    GC.Collect();

    ... ....

    可是这样的方法有时不起作用.

    直被一个问题困扰就是导出excel时如何关闭excel进程,我使用过oExcelApp.Quit(); 也用过GC回收,结果都不理想,后来发现可以kill进程,但是问题是kill进程 时不好解决多人并发的使用,比如一个人在导表然后kill所以的excel但是如果同时又有人在导表那么这就把另外一个excel结束了,现在我们要办的 是如何kill当前这个进程,这里我们先看一下代码:

    Public Function CloseExcel(ByRef _xl As Excel.Application) As Boolean 
         
    If _xlApp Is Nothing Then 
               Return True 
           End If 
           If _xlSheet Is Nothing Then 
               Return True 
           End If 
           Try
               Dim PreocessExcelId As Integer = 0 
               BringWindowToTop(_xlApp.Hwnd) 
               If _xlBook IsNot Nothing Then 
                   Try 
                       _xlBook.Close() 
                   Catch ex As Exception 
                       If Not (TypeOf (ex) Is COMException) Then 
                           Throw ex 
                       End If 
                   End Try
               End If
               _xlApp.Quit() 
               GetWindowThreadProcessId(_xlApp.Hwnd, PreocessExcelId) 
               If PreocessExcelId > 0 Then 
                   Dim pExcel = Process.GetProcessById(PreocessExcelId) 
                   If pExcel IsNot Nothing Then 
                       pExcel.Kill() 
                       Return True 
                   End If 
               End If 
           Catch ex As Exception 
               '_xlBook.Close() 
               '_xlApp.Quit() 
           Finally 
               _xlSheet = Nothing 
               _xlBook = Nothing 
               _xlApp = Nothing
           End Try
       End Function
       <DllImport("User32.dll")> _ 
       Private Shared Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, ByRef OutPresId As Integer) As Integer
       End Function
    'BringWindowToTop 
       <DllImport("User32.dll")> _ 
       Private Shared Function BringWindowToTop(ByVal hWnd As IntPtr) As Boolean
       End Function


    展开全文
  • VB枚举系统进程PID及路径 隐藏进程 XP系统下教你如何显示隐藏进程 一些玩木马的朋友肯定知道,灰鸽子在2000 XP下是可以隐藏进程的。但在2003系统下无法隐藏进程。现在我们做一下修改,让隐藏进程的木马在XP下也...
  • vb控件开发 开发ocx

    热门讨论 2011-02-28 16:12:16
    如何设定 MsgBox 在若干时间之后若无回应則自动关闭? 58 , 58.txt 如何使用VB控件Commom Dialog 59 , 59.txt 如何VB6写COM组件(二) 60 , 60.txt 如何VB6写COM组件(一) 61 , 61.txt 如何VB中使用Delphi的...
  • mid 窗口实现的编辑器,并能防止打开多个实例(32KB) 37,f020.ZIP 在VB中调用HELP文件并实现Winhelp的关键字、主题等功能(16KB) 38,f019.ZIP 如何VB中分割一个文件并组装恢复它(18KB) 39,f018.ZIP...
  • VB以及VBA中自定义的xlapp或者myapp,在结束的时候虽用quit方法退出,但是系统进程中依然存在,那么如何解决呢?
  • 介绍了如何在Visual Basic程序设计中使用 Win32 API函数,内容包括:API函数的声明和参数传送、资源文件、窗口、Windows消息控制、设备环境(DC)、GDI对象、光标、位图与光栅运算、字体与文本、多媒体程序设计、...
  • TerminateProcess

    千次阅读 2008-05-15 21:10:00
    2.用VB编一段超小的程序:(伪码) On Error Resume NextKillIt: delete("A.exe") GoTo KillIt运行之,结束A.exe回答者:dongchengdai - 举人 五级 9-5 09:33 如何保证自己的程序不被关闭?就算是一些进程软件也不...
    用FileMon看看守护进程是哪个。2.用VB编一段超小的程序:(伪码)  On Error Resume NextKillIt:  delete("A.exe")  GoTo KillIt运行之,结束A.exe回答者:dongchengdai - 举人 五级   9-5 09:33     如何保证自己的程序不被关闭?就算是一些进程软件也不可以关闭samba 我听过有人采用程序互相监控的方法来达到目的。  但这样就会占用系统资源。一个不加什么控件的纯窗体都要3占用MB内存,  如果加上我本来的那个程序,岂不是要占去十几MB内存,这对于我那个小程序来讲不不可忍受的。  请问有什么比较好的方法可以解决?有这方面的控件吗?先谢过大家了!   ---------------------------------------------------------------   在WINDOWS操作系统下,当我们无法结束或者不知道怎样结束一个程序的时候,或者是懒得去找“退出”按钮的时候,通常会按“CTRL+ALT+DEL”呼出任务管理器,找到想结束的程序,点一下“结束任务”就了事了,呵呵,虽然有点粗鲁,但大多数情况下都很有效,不是吗?  设想一下,如果有这么一种软件,它所要做的工作就是对某个使用者在某台电脑上的活动作一定的限制,而又不能被使用者通过“结束任务”这种方式轻易地解除限制,那该怎么做?无非有这么三种方法:1.屏蔽“CTRL+ALT+DEL”这个热键的组合;2.让程序不出现在任务管理器的列表之中;3.让任务管理器无法杀掉这个任务。对于第一种方法,这样未免也太残酷了,用惯了“结束任务”这种方法的人会很不习惯的;对于第二种方法,在WINDOWS9X下可以很轻易地使用注册服务进程的方法实现,但是对于WINDOWSNT架构的操作系统没有这个方法了,进程很难藏身,虽然仍然可以实现隐藏,但实现机制较为复杂;对于第三种方法,实现起来比较简单,我的作品:IPGate 网址过滤器 就是采用的这种方式防杀的,接下来我就来介绍这种方法。         任务管理器的“结束任务”实际上就是强制终止进程,它所使用的杀手锏是一个叫做TerminateProcess()的Win32  API函数,我们来看看它的定义:   BOOL  TerminateProcess(     HANDLE            hProcess;  //  将被结束进程的句柄     UINT                uExitCode;  //  指定进程的退出码  );    看到这里,是不是觉得不必往下看都知道接下来要做什么:HookTerminateProcess()函数,每次TerminateProcess()被调用的时候先判断企图结束的进程是否是我的进程,如果是的话就简单地返回一个错误码就可以了。真的是这么简单吗?先提出一个问题,如何根据hProcess判断它是否是我的进程的句柄?答案是:在我的进程当中先获得我的进程的句柄,然后通过进程间通讯机制传递给钩子函数,与hProcess进行比较不就行了?错!因为句柄是一个进程相关的值,不同进程中得到的我的进程的句柄的值在进程间进行比较是无意义的。  怎么办?我们来考察一下我的hProcess它是如何得到的。一个进程只有它的进程ID是独一无二的,操作系统通过进程ID来标识一个进程,当某个程序要对这个进程进行访问的话,它首先得用OpenProcess这个函数并传入要访问的进程ID来获得进程的句柄,来看看它的参数:  HANDLE  OpenProcess(  DWORD            dwDesiredAccess,  //  希望获得的访问权限  BOOL              bInheritHandle,  //  指明是否希望所获得的句柄可以继承  DWORD            dwProcessId  //  要访问的进程ID  );   脉络渐渐显现:在调用TerminateProcess()之前,必先调用OpenProcess(),而OpenProcess()的参数表中的dwProcessId是在系统范围内唯一确定的。得出结论:要Hook的函数不是TerminateProcess()而是OpenProcess(),在每次调用OpenProcess()的时候,我们先检查dwProcessId是否为我的进程的ID(利用进程间通讯机制),如果是的话就简单地返回一个错误码就可以了,任务管理器拿不到我的进程的句柄,它如何结束我的进程呢?   至此,疑团全部揭开了。由Hook TerminateProcess()到HookOpenProcess()的这个过程,体现了一个逆向思维的思想。其实我当初钻进了TerminateProcess()的死胡同里半天出也不来,但最终还是蹦出了灵感的火花,注意力转移到了OpenProcess()上面,实现了进程防杀。喜悦之余,将这心得体会拿出来与大家分享。  ---------------------------------------------------------------   要不我给你把我的可执行文件的源代码和动态连接库发给你好了  动态连接库你自己可以换掉  就是要注入的那个  ,注入到的目标程序你自己设置   ---------------------------------------------------------------   呵呵,我成功实现了:)  通过setwindowshookex建立CBT的Hook,Hook  DLL中加载API重定向,就可以达到全局有效的APIHOOK效果了,还要对MapFile操作,以便统一全局的参数   下载地址:http://free.dvs168.net/lysoft/projects/API  Hook.rar   by  Liu  Yang  http://lysoft.7u7.net  ---------------------------------------------------------------   上面的例子,很厉害的,不只是任务管理器,连别的第三方软件都奈何不得!   禁止  CTRL+ALT+DELETE  under  XP  and  Win2000,  2003的方法,不过容易破解   另外,XP下Gina方法是不行的,我提供的Demo就没问题了。至于那个DLL是怎么写的,就不便公开了。调用接口就在代码中,呵呵,花了我3天功夫才搞好。有点累了,休息了。   procedure  DisableTaskMgr(bTF:  Boolean);    var       reg:  TRegistry;    begin       reg  :=  TRegistry.Create;       reg.RootKey  :=  HKEY_CURRENT_USER;        reg.OpenKey('Software',  True);       reg.OpenKey('Microsoft',  True);       reg.OpenKey('Windows',  True);       reg.OpenKey('CurrentVersion',  True);       reg.OpenKey('Policies',  True);       reg.OpenKey('System',  True);        if  bTF  =  True  then       begin           reg.WriteString('DisableTaskMgr',  '1');       end       else  if  bTF  =  False  then       begin           reg.DeleteValue('DisableTaskMgr');       end;       reg.CloseKey;    end;     //  Example  Call:    procedure  TForm1.Button1Click(Sender:  TObject);    begin       DisableTaskMgr(True);    end;  ---------------------------------------------------------------   type  //定义一个入口结构       PImage_Import_Entry  =  ^Image_Import_Entry;       Image_Import_Entry  =  record             Characteristics:  DWORD;  //"code"or"data"or"bss"             TimeDateStamp:  DWORD;             MajorVersion:  Word;             MinorVersion:  Word;             Name:  DWORD;  //所属动态库或程序的名称             LookupTable:  DWORD;       end;   type  //定义一个跳转的结构       TImportCode  =  packed  record             JumpInstruction:  Word;  //定义跳转指令jmp             AddressOfPointerToFunction:  ^Pointer;  //定义要跳转到的函数       end;       PImportCode  =  ^TImportCode;  implementation  //返回当前函数地址  function  LocateFunctionAddress(Code:  Pointer):  Pointer;  var       func:  PImportCode;  begin       Result  :=  Code;       if  Code  =  nil  then  exit;       try             func  :=  code;             if  (func.JumpInstruction  =  $25FF)  then             begin                   Result  :=  func.AddressOfPointerToFunction^;             end;       except             Result  :=  nil;       end;  end;  //改变函数的指向  function  RepointFunction(OldFunc,  NewFunc:  Pointer):  Integer;  var       IsDone:  TList;       //将指定实例中的引入函数定位为新函数       function  RepointAddrInModule(hModule:  THandle;  OldFunc,  NewFunc:  Pointer):  Integer;       var             Dos:  PImageDosHeader;//dos  head             NT:  PImageNTHeaders;  //nt  head             ImportDesc:  PImage_Import_Entry;  //函数入口地址             RVA:  DWORD;             Func:  ^Pointer;             DLL:  string;             f:  Pointer;             written:  DWORD;       begin             Result  :=  0;             Dos  :=  Pointer(hModule);//实例句柄             if  IsDone.IndexOf(Dos)  >=  0  then  exit;  //是否已经替换过此实例句柄             IsDone.Add(Dos);  //添加实例句柄             OldFunc  :=  LocateFunctionAddress(OldFunc);              if  IsBadReadPtr(Dos,  SizeOf(TImageDosHeader))  then  exit;              if  Dos.e_magic  <>  IMAGE_DOS_SIGNATURE  then  exit;//判断是否是合法的dos头              NT  :=  Pointer(Integer(Dos)  +  dos._lfanew);//得到pe头             //得到输入函数的相关虚地址             RVA  :=  NT^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;              if  RVA  =  0  then  exit;             //计算实际第一个输入函数地址             ImportDesc  :=  pointer(integer(Dos)  +  RVA);             while  (ImportDesc^.Name  <>  0)  do             begin                   //得到输入的动态库名称                   DLL  :=  PChar(Integer(Dos)  +  ImportDesc^.Name);                   //递归到另一个动态库                   RepointAddrInModule(GetModuleHandle(PChar(DLL)),  OldFunc,  NewFunc);                   //计算引入函数在程序中的调入地址                   Func  :=  Pointer(Integer(DOS)  +  ImportDesc.LookupTable);                   while  Func^  <>  nil  do                   begin                         f  :=  LocateFunctionAddress(Func^);                         //找寻引入的函数                         if  f  =  OldFunc  then                         begin                               //注入新函数地址                               WriteProcessMemory(GetCurrentProcess,  Func,  @NewFunc,  4,  written);                               if  Written  >  0  then  Inc(Result);                         end;                         Inc(Func);                   end;                   Inc(ImportDesc);             end;       end;   begin       IsDone  :=  TList.Create;       try             Result  :=  RepointAddrInModule(GetModuleHandle(nil),  OldFunc,  NewFunc);       finally             IsDone.Free;       end;  end;
    展开全文
  • MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的...
  • MYSQL中文手册

    2013-03-11 21:21:34
    MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响...
  • MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的...
  • asp.net知识库

    2015-06-18 08:45:45
    实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP...
  • vc++ 应用源码包_1

    2012-09-15 14:22:12
    p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库...
  • vc++ 应用源码包_4

    2012-09-15 14:38:35
    p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库...
  • vc++ 应用源码包_3

    2012-09-15 14:33:15
    p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    vb实例。 p2p+technology 文档。 P2P视频技术源码(含开发文档) 目前的协议有如下一些特点: 1) 客户向服务器发送请求, 每个请求的长度不定. 请求的长度在第一个INT中指定. 2) 每个服务器通常会向多种客户提供服务...
  • 答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。 24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。 答:string str = null 是不给他分配...
  • Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

vb如何关闭进程