<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Simulating print Screen functions</title>
		<link>http://www.allegro.cc/forums/view/590017</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 15 Feb 2007 07:37:30 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Heya,</p><p>I want to write a program that startup takes a screenshot of what ever is on the screen to use as a background within the program.</p><p>I&#39;ve already found the fantastic code to get a bitmap from the clipboard, so I thought that using &#39;simulate_key(KEY_PRTSCR);&#39; would copy it to the clipboard, but Windows doesn&#39;t accept the key press (it ignores it) I guess that simulate_key simply sets that keys flag to true, but what I&#39;d like to find out is; is there another way to capture the screen image?</p><p>I&#39;ve included the code below.</p><p>Cheers</p><p>Phoenix</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;winalleg.h&gt;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> getBitmapFromClipboard<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>result <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    </td></tr><tr><td class="number">7</td><td>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>IsClipboardFormatAvailable<span class="k2">(</span>CF_BITMAP<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">8</td><td>        <span class="k1">return</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">10</td><td>    </td></tr><tr><td class="number">11</td><td>    <span class="k1">if</span> <span class="k2">(</span>OpenClipboard<span class="k2">(</span><a href="http://www.allegro.cc/manual/win_get_window" target="_blank"><span class="a">win_get_window</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>        HBITMAP hbmp<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>        </td></tr><tr><td class="number">14</td><td>        hbmp <span class="k3">=</span> GetClipboardData<span class="k2">(</span>CF_BITMAP<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>        <span class="k1">if</span> <span class="k2">(</span>hbmp <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">16</td><td>            result <span class="k3">=</span> <a href="http://www.allegro.cc/manual/convert_hbitmap_to_bitmap" target="_blank"><span class="a">convert_hbitmap_to_bitmap</span></a><span class="k2">(</span>hbmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>        <span class="k2">}</span> </td></tr><tr><td class="number">18</td><td>        CloseClipboard<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    <span class="k2">}</span> </td></tr><tr><td class="number">20</td><td>    <span class="k1">return</span> result<span class="k2">;</span></td></tr><tr><td class="number">21</td><td><span class="k2">}</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>&#160;</td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>    </td></tr><tr><td class="number">28</td><td>    <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>    <a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>    <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>    <a href="http://www.allegro.cc/manual/simulate_keypress" target="_blank"><span class="a">simulate_keypress</span></a><span class="k2">(</span>KEY_PRTSCR<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>    <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">1000</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1024</span>,<span class="n">768</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>    </td></tr><tr><td class="number">37</td><td>    bmp <span class="k3">=</span> getBitmapFromClipboard<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>    </td></tr><tr><td class="number">39</td><td>    <span class="k1">if</span> <span class="k2">(</span>bmp<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">40</td><td>            <span class="c">// Draw a rectangle on it just to test!!</span></td></tr><tr><td class="number">41</td><td>            <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>bmp,<span class="n">100</span>,<span class="n">100</span>,<span class="n">200</span>,<span class="n">200</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>            <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, bmp-&gt;w, bmp-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">44</td><td>    <a href="http://www.allegro.cc/manual/clear_keybuf" target="_blank"><span class="a">clear_keybuf</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>    <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td>    <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td><span class="k2">}</span></td></tr><tr><td class="number">51</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Phoenix_256)</author>
		<pubDate>Sun, 11 Feb 2007 22:10:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allegro does not provide a way to grab an image of the desktop. Each operating system has a different means of accessing the desktop image. For Windows, you might want to look at the sourcecode for <a href="http://allegro.cc/depot/ChromaPlas/">ChromaPlas</a> to see how it&#39;s done on Windows.</p><p>AE.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Wed, 14 Feb 2007 04:45:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Basically, you would use <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_4esj.asp">GetDC(NULL)</a> to get a HDC for the entire screen.</p><p>Then, you can use Windows specific Allegro functions, described <a href="http://www.allegro.cc/manual/platform-specifics/windows-specifics/">here</a> in the manual. Specifically, you want blit_from_hdc.</p><p>If you want to use that, be sure to include winalleg.h.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jakub Wasilewski)</author>
		<pubDate>Wed, 14 Feb 2007 05:45:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Grabbing a picture of the desktop is no longer possible for screen savers as of XP.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Wed, 14 Feb 2007 13:18:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>But you can grab a screenshot in a screen saver, right?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Wed, 14 Feb 2007 22:09:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Dustin Dettmer said:</div><div class="quote"><p>

Grabbing a picture of the desktop is no longer possible for screen savers as of XP.
</p></div></div><p>
Is that only as of XP SP2? I could have sworn I&#39;ve gotten <a href="http://allegro.cc/depot/ChromaPlas/">ChromaPlas</a> in desptop-image mode to work on an XP-based machine.</p><p>Even if it were true, it would be a pity, as it would prevent the many screensavers that maipulate the desktop image from working.</p><p>AE.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Thu, 15 Feb 2007 07:37:30 +0000</pubDate>
	</item>
</rss>
