screenshot c-bol

Fórumok

Hi,

Szuksegem volna egy kepernyokep rutinra c-ben. Ha volna valakinek valami link peldara vagy esetleg egy egyszeru program (mondjuk nem Gimp, Imagemagick es tarsai, inkabb valami nagyon egszeru) orulnek neki. Tulajdonkeppen egy wine alatt futo closed source programrol kellene megallapitanom, hogy az eredmeny OK vagy NG, de ezt csak a kepernyon jeleniti meg.

Koszi,

/sza2

Hozzászólások

Tehat Win32-es kod kellene? Lehet, hogy egyszerubb lenne win API hivasokkal kiolvasni az ablak szoveget (FindWindow(), GetWindow(), GetWindowText()), mint screenshotot kesziteni es a keprol felismerni azt!

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"

Kb 8-10 eve egy "Macro Maker 2000" programot hasznaltam. Azzal meg lehet csinalni, hogy pl. figyeljen egy bizonyos title-ű ablak megjeleneset. Amikor az ablak megjelenik, keszithet egy screenshotot, es elmentheti, stb.. egy csomo mindent meg lehet tenni ezekkel.

C-ben meg ilyesmikkel csinalnam:

GdkWindow *rootwin;

GdkImage *image;

GdkColormap *cmap;

gint x, y;

guint32 pixel;

GdkColor color;

gdouble r, g, b;

rootwin = gdk_screen_get_root_window(gdk_screen_get_default());

cmap = gdk_screen_get_system_colormap(gdk_screen_get_default());

x = x_coordinate_of_pixel_you_want;

y = y_coordinate_of_pixel_you_want;

image = gdk_drawable_get_image(rootwin, x, y, 1, 1);

pixel = gdk_image_get_pixel(image, 0, 0);

g_object_unref(image);

gdk_colormap_query_color(cmap, pixel, &color);

/* color.[red green blue] are now the proper hex numbers, but if we want to use it with cairo, we need to divide by 0xFFFF (65535.0) */

r = color.red / 65535.0;

g = color.green / 65535.0;

b = color.blue / 65535.0;

Lehetőségek:
- külső program hívásával, pl. imagemagick, vagy xwd (utóbbi az X része)
- vmi GUI toolkit-tel, pl. Qt - rövid kereséssel példa
- közvetlen Xlib hívásokkal - ez lenne a legkézenfekvőbb, de állítólag bonyolult az Xlib és olyan kevesen használják közvetlenül, hogy nem találtam rá a neten példaprogramot. Hátránya még, hogy csak X-et használó platformokon fog működni.

A kulso program nem igazan szimpatikus, az xwd-t megnezem.
A Qt-t csak ezert nem szeretnem felrakni.
Az Xlib-ben tetszene legjobban, raadasul X van, a protabilitas abszolut nem lenyeg, csak belso hasznalatra lesz.

Tudom, hogy az egesz a tarko mogul labonloves tipikus esete, de nem tudok mast tenni. Adott egy berendezes, aminek el kell inditania egy folyamatot (a Win-es alkalmazasban megnyomni egy gombot (ezt mar megoldottam), majd ha vege, ki kell deriteni, hogy mi az eredmeny, es ennek megfeleloen indikalni (jelen esetben pecsetelni).

debian alatt:

$ apt-get source x11-apps

Ezen belul az xwd csinalja ezt.

Az XGetImage a konkret API hivas.

Szerk: eleg lassu nalam, bar lehet, hogy csak a regi hardware miatt.

amit csinalni akarsz, az koncepionalisan rossz :)

--
NetBSD - Simplicity is prerequisite for reliability

Ugy emlekszem, hogy a print screen egyszeruen ugy zajlik Win32 API-ban, hogy megnyitod a foablak handleret mint kepet, es egyszeruen kiolvasod. Tehat ugy teszel, mintha rajzolni szeretnel az ablakra (elkapod a HDC - Device Context), majd egy bitcopy muvelettel lemasolod.

Itt van peldakod (screenshot winapi szerencseserzet): http://groups.google.com/group/win32-programming/browse_thread/thread/5…

Nyilvan erre sok megoldas letezik. Ha X11 alol akarod ugyanezt, akkor az xgrab lesz neked a megfelelo cuccos, mint legegyszerubb talan.