⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monsetfn.c

📁 打印机驱动程序
💻 C
字号:
//-----------------------------------------------------------------
// Module Name: MonSetfn.C
// Abstract:    Implementation of Print Monitor Setup Functions


#define  STRICT
#include <windows.h>        
#include <winspool.h>
#include "MonSetfn.h"

int  FindMonitor(LPTSTR szPort)
{                                  
    DWORD    dwBytes, dwStrus, dw;     
    MONITOR_INFO_1 *pMon;
    
    EnumMonitors(NULL, 1, NULL, 0, &dwBytes, NULL);
    if (!dwBytes) {                            // no data available
        SetLastError(ERROR_ACCESS_DENIED);
        return FM_ERROR;
    }

    pMon = (MONITOR_INFO_1*)malloc((size_t)dwBytes);
    if (!pMon) {                            // no memory available
        SetLastError(ERROR_NOT_ENOUGH_SERVER_MEMORY);
        return FM_ERROR;
    }

    if (!EnumMonitors(NULL, 1, (LPBYTE)pMon, 
                    dwBytes, &dwBytes, &dwStrus)) return FM_ERROR;

    for (dw=0; dw<dwStrus; dw++) // search port names
        if (!lstrcmpi(szPort, pMon[dw].pName)) break;
    
    free( pMon );

    if (dw<dwStrus)   return FM_FOUND;    
    return FM_NOTFOUND;                         
}

BOOL InstallMonitor(LPTSTR szPort, LPTSTR szOS, LPTSTR szPath)
{                                                               
    HANDLE            hFind;
    WIN32_FIND_DATA findData;
    LPTSTR pExt = szPath +lstrlen(szPath)-3;
    TCHAR szSys[MAX_PATH];
    MONITOR_INFO_2 mon ={szPort, szOS};

    if ((hFind=FindFirstFile(szPath, &findData)) // check Dll file
                        ==INVALID_HANDLE_VALUE) return FALSE;
    if (!FindClose(hFind)) return FALSE;

    if (lstrcmpi(pExt, "DLL")) {                // check ext
        SetLastError(ERROR_DLL_NOT_FOUND);
        return FALSE;
    }

    if (!GetSystemDirectory(szSys, MAX_PATH)) return FALSE;
    if (!lstrcat(szSys, "\\")) return FALSE; 
    if (!lstrcat(szSys, findData.cFileName)) return FALSE; 

    if (lstrcmpi(szSys, szPath)) // if input dll in sys dir, no copy
        if (!CopyFile(szPath, szSys, FALSE)) //overwrite the existed
            return FALSE; 

    mon.pDLLName = findData.cFileName;
    if (!AddMonitor(NULL, 2, (LPBYTE)&mon)) return FALSE;

    return TRUE;                                    
}

BOOL RemoveMonitor(LPTSTR szPort, LPTSTR szOS)
{                                                            
    return DeleteMonitor(NULL, szOS, szPort);
}
    
// End of File

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -