PDA

View Full Version : مبتدی: مشکل با گرفتن Clipboard



Collector
چهارشنبه 23 اسفند 1391, 15:49 عصر
سلام
این برنامه هر وقت داده ای وارد کلیپ بورد میشه آن را چاپ میکنه
مشکل این جاست که اگر ما در یک پنجره یک بار داده را وارد Clipboard کنیم برای دومین با دیگه عمل نمیکنه و حتما باید بریم توی پنجره دیگه این عمل را انجام دهیم تا بتوان دوباره در پنجره اول این کار را انجام داد.

کلیپ بورد در صورتی چاپ میشود که داده قبلی با فعلی برابر نباشد
چون میخوام توی فایل بنویسم و برنامه باید سریع چک کنه که توی کلیپ برد چیزی هست اگر بود که توی فایل بنویسه

char *Clipb = "";

void main()
{
while(1)
{
Sleep(1);
Get_Clipboard();
}
}

void Get_Clipboard()
{
OpenClipboard(NULL);
HANDLE foo = GetClipboardData(CF_TEXT);
CloseClipboard();
LPVOID lptstr = GlobalLock(foo);

if(Clipb != (char *)lptstr)
{
Clipb = (char *)lptstr;
cout<<"Clip:"<<Clipb<<endl;
}
}

AliAskari1375
پنج شنبه 24 اسفند 1391, 19:59 عصر
اگه کمپایلر C++ استفاده می کنی شاید این درست کار کنه :


#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;

int main()
{
string prevText, currentText;
HANDLE foo = 0;
char* lpstr = 0;


OpenClipboard(NULL);
foo = GetClipboardData(CF_TEXT);
lpstr = (char*)GlobalLock(foo);
prevText = lpstr;
CloseClipboard();


cout<<prevText<<endl;

while(true)
{
Sleep(10);

OpenClipboard(NULL);
foo = GetClipboardData(CF_TEXT);
lpstr = (char*)GlobalLock(foo);
currentText = lpstr;
CloseClipboard();




if(prevText != currentText)
{
prevText = currentText;
cout<<currentText<<endl;
}


}



return 0;
}

Collector
پنج شنبه 24 اسفند 1391, 21:57 عصر
اگه کمپایلر C++‎‎ استفاده می کنی شاید این درست کار کنه :


نه متاسفاده کار نکرد
من از ویژوال سی ++ استفاده میکنم و توی خروجی و دستور شرطی از Type Case برای تبدیل به * char استفاده کردم