Редактор буфера обмена

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



Вµ можно редактировать, покажем результаты некоторого редактирования. Они представлены ниже в виде копий экрана.

3.2 Копии экрана

Сначала скопируем текст. В окне программы появится:

Нажмём на кнопку редактировать и отредактируем текст:

Теперь в буфере обмена хранится уже изменённый текст.

Скопируем ярлык. Программа покажет:

Данный формат невозможно редактировать средствами данного проекта.

Сделаем копию экрана:

В окне вывода видна копия экрана. Нажав на кнопку редактировать, откроется графический редактор mspaint. Изменив рисунок, сохраним его:

Заключение

Мною разработан программный продукт, который позволяет просматривать и редактировать данные буфера обмена. В программе используется несколько WIN API функций, реализована многопоточность. В пояснительной записке к курсовому проекту подробно расписаны все этапы разработки программы и приведены результаты работы программы в виде копий экрана.

Список литературы

1.Н.В. Майстренко, А.В. Майстренко. Программное обеспечение САПР. Операционные системы: учебное пособие - Тамбов: Изд-во Тамб. гос. техн. ун-та, 2007. - 76 с.

.Таненбаум Э. Современные операционные системы. 2-е изд.-СПб.: Питер, 2002.-1040 с.

3.Джеффери Рихтер. Windows для профессионалов: создание эффективных win32 приложений. - 4-е изд. СПб.:Питер 2001.-752 с.

.Библиотека MSDN [Электронный ресурс]/ Компания microsoft. Режим доступа:

Приложение

Текст модуля ClipboardEditor.cpp:

#include

#pragma hdrstop

// -(Unit1.cpp, Form1);

// -WinMain (HINSTANCE, HINSTANCE, LPSTR, int)

{

{>Initialize();>Title = Clipboard Editor;>CreateForm (__classid(TForm1), &Form1);>Run();

}(Exception &exception)

{>ShowException(&exception);

}(тАж)

{

{Exception();

}(Exception &exception)

{>ShowException(&exception);

}

}0;

}

Текст модуля Unit1.h:

#ifndef Unit1H

#define Unit1H

// -

#include

#include

#include

#include

#include

// -TForm1: public TForm

{

__published: // IDE-managed Components*Button2;*Button4;*Timer1;*Im;*Button6;*Memo1;__fastcall Button2Click (TObject *Sender);__fastcall Button4Click (TObject *Sender);__fastcall FormCreate (TObject *Sender);__fastcall FormDestroy (TObject *Sender);__fastcall Button6Click (TObject *Sender);__fastcall Timer1Timer (TObject *Sender);: // User declarations: // User declarations__fastcall Show(void);

__fastcall TForm1 (TComponent* Owner);

};

// -PACKAGE TForm1 *Form1;

// -

#endif

Текст модуля Unit1.cpp:

#include

#pragma hdrstop

#include Unit1.h

// -

#pragma package (smart_init)

#pragma resource *.dfm

OS_TEXT = CF_TEXT;OS_LINK = CF_HDROP;OS_BMP = CF_BITMAP;

*Form1;thread1, thread2; // 1-otobrajenie, 2-redactirovanieAnsiString FileName= os_temp.;AnsiString PaintFileName= C:\\Windows\\System32\\mspaint.exe;AnsiString NotepadFileName= C:\\Windows\\notepad.exe;

// -

__fastcall TForm1:TForm1 (TComponent* Owner)

: TForm(Owner){}

DWORD WINAPI read_text (void *p)

{(OpenClipboard(0))

{hData = GetClipboardData (CF_TEXT);* chBuffer= (char*) GlobalLock(hData);(hData);();->Memo1->Lines->Clear();->Memo1->Lines->SetText(chBuffer);->Memo1->Visible=true;->Button6->Enabled=true;

}1;

}

DWORD WINAPI read_link (void *p)

{AnsiString a=; int k;(OpenClipboard(0)) // открываем буфер обмена

{hData = GetClipboardData (CF_HDROP);hh;s[100];=hData;();->Memo1->Lines->Clear();=DragQueryFile (hh, 0xFFFFFFFF, s, 100);(int i=0; i < k; i++)

{[0]=0;(hh, i, s, 100);=AnsiString(s);->Memo1->Lines->Add(a);

}->Memo1->Visible=true;->Button6->Enabled=false;

}1;

}

DWORD WINAPI read_bmp (void *p)

{(OpenClipboard(0)) {h = GetClipboardData (CF_BITMAP);->Im->Picture->LoadFromClipboardFormat (CF_BITMAP, (unsigned) h, 0);();->Im->Visible=true;->Button6->Enabled=true;

}1;

}

DWORD WINAPI edit_text (void *p)

{hgBuffer;* chBuffer;r[100];lr=100; DWORD k=0;inbuf=;f=0;stinf={0};

_PROCESS_INFORMATION pr_inf;.cb=sizeof(STARTUPINFO);.dwXCountChars=50;.dwYCountChars=50;.dwFlags= STARTF_USECOUNTCHARS;s=FileName + txt;=CreateFile (s.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,, NULL);(f==INVALID_HANDLE_VALUE) {ShowMessage (Error file open); return 0;}(f, Form1->Memo1->Text.c_str(),->Memo1->Text. Length()+1,&k, 0);(f);=NotepadFileName+s;(! CreateProcess(0, s.c_str(), 0,0, false, 0,0,0,&stinf,&pr_inf))(ne zapuschenтАж);(pr_inf.hProcess, INFINITE);=CreateFile((FileName+ txt).c_str(), GENERIC_READ,

, NULL, OPEN_ALWAYS, NULL, NULL);[0]=0;=;(ReadFile(f, r, lr,&k, 0)) {(k==0) break;=inbuf+AnsiString(r);[0]=0;

}(f);(! OpenClipboard(0)) {ShowMessage(((); return 1;}();= GlobalAlloc (GMEM_DDESHARE, inbuf. Length()+1);= (char*) GlobalLock(hgBuffer); // блокируем память(chBuffer, inbuf.c_str());(hgBuffer); // разблокируем память(CF_TEXT, hgBuffer); // помещаем текст в буфер обмена();((FileName+ txt).c_str());1;

}

DWORD WINAPI edit_bmp (void *p)

{short MyClipboardFormat;MyHandle;MyPalette;f;stinf={0};

_PROCESS_INFORMATION pr_inf;

.cb=sizeof(STARTUPINFO);.dwXCountChars=50;.dwYCountChars=50;.dwFlags= STARTF_USECOUNTCHARS;

s=FileName + bmp;->Im->Picture->SaveToFile(s);=PaintFileName+s;(! CreateProcess(0, s.c_str(), 0,0, false, 0,0,0,&stinf,&pr_inf))(ne zapuschenтАж);(pr_inf.hProcess, INFINITE);->Im->Picture->LoadFromFile (FileName + bmp);(! OpenClipboard(0)) {return 1;}();=Form1->Im->Canvas->Handle;=Form1->Im->Picture->Bitmap->Palette;=OS_BMP;->Im->Picture->Bitmap->SaveToClipboardFormat (MyClipboardFormat,

(unsigned) MyHandle, MyPalette);(MyClipboardFormat, MyHandle);();((FileName+ bmp).c_str());1;

}

__fastcall TForm1: Button2Click (TObject *Sender)

{Application->Terminate();}

// -__fastcall TForm1: Button4Click (TObject *Sender)

{DWORD id=WaitForSingleObject (thread2,1);(id == WAIT_TIMEOUT) {ShowMessage (Snachala zavershite redactirovanie);;}(! OpenClipboard(0)) {ShowMessage(((); return;}();();->Memo1->Visible=false;->Im->Visible=false;->Button6->Enabled=false;

}

// -__fastcall TForm1: FormCreate (TObject *Sender)

{Show();}

__fastcall TForm1: FormDestroy (TObject *Sender)

{CloseHandle(thread1); CloseHandle(thread2);}

// -

__fastcall TForm1: Button6Click (TObject *Sender)

{id=WaitForSingleObject (thread2,1);(id!= WAIT_TIMEOUT) {(IsClipboardFormatAvailable(OS_TEXT))=CreateThread (NULL, 0, edit_text, NULL, 0,&id);(IsClipboardFormatAvailable(OS_BMP))=CreateThread (NULL, 0, edit_bmp, NULL, 0,&id);

}ShowMessage (snachalo Zaverhite Redactirovanie);

}

// -

__fastcall TForm1: Show(void)

{DWORD id=WaitForSingleObject (thread2,1);(id!= WAIT_TIMEOUT) {->Visible=false;>Visible=false;(IsClipboardFormatAvailable(OS_TEXT))=CreateThread (NULL, 0, read_text, NULL, 0,&id);(IsClipboardFormatAvailable(OS_LINK))=CreateThread (NULL, 0, read_link, NULL, 0,&id);(IsClipboardFormatAvailable(OS_BMP))=CreateThread (NULL, 0, read_bmp, NULL, 0,&id);

}

}__fastcall TForm1: Timer1Timer (TObject *Sender)

{Show();}