这个问题有人问过,但是回答的都是说如何实现快捷键的问题,我这里问的不是怎么样实现快捷键,看下面的要求:
1、我们要编写一个程序,启动后,假设快捷键和金山一样是 * ,当按下*的时候弹出窗口。
2、弹出的窗口根据按*的窗口的不同而不同,大家都用过游戏修改类的工具,在游戏A里呼叫出来的窗体显然和在游戏B中呼叫的不一样,这2个窗体是分别对应2个不同的游戏的.而且呼叫出窗口搜索数值后可以返回到游戏中,这个呼叫出来的窗口会隐藏,在下次呼叫出的时候还可以继续的搜索游戏数据,
3、我要问的就是怎么样实现上面的功能,不同游戏中呼叫出不同的窗体,里面的数据都是和呼叫的窗体对应的,而且可以随时隐藏掉,直到主程序关闭才消失,我写的应该很明白吧,呵呵,高手来解释下啊

解决方案 »

  1.   

    注册热键就不说了。热键处理的函数中:
    var
      m_Handle: THandle;
    begin
      if Key = '*' then
      begin
        if 窗体已经显示 then  关闭窗体,DLL注入结束,退出。    m_Handle:= GetForegroundWindow; //我想你想知道的就是这个API了,获取当前的最前面的窗体
        //-----------------------------------//
        // 接下来,Dll注入,注入的窗体句柄已经获得了
        //      |
        //  这样,可以根据不同的需求创建不同的窗体 Form1:= TForm1.Create(m_Handle);      
        //      |
        //   弹出模式窗体 Form1.ShowModal;
         //     |
        //    读取数据显示 //弹出和读取数据可以互换位置
        //      |
        //--------------------------------------//
      end;
      ....
    end;
      

  2.   

    就是说要用DLL窗体才可实现是吧?
      

  3.   

    不管怎么样,只要注册热键的方法即可.
    procedure TForm1.BitBtn13Click(Sender: TObject); 
    begin 
       hotkeyid:=GlobalAddAtom(  'Hotkey  ');//  'Hotkey  '名字可以随便取 
       RegisterHotKey(form1.Handle,hotkeyid,0,VK_F1); 
    end; procedure TForm1.BitBtn14Click(Sender: TObject); 
    begin 
       unregisterhotkey(handle,hotkeyid); 
       DeleteAtom(hotkeyid); 
    end; procedure WMHotKey(var Msg: TWMHotKey); message wm_hotkey; 
    procedure TForm1.WMHotKey(var Msg: TWMHotKey);  
    begin 
      if msg.HotKey = hotkeyid then 
      begin  
        Self.Visible:= not Self.Visible;  
      end;  
    end; 注册热键,按F1进行显示与隐藏.
      

  4.   

    肯定要在dll中了,因为你是要在别的进程中弹出窗体啊!