191 lines
5.4 KiB
C++
191 lines
5.4 KiB
C++
|
|
// C RunTime Header Files
|
|
#include <windows.h>
|
|
#include <commctrl.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <malloc.h>
|
|
#include <memory.h>
|
|
#include <tchar.h>
|
|
#include <winbase.h>
|
|
#include <shellapi.h>
|
|
#include <Wtsapi32.h>
|
|
#include <winuser.h>
|
|
#include <winsta.h>
|
|
|
|
|
|
// Local Header Files
|
|
#include "resource.h"
|
|
|
|
|
|
#define MAX_STATIONS 1024
|
|
|
|
// Foward declarations
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
ATOM MyRegisterClass(HINSTANCE hInstance);
|
|
BOOL InitInstance(HINSTANCE, int);
|
|
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
|
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
|
|
LRESULT CALLBACK SndMsg(HWND, UINT, WPARAM, LPARAM);
|
|
int CALLBACK Sort(LPARAM lParam1, LPARAM lParam2, LPARAM lParamColumn);
|
|
int CDECL MessageBoxPrintf(TCHAR *szCaption, TCHAR *szFormat, ...);
|
|
|
|
int FillList(int nMcIndex);
|
|
BOOL MyInitDialog(HWND hwnd);
|
|
void SetRegKey(int i, LONG * nKeyValue);
|
|
void DeleteRegKey(int i);
|
|
BOOL CheckForRegKey(int i);
|
|
int GetRegKeyValue(int i);
|
|
void ShowMyIcon();
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
#define MAX_LEN (MAX_PATH + 1)
|
|
|
|
#define MAX_LOADSTRING 200
|
|
#define COLUMNONEWIDTH 175
|
|
#define COLUMNTWOWIDTH 100
|
|
#define COLUMNTHREEWIDTH 124
|
|
#define COLUMNFOURWIDTH 100
|
|
|
|
//{"left", "top", "right", "bottom"};
|
|
#define LEFT 0
|
|
#define TOP 1
|
|
#define RIGHT 2
|
|
#define BOTTOM 3
|
|
|
|
#define GREEN 0
|
|
#define YELLOW 1
|
|
#define RED 2
|
|
//#define NONE 3
|
|
|
|
// Global Variables:
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
extern HINSTANCE hInst; // current instance
|
|
extern TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
|
|
extern TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
|
|
|
|
extern TCHAR szAppName[];
|
|
extern HWND hWnd;
|
|
extern HWND g_hListView;
|
|
extern int g_ColumnOneIndex;
|
|
extern int g_ColumnTwoIndex;
|
|
extern int g_ColumnThreeIndex;
|
|
extern int g_ColumnFourIndex;
|
|
|
|
extern TCHAR * pszColumn;
|
|
extern TCHAR * pszColumn2;
|
|
extern TCHAR * pszColumn3;
|
|
extern TCHAR * pszColumn4;
|
|
|
|
extern TCHAR szMcNames [MAX_STATIONS][MAX_LEN];
|
|
extern TCHAR szMcAddress[MAX_STATIONS][MAX_LEN];
|
|
extern TCHAR szMcID [MAX_STATIONS][MAX_LEN];
|
|
extern TCHAR szBuild [MAX_STATIONS][MAX_LEN];
|
|
|
|
extern TCHAR tmp[sizeof(TCHAR) * 50];
|
|
extern TCHAR buf[sizeof(TCHAR) * 50];
|
|
|
|
extern TCHAR *DayOfWeek[];
|
|
extern TCHAR *KeyName[];
|
|
extern const TCHAR szWinStaKey[];
|
|
|
|
extern SYSTEMTIME lpSystemTime;
|
|
|
|
|
|
extern HANDLE m_hThread;
|
|
extern FILE *stream1;
|
|
extern HMENU g_hMenu;
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// tray stuff
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
#define ARRAYSIZE(x) ((sizeof(x) / sizeof(x[0])))
|
|
#define PM_QUITTRAYTHREAD WM_USER
|
|
#define PWM_TRAYICON WM_USER + 1
|
|
#define PM_NOTIFYWAITING WM_USER + 2
|
|
#define PWM_ACTIVATE WM_USER + 3
|
|
|
|
#define PM_WINSTA WM_USER + 4
|
|
#define PM_REMOVEWINSTA WM_USER + 5
|
|
|
|
#define IDM_SYS_SHOW_ALL WM_USER + 6
|
|
#define IDM_SYS_ABOUT WM_USER + 7
|
|
|
|
#define FIND_TIMEOUT 5000 // Wait to to 5 seconds for a response
|
|
|
|
//
|
|
// Class to encapsulate all of the info needed to do a tray notification
|
|
class CTrayNotification
|
|
{
|
|
public:
|
|
|
|
CTrayNotification()
|
|
{
|
|
//ASSERT(0 && "Someone is using the default constuctor for CTrayNotification");
|
|
ZeroMemory(this, sizeof(*this));
|
|
}
|
|
|
|
CTrayNotification(HWND hWnd,
|
|
UINT uCallbackMessage,
|
|
DWORD Message,
|
|
HICON hIcon,
|
|
LPTSTR pszTip)
|
|
{
|
|
m_hWnd = hWnd;
|
|
m_uCallbackMessage = uCallbackMessage;
|
|
m_Message = Message;
|
|
m_hIcon = hIcon;
|
|
|
|
if (pszTip)
|
|
lstrcpyn(m_szTip, pszTip, ARRAYSIZE(m_szTip));
|
|
else
|
|
m_szTip[0] = TEXT('\0');
|
|
}
|
|
|
|
HWND m_hWnd;
|
|
UINT m_uCallbackMessage;
|
|
DWORD m_Message;
|
|
HICON m_hIcon;
|
|
TCHAR m_szTip[MAX_PATH];
|
|
};
|
|
|
|
extern CRITICAL_SECTION g_CSTrayThread;
|
|
|
|
extern DWORD g_idTrayThread;
|
|
extern HANDLE g_hTrayThread;
|
|
|
|
extern HICON g_TrayIcons[];
|
|
extern UINT g_cTrayIcons;
|
|
extern const UINT idTrayIcons[];
|
|
extern NOTIFYICONDATA NotifyIconData;
|
|
|
|
extern DWORD g_idWinstaThread;
|
|
extern HANDLE g_hWinstaThread;
|
|
|
|
BOOL DeliverTrayNotification(CTrayNotification * pNot);
|
|
DWORD TrayThreadMessageLoop(LPVOID);
|
|
|
|
DWORD WinstaThreadMessageLoop(LPVOID);
|
|
void GetWinStationInfo(void);
|
|
|
|
|
|
void Tray_NotifyIcon(HWND hWnd,
|
|
UINT uCallbackMessage,
|
|
DWORD Message,
|
|
HICON hIcon,
|
|
LPCTSTR lpTip);
|
|
|
|
void Tray_Notify(HWND hWnd, WPARAM wParam, LPARAM lParam);
|
|
void ShowRunningInstance();
|
|
HMENU LoadPopupMenu(HINSTANCE hinst, UINT id);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// TS Session stuff
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern WTS_SESSION_INFO *ppSessionInfo;
|
|
extern TCHAR *ppBuffer;
|
|
extern DWORD pBytesReturned;
|
|
extern DWORD pCount;
|