精华内容
下载资源
问答
  • C++的进程响应技术

    2001-04-30 09:47:00
    C++的进程响应技术 吴小岭在 Windows环境中,一个应用程序按指定方式响应另一个应用程序的解决方法一般是利用 DDE,这需要作出响应的一方提供DDE服务。但是,如果作出响应的一方没有这种服务,我们就没有别的办法...

                               C++的进程间响应技术

      吴小岭

    在 Windows环境中,一个应用程序按指定方式响应另一个应用程序的解决方法一般是利用 DDE,这需要作出响应的一方提供DDE服务。但是,如果作出响应的一方没有这种服务,我们就没有别的办法了吗?当然有,那就是向应用程序发送消息,应用程序接收到标准的 Windows消息后,就会完成相应的操作。 
     
    要向应用程序发送消息,首先要得到它的窗口句柄,这可以通过两个 API函数 GetWindow和 GetWindowText来实现。首先用GetWindow函数遍历所有的 Windows窗口,再用 GetWindowText函数得到每个窗口的标题,如果得到的标题和我们想要查找的窗口的标题一样,就得到我们想要的窗口句柄了。应用程序的窗口是一个树状结构,每一个子窗口下还可能有子窗口,要得到所有子窗口的句柄,就要遍历整个树,为了实现这一点,我们在程序中用了一个简单的堆栈操作。有了具体的窗口句柄后 ,就可以通过发送消息实现我们想实现的操作。本文举了几个简单的例子,实现了一些比较常用的操作,如修改按钮或文本框中的文字,实现从一个程序控制另一个应用程序中的按钮单击等。 
     
    图 1是程序运行的主窗体画面:
     
     
    下面是在 C++ Builder中实现的源程序部分代码: 
     
    单元文件 Unit1.cpp 
     
    # include <vcl.h>
     
    # pragma hdrstop 
     
    # include“ Unit1.h” 
     
    # pragma package(smart_init) 
     
    # pragma resource“* .dfm” 
     
    TForm1* Form1; 
     
    __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) 
     

     

     
    void __fastcall TForm1::btnSearchClick(TObject* Sender) 
     
    {  
     
    搜索标题和 txtTitle中的文本相符合的窗口,把搜索到的窗口句柄放到 h_Wnd中 ,并把它的所有子窗口的句柄放到数组hWndArray中 
     
    char Search[128]; 
     
    char ClassName[128]; 
     
    HWND h_Child; 
     
    int currPos; 
     
    int cmpLen; 
     
    currPos=0; 
     
    lstClassName- >Clear(); 
     
    lstControlText- >Clear(); 
     
    memoReadWrite- >Clear(); 
     
    h_Wnd=GetWindow(Form1- >Handle, 
     
    GW_HWNDFIRST);  
     
    遍历所有窗口 
     
    while(h_Wnd){ 
     
    GetWindowText(h_Wnd,Search,128); 
     
    cmpLen=txtTitle- >Text.Length(); 
     
    Search[cmpLen]=0; 
     
    if(AnsiString(Search)== txtTitle- >Text){  
     
    寻找窗口标题和我们输入到 txtTitle中的内容相符合的窗口 
     
    lstClassName- >Items- >Add(AnsiString(Search)); 
     
    lstControlText- >Items- >Add(AnsiString(Search)); 
     
    sPush(h_Wnd); 
     
    h_Child=GetWindow(h_Wnd,GW_CHILD);  
     
    找出所有子窗口 ,把句柄放入数组 hWndArray中 
     
    while(1){ 
     
    hWndArray[currPos]=h_Child; 
     
    GetClassName(h_Child,ClassName,128); 
     
    SendMessage(h_Child,WM_GETTEXT,128,(LPARAM)Search);  
     
    把找到的子窗口的类名和子窗口的序号放到列表框 lstClassName中 ,通过这些数据 ,我们可以确定对这些子窗口可以发送什么消息 
     
    lstClassName- >Items- >Add(AnsiString(currPos)+“-- "+ AnsiString(ClassName));  
     
    把找到的子窗口的文字信息放到列表框 lstControlText中,通过这些信息 ,我们能较准确地定位子窗口在主窗口的位置 
     
    lstControlText- >Items- >Add(AnsiString(currPos)+“-- "+ AnsiString(Search)); 
     
    currPos++ ; 
     
    sPush(h_Child); 
     
    h_Child=GetWindow(h_Child,GW_HWNDNEXT); 
     
    if(!h_Child){ 
     
    while (!h_Child&& stack_Top>0){ 
     
    h_Child=sPop(); 
     
    h_Child=GetWindow(h_Child,GW_CHILD); 
     

     
    if(stack_Top== 0)break; 
     

     

     
    break; 
     

     
    else 
     
    h_Wnd=GetWindow(h_Wnd,GW_HWNDNEXT); 
     

     
    }  
     
    下面是几个简单的操作例子 ,向指定的子窗口发送消息 ,完成规定的操作  
     
    修改主窗口的标题 
     
    void __fastcall TForm1::btnMainClick(TObject* Sender 
     

     
    SetWindowText(h_Wnd,txtToValue- >Text.c_str()); }  
     
    修改指定子窗口的文本 ,文本框 txtIndex的内容指定子窗体的索引号 ,用文本框 txtToValue中的内容替换子窗口的文本 
     
    void __fastcall TForm1::btnChildClick(TObject* Sender) 
     

     
    int ctlIndex; 
     
    ctlIndex=txtIndex- >Text.ToInt(); 
     
    SetWindowText(hWndArray[ctlIndex],txtToValue- >Text.c_str()); 
     
    }  
     
    获得类型为文本框的子窗口中的文本 ,将获得的文本放到 memoReadWrite中 
     
    void __fastcall TForm1::btnGetClick(TObject* Sender) 
     

     
    int ctlIndex; 
     
    char theCopy[256]; 
     
    memoReadWrite- >Clear(); 
     
    ctlIndex=txtIndex- >Text.ToInt(); 
     
    SendMessage(hWndArray[ctlIndex],WM_GETTEXT,256,(LPARAM)theCopy); 
     
    memoReadWrite- >Lines- >Add(AnsiString(theCopy)); 
     
    }
    void __fastcall TForm1::btnExitClick(TObject* Sender){ 
     
    Application- >Terminate(); 
     
    }  
     
    用指定的文本替换类型为文本框的子窗口中的文本 
     
    void __fastcall TForm1::btnChangeClick(TObject* Sender) 
     

     
    int ctlIndex; 
     
    ctlIndex=txtIndex- >Text.ToInt(); 
     
    SendMessage(hWndArray[ctlIndex],EM_SETSEL,0,1000); 
     
    SendMessage(hWndArray[ctlIndex],EM_REPLACESEL, 
     
    (WPARAM)true,(LPARAM)(txtToValue- >Text.c_str())); 
     
    }  
     
    向被操纵的应用程序中类型为按钮的子窗口发送 BM_CLICK,以实现按钮单击动作 
     
    void __fastcall TForm1::btnCtlBTNClick(TObject* Sender) 
     

     
    int ctlIndex; 
     
    ctlIndex=txtIndex- >Text.ToInt(); 
     
    SendMessage(hWndArray[ctlIndex],BM_CLICK,0,0); 
     
    /*其实 ,如果不熟悉 Windows的消息结构 ,简单的 
     
    鼠标和键盘消息同样可以实现大部分操作。例如,发送一个鼠标按下消息 ,再发送一个鼠标弹起消息 ,就可以模拟单击消息。

    * /  
     
    SendMessage(hWndArray[ctlIndex],WM_LBUTTONDOWN,0,0);  
     
    SendMessage(hWndArray[ctlIndex],WM_LBUTTONUP,0,0); 
     

     
    头文件 Unit1.h  
     
    堆栈 
     
    HWND AStack[100];  
     
    堆栈指针 
     
    int stack_Top;  
     
    子窗口句柄数组和主窗口句柄 
     
    HWND hWndArray[100],h_Wnd;  
     
    入栈 
     
    void sPush(HWND hWndValue) 
     

     
    if(stack_Top<100) 
     

     
    AStack[stack_Top]=hWndValue; 
     
    stack_Top++ ; 
     

     
    else 
     

     
    MessageBox(NULL,“ Stack Overflow” ,“ Stack Error” ,0); 
     

     
    }  
     
    弹出 
     
    HWND sPop() 
     

     
    if(stack_Top >0) 
     

     
    stack_Top-- ; 
     
    return AStack[stack_Top]; 
     

     
    else 
     

     
    MessageBox(NULL,“ Stack Empty” ,“ Stack Error” ,0); 
     

     

     
    # ifndef Unit1H 
     
    # define Unit1H 
     
    # include <Classes.hpp>
     
    # include <Controls.hpp>
     
    # include <StdCtrls.hpp>
     
    # include <Forms.hpp>
     
    # include <ExtCtrls.hpp>
     
    # include <Graphics.hpp>
     
    class TForm1 : public TForm 
     

     
    __published: // IDE- managed Components 
     
    TListBox* lstClassName; 
     
    TListBox* lstControlText; 
     
    TMemo* memoReadWrite; 
     
    TEdit* txtTitle; 
     
    TEdit* txtIndex; 
     
    TEdit* txtToValue; 
     
    TButton* btnSearch; 
     
    TButton* btnMain; 
     
    TButton* btnChild; 
     
    TButton* btnGet; 
     
    TButton* btnChange; 
     
    TButton* btnExit; 
     
    TLabel* Label1; 
     
    TLabel* Label2; 
     
    TLabel* Label3; 
     
    TButton* btnCtlBTN; 
     
    void__fastcall btnSearchClick(TObject* Sender); 
     
    void__fastcall btnMainClick(TObject* Sender); 
     
    void__fastcall btnChildClick(TObject* Sender); 
     
    void__fastcall btnGetClick(TObject* Sender); 
     
    void__fastcall btnExitClick(TObject* Sender); 
     
    void__fastcall btnChangeClick(TObject* Sender); 
     
    void__fastcall btnCtlBTNClick(TObject* Sender); 
     
    private: 
     
    public: 
     
    __fastcall TForm1(TComponent* Owner); 
     
    }; 
     
    extern PACKAGE TForm1* Form1; 
     
    # endif 
     
    通过向作出响应的一方窗口发送 Windows消息,我们可以完成各种复杂的操作。在上面的例子中,“单击按钮”只是让响应窗体完成了按钮单击的动作,如果我们想一想办法,也许可以把按钮对应的窗口函数替换掉,有兴趣的读者可以自己研究一下。 
     
    另外,我们可以用此技术做一个针对某一应用程序的 ActiveX控件,在控制程序中加入这个控件,再加入微软的脚本控件 (MSSCRIPT.OCX),通过在外部编写脚本,就可以实现控制的自动化和程序化。

     

     

    展开全文
  • 如上图所示,windows任务管理器中的进程Tab列中列出了系统管理的所有进程,我们经常利用任务管理器来结束某个没有得到响应应用程序,但是,作为一个windows程序员,我们应该有这样的疑问:进程是什么东西?...

    发表时间:2013.5.18

    内容:windows进程(process)

    作者:郑金玮

     

    如上图所示,windows任务管理器中的进程Tab列中列出了系统管理的所有进程,我们经常利用任务管理器来结束某个没有得到响应的应用程序,但是,作为一个windows程序员,我们应该有这样的疑问:进程是什么东西?系统为什么会存在进程?进程有哪些属性?进程是怎样工作的?以及我们自己写的程序中能不能用进程,且应该怎样使用....?......带着这些问题,我自己参考了微软技术丛书--《windows核心编程》,现在请允许我将自己获取的一些知识总结出来,希望对初学的大家有些许帮助。

     

    “进程是一个正在运行的实例”,《核心编程》是这样给进程下定义的

    “被加载到内存中执行的程序实例,称为进程(process)”《操作系统》的定义

    的确,当我们在windows某个驱动盘符下的文件夹中双击左键执行某个文件程序,然后程序运行,这就是一个实例,我在前面章节中也说过,有些程序只允许一个实例运行,最具代表性的就是网络游戏,当我们运行网络游戏程序(如CF),会顺利执行,弹出一个窗口,再次双击文件,还是只有一个窗口,甚至第二次执行时会弹出一个提示框,类似于:“当前已有...实例在运行”(如:DNF),我想举了这样一些例子,大家应该明白了什么是实例了.

     

    进程作为一个正在运行的实例,那么进程内部到底是怎样实现的?

    “进程有两个部分组成:

    1.一个内核对象,操作系统用这个内核对象来管理进程

    2.一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据,此外还包含动态内存分配,比如线程堆栈和堆的分配。”(《windows核心编程》)

     

    进程作为应用程序的一部分,操作系统是利用内核对象来管理进程,什么是内核对象?

     

    内核对象其实是个小型的数据结构,每当进程创建时由系统分配空间去创建一个内核对象去管理进程,由这个内核对象去统计一些有关进程的一些信息。

    我们写windows程序,每当进入winmain函数入口点,由系统分配地址空间,由CS:IP指向程序首地址,有系统创建进程,然后由这个进程去创建线程(有关线程,下面再述),这个进程就称作主进程,其实进程具有“惰性”,就是因为进程要执行一些事务,必须由线程去执行,进程就相当于线程的容器,线程在进程的上下文中运行。

     

    所以我们写的程序最起码都包含一个进程和一个线程,虽然我们没有显式地去创建这个进程和线程,这些工作都是有系统去完成的,一般的,如果我们的程序不是很强大,没有必要去创建进程,因为下一章节介绍的线程会让我们的程序更加容易实现(设计到进程间通信相对于线程间通信要复杂),还有,如果我们写GUI程序,一般由一个线程去做这些界面工作,没有必要去创建额外的线程。

     

    为什么存在进程?

    windows操作系统是基于时间片分配的分时操作系统,对于只有一个处理器的PC来说,系统要执行一堆程序,必须给每个程序分配一个时间片,然后让他们轮循执行,可以这么说,在每个时刻,windows操作系统肯定只有一个程序在执行,而在下一时刻,可能刚才执行的程序已经挂起,而这样一些工作,系统就是利用进程来管理实现的。

    每当进程创建,系统会将该进程加入一个队列,这个队列一直在执行,对于队列,我们知道,它是先进先出的一个数据结构。系统创建这个队列来容纳所有创建的进程,然后让他们轮询执行,所以当应用程序过多时,系统的响应就就会越慢,这是显而易见的,因为每个时刻只允许一个进程执行,此时其他进程必须挂起,等待该进程运行的时间片结束,然后轮到下一个要等待执行的进程执行。

     

    我们自己的程序如何实现进程,多进程的程序好吗?

    虽然我们自己写的最简单的程序拥有一个进程,这个进程有系统创建和分配,但是有时候,我们的程序为了达到高性能的要求,必须创建额外的进程去管理数据,因为对于一个对UI响应要求高的I/O或NET程序来说,I/O的操作绝不可以影响UI的响应,否则会引起死锁,例如当我们玩游戏的时候,有事网络带宽太低,游戏的界面得不到响应,这时候如果按下鼠标左键和键盘上的任意键,一般系统会弹出一个对话框,提示“结束程序”和“取消”,并且界面出现白热化。多进程能改保证I/O操作和UI操作能同步执行,互不影响。还有,例如我们写一个程序,这个程序一直在播放背景音乐,那么我们可以把这个动作放在额外的进程中去,我们熟知的利用GetOpenfilename打开本地文件对话框时,一般会出现短暂性的等待,且用户指针会编程ICON_WAIT所指定的动态圆圈(win7,win vista)(winXP是漏斗),这说明打开这个对话框确实耗费了一定的内存,此时,我们也可以创建额外的进程(或线程)去提高性能。

     

    实现进程的方法:

    windows platform SDK提供了一些API供程序使用,可以很简单的使用进程。

    createprocess(...) 我们利用这个函数可以创建一个进程,此时系统会分配一个内核对象去管理它,这个函数返回的是一个句柄(handle),所谓句柄,实际上是一个标识符,是内存空间的一个基地址,系统会将这个基地址与进程的映像相关联,不用想太多,我们只要知道,这个句柄就是用来标识进程就行了。(我们可以利用getmodulehandle(..)获取一些有用的信息,如果给参数传入.EXE文件的路径或者DLL文件路径的话就会获取该可执行文件的句柄,如果传NULL,就是获取当前程序的主进程句柄(主进程基地址)),一旦我们对这个句柄不感兴趣了(我们以后肯能用不到它了),就要调用closehandle(..)关闭句柄,记住,仅仅是关闭而已,该句柄标记的进程仍然在运行。

     

    当我们想退出进程,如何实现?

    exitprocess(..)可以显式地结束某个进程

    terminateprocess(..)让外部的进程可以结束任何其他进程(任务管理器就是这样实现结束进程的)

    虽然有这样一些API,但是windows并不提倡使用他们去结束进程,最好的方法就是我们程序员什么也不做,让进程在主调进程的入口点返回,这样可以保证所有进程都可以顺利结束自己的一生。

     

    进程终止时,发生了什么?

    1.终止进程中遗留的任何线程

    2.释放进程分配所有对象

    3.进程的退出代码从STILL_ACTIVE变为进程退出函数的代码

    4.进程内核对象的状态变为触发状态

    5.进程的内核对象的使用计数减1

     

    分析:1,因为进程是线程的容器,进程并不执行任何代码,一旦进程的生命周期结束,它所拥有的所有线程必将结束,很容易理解,因为装线程的容器都没了,线程也就不复存在了

    2.进程既然是线程的容器,那么线程中所拥有的任何内核对象必将销毁,包括GDI对象(内核)和用户对象。

    5.管理进程的是系统的内核对象,而一个进程可能被多个其他进程使用(打开),而内核对象的使用计数就是标识使用次数的,例如:我们有时遇到这中情况,当我们的U盘插在USB接口上使用,然后退出U盘,可能会出现提示无法正常退出,因为某个U盘内的程序已经打开,没有关闭,但是我们怎么找都找不到到底是哪个文件没有关闭,就是因为内核对象的使用计数没有递减到0,因为每当我们关闭一个文件,管理该文件的内核对象的使用计数会减1,但是处于某种原因,在打开另一个文件的时候,无意中打开了另一个文件的句柄,可能是在内部共享某个DLL,也可能是数据重叠,反正就是把那个文件的句柄打开了,于是内核对象的使用计数就加1,可是系统只知道,要想正常退出,必须保证内核对象的使用计数为零。。。

     

     

    再次强调,我们应该尽可能的用线程代替进程,关于线程,请参照下一节:《windows核心编程》之线程、线程同步,线程与进程的关系,线程与作业的关系,进程间通信和线程间通信

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 简介:本文描述了使用C++、VB、Windows API和.Net类库如何判断一个进程是否停止了响应没有一个明确的“停止响应”的定义,例如对于Internet Explorer或者Word 2000这样的多顶层窗口应用程序,可能存在部分顶层...
    简介:本文描述了使用C++、VB、Windows API和.Net类库如何判断一个进程是否停止了响应。

    没有一个明确的“停止响应”的定义,例如对于Internet Explorer或者Word 2000这样的多顶层窗口应用程序,可能存在部分顶层窗口失去响应的情况,这时很难定义应用程序是否停止了响应。但是一般来说,很多应用程序只有一个标志性窗口(或者叫主窗口)。如果主窗口在一段时间内不响应用户操作的时候,对于用户来说应用程序是停止响应的(例如在Internet Explorer等待远程FTP服务器返回登录结果时)。尽管这经常属于其他应用程序应该妥善考虑的范畴,但是如果自己的应用程序依赖于这样的程序而没有源代码级控制权,那么应该提供一个机会允许用户中断对外部应用程序的等待或者干脆终止外部应用程序。

    Windows2000及Windows XP中提供了一个API IsHungAppWindow,但是微软声明此函数可能在后续的Windows版本中删除这个函数。不用遗憾,在Windows 32中有一个特殊的消息WM_NULL,在其文档中说明它可以和SendMessageTimeout一起用于判断某个窗口是否停止了响应。一般来说,我们需要获得进程的标志性窗口(或者叫主窗口)来执行这个判断。2002年7月的MSDN杂志Q&A专栏文章Get the Main Window, Get EXE Name 说明了如何做到这一点。很遗憾,附录中的文章How To Detect If an Application Has Stopped Responding中通过访问浏览器对象的hwnd属性绕过了这个过程,或许是因为在VB中调用EnumWindow比较繁琐;参见附录中的Enumerating Windows Using API(VB)。

    另外,.Net Framework中提供了一个Responding属性,可以用于检测进程是否停止了响应。附录中的两篇基于.Net的文章就是检查了这个属性。看起来这似乎是通过检查进程的MainWindowHandle指明的窗口是否立刻响应来解决的。通过这种方法判断的缺点是无法设置等待超时的时间。

    参考资料
    IsHungAppWindow(MSDN)
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/ishungappwindow.asp
    WM_NULL(MSDN)
    http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowmessages/wm_null.asp
    Process.Responding Property (MSDN)
    http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDiagnosticsProcessClassRespondingTopic.asp
    如何“干净地”终止 Win32 中的应用程序
    http://support.microsoft.com/kb/178893/zh-cn
    How To Detect If an Application Has Stopped Responding
    http://support.microsoft.com/kb/231844
    304991 Detect if an Application Has Stopped Responding by Using C# 
    http://support.microsoft.com/kb/304991
    304990 Detect if an Application has Stopped Responding by Using Visual Basic .NET 
    http://support.microsoft.com/kb/304990
    Get the Main Window, Get EXE Name
     http://msdn.microsoft.com/msdnmag/issues/02/07/CQA/
    Enumerating Windows Using API(VB)

    http://www.vbaccelerator.com/home/VB/Code/Libraries/Windows/Enumerating_Windows/article.asp


    原文地址:http://blog.csdn.net/jiangsheng/article/details/235432

    展开全文
  • Win10 关机显示程序没有响应

    千次阅读 2020-11-22 15:15:13
    具体表现,每次关机都提示某一个程序没有响应,在进程,服务中都找不到对应的的程序。我这里显示的程序如下图所示 根本就找不到这个程序是个什么东西,即使我刚开机,啥都没干,直接关机,也是这个提示,有好几次...

    现象描述

    具体表现,每次关机都提示某一个程序没有响应,在进程,服务中都找不到对应的的程序。我这里显示的程序如下图所示

    根本就找不到这个程序是个什么东西,即使我刚开机,啥都没干,直接关机,也是这个提示,有好几次关机的时候都是没法关掉,把笔记本直接装进书包,回家在拿出来,那热乎乎,感觉给笔记本蒸了一个桑拿呀。

    解决方案

    不要问原因,我也找不到,指示教你怎么解决

    第一步 进本地策略编辑器

    Windows键+R gpedit.msc

    第二步 编辑选择 关闭会阻止或却表关机的应用程序的自动终止功能策略

    按照以下顺序展开策略,编辑关闭会阻止或却表关机的应用程序的自动终止功能

    第三步 禁用关闭会阻止或却表关机的应用程序的自动终止功能策略 

    选择禁用

    解决问题

     

     

     

    展开全文
  • 很多人会习惯按下CTRL+ALT+DEL,调出任务管理器来终结应用进程,常用Windows的用户会很熟悉这个操作。Windows的任务管理(Windows Task Manager)也是个非常古老的应用了,最初是有微软员工David Plummer开发的,后来...
  • 很多人会习惯按下CTRL+ALT+DEL,调出任务管理器来终结应用进程,常用Windows的用户会很熟悉这个操作。Windows的任务管理(Windows Task Manager)也是个非常古老的应用了,最初是有微软员工David Plummer开发的,...
  •  本书介绍了在Windows操作系统平台上如何使用Windows套接字应用程序接口(Windows Socket APl)编写TCP/IP通信程序。重点放在客户—服务器机制上,介绍了客户-服务器机制和应用程序用于网络通信的套接字接口,分析了...
  • 此缺点解方法:截取键盘事件,以响应TAB事件(时间有限,没有实现)程序难点2:实时与分时混合应用解决方法:置一FOR循环在TIMER中,先判断并响应时实进程,再置另一当循环在TIMER中,无时实时再执行分时进程。...
  • Windows为什么要支持线程,进程与线程的联系与区别是什么?...例如,在16位Windows的那些日子,打印一个文档的应用程序很容易“冻结”整个机器,造成OS和其他应用程序停止响应。有的应用程序含有bug,会...
  • nginx v1.5.9 for windows

    2014-03-27 23:07:53
    因此 在启用多进程时 不能使用共享内存来做SSL的session缓存 也就是说 要实现SSL 只能使用单进程 从而限制了并发连接数 (造成这种结果的原因 可能是作者对Nginx在Windows平台下的应用不太重视 在共享内存中使用了...
  • Windows程序关闭的问题

    2018-07-30 23:51:28
    问题描述 最近遇到一个技术难点,要求在任务管理器中关闭不了程序,虽然在驱动层里实现了拒绝关闭程序的请求...应该是task manager给待关闭的进程发送了WM—CLOSE消息,如果没有响应,超时500ms后,再调用Terminate...
  • Windows问答精华

    2011-09-30 09:14:04
    关闭没有响应的程序.txt 删除IE右键菜单内容.txt 删除NTFS分区.txt 删除信使服务.txt 删除启动选项中的选项.txt 删除屏幕保护和壁纸.txt 删除添加删除程序的无效信息.txt 删除系统备份文件.txt 删除虚拟光驱遗留盘符...
  • 因此 在启用多进程时 不能使用共享内存来做SSL的session缓存 也就是说 要实现SSL 只能使用单进程 从而限制了并发连接数 (造成这种结果的原因 可能是作者对Nginx在Windows平台下的应用不太重视 在共享内存中使用了...
  • 1、自己是做Android开发的,新换的本在使用AndroidStudio时出现无响应(打开什么也没有无法操作关也关不掉),想到在windows 上有个进程管理可以直接选择关闭 Mac上该如何操作呢?查找后发现使用快捷键Command+...
  •  0205 在命令子树中的进程没有信号句柄。  0206 文件名或扩展名太长。  0207 环 2 堆栈正在使用中。  0208 输入的全局文件名字符 * 或 ? 不正确,或指定的全局文件名字符太多。  0209 所发送的信号不...
  •  14.2.3 在内核中等待监控进程响应 210  14.3 开发监控进程 216  14.4 本软件进一步展望 218  第15章 Rootkit与HIPS 220  15.1 Rootkit为何很重要 222  15.2 Rootkit如何逃过检测 224  15.3 HIPS如何检测...
  • 阶段4:将新进程通知Windows子系统 309 阶段5:启动初始线程的执行 310 阶段6:在新进程环境下执行进程初始化 310 6.3 线程的内部机理 313 数据结构 313 内核变量 320 性能计数器 321 有关的函数 322 一个线程的产生...
  • 阶段4:将新进程通知Windows子系统 309 阶段5:启动初始线程的执行 310 阶段6:在新进程环境下执行进程初始化 310 6.3 线程的内部机理 313 数据结构 313 内核变量 320 性能计数器 321 有关的函数 322 一个线程的产生...
  • 14.2.3在内核中等待监控进程响应 14.3 开发监控进程 14.4 本软件进一步展望 第15章 rootkit与hips 15.1 rootkit为何很重要 15.2 rootkit如何逃过检测 15.3 hips如何检测rootkit 第16章 手写指令保护代码 16.1 混淆...
  •  14.2.3 在内核中等待监控进程响应 210  14.3 开发监控进程 216  14.4 本软件进一步展望 218  第15章 Rootkit与HIPS 220  15.1 Rootkit为何很重要 222  15.2 Rootkit如何逃过检测 224  15.3 HIPS如何检测...
  •  14.2.3 在内核中等待监控进程响应 210  14.3 开发监控进程 216  14.4 本软件进一步展望 218  第15章 Rootkit与HIPS 220  15.1 Rootkit为何很重要 222  15.2 Rootkit如何逃过检测 224  15.3 HIPS如何检测...
  • 1.问题描述:MFC应用程序中,嵌入一个ocx控件,在控件中启动另一个进程,并作为子窗口;在子窗口中切换中英文模式,不起作用! 2.ocx控件中的Oncreate函数中,启动进程代码: ``` if (COleControl::OnCreate...
  • (注:原书没有书签。为了方便阅读,本人添加了完整详细的书签) 全书压缩打包成2部分,这是第2部分。 内容简介  循序渐进地讲解了Android技术在各个领域中具体应用的典型范例,详细介绍了各个范例的具体实现过程。...
  • (注:原书没有书签。为了方便阅读,本人添加了完整详细的书签) 全书压缩打包成2部分,这是第1部分。 内容简介  循序渐进地讲解了Android技术在各个领域中具体应用的典型范例,详细介绍了各个范例的具体实现过程。...
  • Delphi中制作DLL中回调函数的应用

    热门讨论 2007-01-20 15:28:11
    在widnows 32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份, 但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用程序间的数据 传递,除非你用内存映像文件。 ...
  • 6.16 从TCP连接中读取响应 50 6.17 关闭TCP连接 51 6.17.1 对部分关闭的需要 51 6.17.2 部分关闭的操作 51 6.18 UDP客户的编程 51 6.19 连接的和非连接的UDP套接字 52 6.20 对UDP使用connect 52 6.21 使用...
  • 市场上常见的 PDA 等小型手持式设备上,以前由于硬件条件等的限制,我们看到功能都非常简单,没有网络、GUI 等非常实用方便的功能。但最近出现的 Palm 等手持式电脑或者在 Windows CE 等面向嵌入式系统的操作系统上...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 173
精华内容 69
关键字:

windows应用进程没有响应