//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Grids.hpp>
#include <Menus.hpp>
#include <AppEvnts.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
#define MAXDESKTOPS     10      // максимальное количестов рабочих столов, с которыми мы будем работать
#define MAXOBJNAMEL     22      // максимальная длина имени объекта
// флаги использования опций для функции переключения
#define RUN_NEW         2       // использовать опцию запуска нового экземпляра приложения при переключении
#define RUN_CMD         4       // использовать опцию запуска командной строки при переключении
#define RUN_APP         8       // использовать опцию запуска выбранной программы при переключении
#define USE_ALL         14      // использовать все перечисленные выше опции

BOOL CALLBACK EnumDesktopProc(LPTSTR, LPARAM);  // callback-функция для энумерации рабочих столов
BOOL ReEnumAllDesktops(void);                   // функция для энумерации всех столов текущей windowstation
AnsiString GetUserObjectName(HANDLE);           // функция получения имени объекта из его описания
BOOL StartMyProc(AnsiString, WORD, AnsiString); // функция для запуска нового процесса
void SwitchToSelDesktop(int, DWORD);            // функция переключения на выбранный рабочий стол

HWINSTA         hWinStaStart;   // указатель на стартовую windowstation, ассоциированную с процессом нашей проги
DWORD           iThreadStart;   // идентификатор процесса нашей проги
HDESK           hDesktopStart;  // начальный рабочий стол (с которого стартовала наша прога)
AnsiString      sWinStaStart;   // имя стартовой windowstation
AnsiString      sDesktopStart;  // имя стартового рабочего стола

struct DESKTOPS
{      int              Counter;                // счётчик известных нам рабочих столов
       AnsiString       Names[MAXDESKTOPS];     // имена рабочих столов
       HDESK            hDesktops[MAXDESKTOPS]; // указатели на рабочие столы
};

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
        TButton *Button1;
        TEdit *Edit1;
        TLabel *Label1;
        TRichEdit *RichEdit1;
        TLabel *Label2;
        TStringGrid *StringGrid1;
        TLabel *Label3;
        TButton *Button2;
        TEdit *Edit2;
        TPopupMenu *PopupMenu1;
        TMenuItem *Selectdesktop1;
        TGroupBox *GroupBox1;
        TCheckBox *CheckBox1;
        TCheckBox *CheckBox2;
        TCheckBox *CheckBox3;
        TCheckBox *CheckBox4;
        TLabel *Label4;
        TLabel *Label5;
        TApplicationEvents *ApplicationEvents1;
        TCheckBox *CheckBox5;
        TEdit *Edit3;
        TOpenDialog *OpenDialog1;
        TButton *Button3;
        TLabel *Label6;
        TMainMenu *MainMenu1;
        TMenuItem *About1;
        TMenuItem *About2;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Selectdesktop1Click(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall FormDestroy(TObject *Sender);
        void __fastcall ApplicationEvents1Message(tagMSG &Msg, bool &Handled);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall About2Click(TObject *Sender);
private:	// User declarations
public:         // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
