现有一个C#实现的B/S结构的OA办公自动化系统,已经正常投入使用了,又有一个VC++实现的小型即时聊天软件,有服务器端和客户端两部分,服务器端连接数据库,客户端直接连接服务器端,登录方式是客户端将用户名和密码发往服务器端,由服务器端查找数据库进行比较,并将比较结果发回给客户端进而判断登陆是否成功。如果不成功则返回,成功则跳转到主面板。
    如果我将这两个系统的数据库合成一个,怎样可以实现在登录OA的同时将此聊天软件也登陆上呢?
    要求聊天软件的登陆界面不显示,在OA登陆界面中输入用户名密码,点击登录就同时执行聊天软件的登录过程,登陆成功后出现OA主界面并将聊天软件最小化到托盘。效果跟登陆校内网的同时也一起登陆校内通相似。
    请有经验的大侠指教一下具体实现方法,也请大家提供一下意见,多多益善!!!

解决方案 »

  1.   

    我做过类似的,可以这样处理:1.两个应用本来独立的,所以最好不要让他们耦合太大。服务器端还是原来的处理方式不变。2.客户端在原来基础上增加接口:2.1聊天软件客户端再增加一个接口用来让外部程序启动,方式有很多。
    2.2写COM组件供OA页面调用。此组件功能为启动聊天软件。
    2.2 OA登录页面后,调用COM组件启动聊天软件。
      

  2.   

    感谢fengrx提供的方法,我先去研究一下这个Com组件的实现,如果再有问题再单独请教你,不过现在有一个问题,你说的方法理解起来好像只是实现启动聊天软件,不是登录聊天软件啊。
      

  3.   

    启动时把用户名、密码传进去就可以登录了。1.取用户名、密码
    不知你现在的两个应用使用的用户使一个吗?是的话直接把OA登录时用户输入用户名密码传过去就行。
    如果不是一个用户那就需要在服务器端加接口了。2.传用户名、密码到聊天软件:
    方式1:启动参数,例如: im.exe "username" "password" 在程序中再解析启动参数。
    方式2:共享内存,把需要传的数据使用共享内存传过去。我的博客中用直接可以用的共享内存类。
    上面两个方式都是COM传给聊天软件的。
      

  4.   

    恩,你说的很明白了,不过我水平有点不够,所以要先去研究一下你说的这些技术,等我研究完了再联系你,方便用私信给我留一下qq号吗?我想过后还会请教你,msdn的在线聊天不知为什么不能用了。非常感谢!
      

  5.   

    csdn,不是msdn,打错了,哈哈
      

  6.   

    做成dll的形式,就可以供外部使用了。
      

  7.   

    启动运行:
    你的聊天程序就是一个EXE吧。
    那使用CreateProcess或WinExec都可以启动吧。聊天程序接口:
    方法1:
    启动参数形式
    WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    第三个参数可以解析外部传入的启动参数lpCmdLine方法2:
    使用共享内存的话,也是在调用前创建共享内存,填写数据。然后启动聊天程序,在聊天程序的main函数里边读取共享内存。
      

  8.   

    我的聊天程序是exe,基于对话框的,我知道在com组件中使用CreateProcess或WinExec或SheelExcute都可以启动聊天软件(不过我还没写过),但是聊天软件一方要做什么呢?你说的“2.1聊天软件客户端再增加一个接口用来让外部程序启动,方式有很多。”这一步是指什么?怎么做?
      

  9.   

    URL协议是什么?怎么用?能说具体点吗
      

  10.   

    将客户端改成flash版的吧,简单
      

  11.   

    怎么改成flash版的?程序很复杂,简直就是个小型的qq,可以用flash实现聊天功能吗?
      

  12.   


    FLASH 改成类QQ还是很容易的,视频,音频,采集都是集成函数的,简单调用一下就可以了
      

  13.   

    一、假设你的OA和IM都有源码的情况下,那么就很简单了,可以通过1楼的方法实现。二、假设你有OA的源码,而没有IM的源码那么可以采用一下方法:
        1.在OA验证结束后,启动IM进程,将IM登录界面隐藏。
        2.FindWindow() 查找出IM登录窗口句柄。
        3.FindWindowEx() 查找出相关的用户名和密码还有登录按钮的相关句柄。
        4.将OA的用户名和密码信息填写到相应的句柄,然后对登录按钮发送 BN_CLICK消息实现登录。(先测试能不能用SetWindowText()设置,如果IM有保护的话,那么需要用考虑用WriteProcessMemory()或远程子类化或钩子的方式实现)。
        5.IM登录成功, 假设IM程序有最小到托盘的功能,查找IM主窗口,发送最小化消息。 如果IM不支持托盘程序,那么你就需要远程子类化,自己实现一个托盘功能的DLL。三、假设你连OA的源码都没有
        1. 自己写一个启动OA的程序,启动OA进程
        2. 远程子类化OA进程的启动界面,拦截登录按钮的BN_CLICK的处理结果,判断登录是否成功,成功进行<二>
      

  14.   

    哦,忘了你的OA是B/S的模式。 那么第三种可能就不能存在,就是存在也不好实现。  还有第二种你只能在本地创建一个COM组件或EXE来实现了。
      

  15.   

    bdzwj,你说的太详细啦,我属于第一种情况,呵呵,不过你的第二种情况的建议也让我学到了很多东西,让我知道了在没有源码的情况下竟然可以这样启动起来。我要好好研究一下。非常感谢!
      

  16.   

    aaaaaaaaa
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  17.   


    同意上面的合成一个数据库又不是一张表,对吧,这个不是问题,问题是你的OA系统的用户密码和IM的用户密码是不是相同的,相同就可以用上面的方法,不相同可以把两张表关联一下,后面的操作也和上面一样