Редактор буфера обмена
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
Вµ можно редактировать, покажем результаты некоторого редактирования. Они представлены ниже в виде копий экрана.
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();}