• 我与OutLook有个约会


    我们公司是实行弹性工作制的,一天工作满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

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

  • 相关阅读:
    python3.8安装flask出现错误“ModuleNotFoundError: No module named '_ctypes'”
    利用virtualenvwrapper创建虚拟环境出现错误“/usr/bin/python: No module named virtualenvwrapper”
    CentOS7 下升级Python版本
    Python 定义动态变量
    Linux常用命令
    项目经验之:项目用到LinQ (总结)
    ListBox操作一些总结
    项目经验之:如CSDN一样的分页,我能否做这样的分页吗??????
    记上一笔,listbox展示项中,隐藏其中一项
    项目经验之:SQL一些简单问题中可以使用的技巧
  • 原文地址:https://www.cnblogs.com/SharkXu/p/LogIn.html
Copyright © 2020-2023  润新知