我们公司是实行弹性工作制的,一天工作满8小时即可。
我的记性不是太好,总忘记什么来上班的。所以琢磨着怎么自己搞一个这样的小工具。
这不,刚好这几天工作不是太忙,做了一个小工具。
当你登陆系统时,它会判断你今天是否是第一次登陆,如果是的话,则向Microsoft OutLook
发送一个8小时后的“约会”。这样到你下班的时候,OutLook 就会提醒你该下班了。
这个工具分成三部分。
第一:Windows登陆事件监视器,它是一个dll文件。是用C 开发的。部分源代码如下

  __declspec(dllexport)   void   __stdcall   testlogon(DWORD   unknow)
  {
        //到临时目录下查找文件login.log,
        //1.如果找到,查看该文件的修改时间
        //2.没有则创建一个空文件,并且执行一个创建OutLook Appointment 的程序
        char tempPath[80];
        char fileName[] = "login.log";
        int i = 0;
        DWORD len;
        FILE * FileHandle;
        struct tm *newtime;
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        ZeroMemory( &si, sizeof(si) );
        si.cb = sizeof(si);
        ZeroMemory( &pi, sizeof(pi) );
        ZeroMemory(tempPath,sizeof(tempPath));
        len = GetTempPath(sizeof(tempPath),tempPath);
        for(i = 0 ;i< sizeof(fileName);i++)
        {
            tempPath[i+len] = fileName[i];
        }

if(FileExists(tempPath) == 1)
        {
            //
            printf("login1");
            newtime = GetFileMofiedTime(tempPath);
            if( IsToday(*newtime) == 0)
            {
                //free(newtime);
                remove(tempPath);
            }
            else
            {
             //free(newtime);
            return 1;
         }
        }
        printf("login2");
//        Sleep(1000);
//        if(FileExists(tempPath) == 1)
//        {
//            FileHandle = fopen(tempPath,"r+");
//        }
//        else
        {
          FileHandle = fopen(tempPath,"w+");
        }
        if(FileHandle != NULL)
        {
            fwrite(".",1,1,FileHandle);
            fclose(FileHandle);
        }
        //MessageBox(NULL,"login3",tempPath,MB_OK);
        if(!CreateProcess(NULL,"NewAppoint.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
        {
          printf("login4");//,tempPath,MB_OK);
         return 1;
        }
        else
        {
            printf("login5");//"login5",tempPath,MB_OK);
             // Wait until child process exits.
             WaitForSingleObject( pi.hProcess, INFINITE );
             // Close process and thread handles.
             CloseHandle( pi.hProcess );
             CloseHandle( pi.hThread );
      }
        return 1;
  }

第二:注册这个监视器dll,是用下面的注册表文件注册的

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\GoHome]
"DLLName"="LogIn.dll"
"Logon"="testlogon"
"Impersonate"=dword:00000001
"Asynchronous"=dword:00000001
"Unlock"="testlogon"

第三:向OutLook发送约会的程序,源文件是用C#开发的。如下:

Microsoft.Office.Interop.Outlook.ApplicationClass outLookApp = new Microsoft.Office.Interop.Outlook.ApplicationClass();
            AppointmentItemClass appointItem = (AppointmentItemClass)outLookApp.CreateItem(OlItemType.olAppointmentItem);
            //appointItem
            appointItem.Location = "RPC";            
            appointItem.Subject = "It's time to go home";
            appointItem.Importance = OlImportance.olImportanceNormal;
            appointItem.Body = "Shark Xu.";
            appointItem.BusyStatus = OlBusyStatus.olOutOfOffice;
            appointItem.Duration = 1;
            appointItem.Start = System.DateTime.Now.AddHours(8.0);
            appointItem.ReminderMinutesBeforeStart = 1;
            appointItem.Sensitivity = OlSensitivity.olNormal;
            
            appointItem.Save();

我还做了一个安装文件,它是一个批处理文件

copy Login.dll %SystemRoot%\System32\
copy newAppoint.exe %SystemRoot%\System32\
regedit /s GoHome.reg

完全下载(包括所有的源文件和编译后的程序)

转载于:https://www.cnblogs.com/SharkXu/archive/2007/04/09/LogIn.html

我与OutLook有个约会相关推荐

  1. Dynamics 365 App for Outlook 与 Dynamics 365 for Outlook(已被弃用)

    在最新的版本中Dynamics 365 for Outlook(Outlook 客户端)已被弃用 随 Dynamics CRM 2016(版本 8.0)引入的 Dynamics 365 App for ...

  2. 浅谈Web App前端设计原则

    关于Web App 随着web 2.0时代的到来,越来越多的应用程序都是基于Web环境来构建的.这样做的好处显而易见,用户可以方便地使用浏览器来访问应用,而不需要安装客户端程序.而在企业内部,很多应用 ...

  3. Moleskine笔记本使用之感受【个人管理篇】

    这是一篇来自于dbjl的投稿,笔纸一直都是做时间管理和个人管理的最佳工具(没有之一),GTDLife.cn近阶段也在尝试使用笔纸做时间管理,相信不久就会有详尽的使用经验放出,敬请期待. 喜欢上MOLE ...

  4. Scott Hanselman的2006 Windows最终开发者和高级用户工具列表

    enjoyed this post, or this blog, please 喜欢这篇文章或博客,请make a secure tax-deductable donation to the Amer ...

  5. ActiveSync编程总结(一)

    (参考MSDN Programmer's guide of ActiveSync) WindowsPE设备和桌面端作同步,在每一端都有ActiveSync manager(管理器)和ActiveSyn ...

  6. vc模拟 tabletpc_Scott的TabletPC最佳工具列表

    vc模拟 tabletpc John Lam just got his Toshiba M200, much like my M205, this series of Convertible Tabl ...

  7. 如何从 PC 切换到 Mac,以及你需要了解的内容

    如果您是 Windows 的长期用户,转而使用 macOS 似乎需要付出很多努力,但这比乍一看要容易得多.以下是从 PC 切换到 Mac 需要了解的内容,一起来看看吧. 大多数过渡到Mac 的PC 用 ...

  8. java outlook日历_从 Excel 在特定的日历中创建 Outlook 约会

    Dmitry 指出了如何在 Excel 的共享日历中创建 appointment/meeting 的功能.他的帖子对我有很大帮助,因为在共享日历上如何创建约会似乎没有很好的答案.我遍历众多论坛以获取答 ...

  9. 获取outlook 约会_如何仅获取重要电子邮件的Outlook通知

    获取outlook 约会 Microsoft thought they were being helpful when they set up notifications for new email. ...

最新文章

  1. 解读万方学术检索——SimCSE、Sentence-BERT…
  2. python英语字典程序-python如何制作英文字典
  3. C语言-数组名真的不是指针
  4. Unix环境高级编程学习笔记(一)
  5. 《基于Node.js实现简易聊天室系列之项目前期工作》
  6. Java面试没过_Java面试中遇到的坑【填坑篇】
  7. 前端学习(2997):vue+element今日头条管理--编码规范说明
  8. Keil软件仿真时如何用逻辑分析仪观察变量值
  9. 杭电2524 矩形A + B
  10. 数据结构--课程设计(归档)
  11. 如何在Windows平台下可以方便获取到android的源码?
  12. 最长递增子序列和双序列
  13. 如何将 MacBook 的外置屏幕设置为主屏幕
  14. 资深黑客谈:安全趋势正在向应用层发展
  15. 使用JPA @OneToMany关联时,@ JoinColumn和mappedBy有什么区别
  16. Excel数据分析入门-数据透视表
  17. Linux文件管理小测试
  18. Go包管理工具Vendor使用教程
  19. 视频号网站微信视频下载方法
  20. 缘何韩国能在流行文化的竞争中如此轻松地战胜日本?

热门文章

  1. C#中MemoryStream类的介绍
  2. xilinx IP 汇总
  3. 阿里云centos上处理2t3ik与ddgs病毒
  4. 【转】最浅显的LDAP介绍
  5. 在一台电脑上如何安装两个JDK,并实现自由切换
  6. Supervisor的使用方法
  7. “重感知·轻地图”重新定义自动驾驶
  8. 2018年第50周-maven脚手架: jc-spring-boot-rest-archetype
  9. 爬取安居客租房详情+翻页
  10. ES6中setTimeout函数的this