<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Text reading and writing fromt/to clipboard</title>
		<link>http://www.allegro.cc/forums/view/614903</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 21 Dec 2014 22:29:06 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>Windows only</b></p><p>I&#39;ve tested it a few times, but would like for someone else to test it. Also any suggestions.</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// header</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>al_read_from_clipboard<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">bool</span> al_write_to_clipboard<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>str<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">// source</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5\allegro.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro_windows.h&gt;</span>
<span class="number">   4</span>
<span class="number">   5</span><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>al_read_from_clipboard<span class="k2">(</span><span class="k2">)</span>
<span class="number">   6</span><span class="k2">{</span>
<span class="number">   7</span>  HWND hWnd <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">   8</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>str <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">   9</span>  <span class="k1">uint16_t</span> <span class="k3">*</span>pchData <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  10</span>  HANDLE hClipboardData <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  11</span>  <span class="k1">size_t</span> size <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  12</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  13</span>
<span class="number">  14</span>  display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span>  <span class="k1">if</span> <span class="k2">(</span>display <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  17</span>  <span class="k2">{</span>
<span class="number">  18</span>    hWnd <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>
<span class="number">  20</span>    <span class="k1">if</span> <span class="k2">(</span>hWnd <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  21</span>    <span class="k2">{</span>
<span class="number">  22</span>      <span class="k1">if</span> <span class="k2">(</span>OpenClipboard<span class="k2">(</span>hWnd<span class="k2">)</span><span class="k2">)</span>
<span class="number">  23</span>      <span class="k2">{</span>
<span class="number">  24</span>        <span class="k1">if</span> <span class="k2">(</span>IsClipboardFormatAvailable<span class="k2">(</span>CF_UNICODETEXT<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span>
<span class="number">  25</span>          IsClipboardFormatAvailable<span class="k2">(</span>CF_TEXT<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span>
<span class="number">  26</span>          IsClipboardFormatAvailable<span class="k2">(</span>CF_OEMTEXT<span class="k2">)</span><span class="k2">)</span>
<span class="number">  27</span>        <span class="k2">{</span>
<span class="number">  28</span>          hClipboardData <span class="k3">=</span> GetClipboardData<span class="k2">(</span>CF_UNICODETEXT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>
<span class="number">  30</span>          <span class="k1">if</span> <span class="k2">(</span>hClipboardData <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  31</span>          <span class="k2">{</span>
<span class="number">  32</span>            pchData <span class="k3">=</span> <span class="k2">(</span><span class="k1">uint16_t</span><span class="k3">*</span><span class="k2">)</span>GlobalLock<span class="k2">(</span>hClipboardData<span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span>
<span class="number">  34</span>            <span class="k1">if</span> <span class="k2">(</span>pchData <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  35</span>            <span class="k2">{</span>
<span class="number">  36</span>              str <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new_from_utf16"><span class="a">al_ustr_new_from_utf16</span></a><span class="k2">(</span>pchData<span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>
<span class="number">  38</span>              GlobalUnlock<span class="k2">(</span>hClipboardData<span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>            <span class="k2">}</span>
<span class="number">  40</span>          <span class="k2">}</span>
<span class="number">  41</span>        <span class="k2">}</span>
<span class="number">  42</span>
<span class="number">  43</span>        CloseClipboard<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>      <span class="k2">}</span>
<span class="number">  45</span>    <span class="k2">}</span>
<span class="number">  46</span>  <span class="k2">}</span>
<span class="number">  47</span>
<span class="number">  48</span>  <span class="k1">return</span> str<span class="k2">;</span>
<span class="number">  49</span><span class="k2">}</span>
<span class="number">  50</span>
<span class="number">  51</span><span class="k1">bool</span> al_write_to_clipboard<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>str<span class="k2">)</span>
<span class="number">  52</span><span class="k2">{</span>
<span class="number">  53</span>  HWND hWnd <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  54</span>  <span class="k1">bool</span> rv <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  55</span>  <span class="k1">uint16_t</span> <span class="k3">*</span>pchData <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  56</span>  HGLOBAL hClipboardData <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  57</span>  <span class="k1">size_t</span> size <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  58</span>  <span class="k1">int</span> offset <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  59</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  60</span>  <span class="k1">size_t</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  61</span>
<span class="number">  62</span>  display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>
<span class="number">  64</span>  <span class="k1">if</span> <span class="k2">(</span>display <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  65</span>  <span class="k2">{</span>
<span class="number">  66</span>    hWnd <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>
<span class="number">  68</span>    <span class="k1">if</span> <span class="k2">(</span>hWnd <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  69</span>    <span class="k2">{</span>
<span class="number">  70</span>      <span class="k1">if</span> <span class="k2">(</span>OpenClipboard<span class="k2">(</span>hWnd<span class="k2">)</span><span class="k2">)</span>
<span class="number">  71</span>      <span class="k2">{</span>
<span class="number">  72</span>        EmptyClipboard<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>
<span class="number">  74</span>        <span class="k1">if</span> <span class="k2">(</span>str <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  75</span>        <span class="k2">{</span>
<span class="number">  76</span>          size <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_ustr_length"><span class="a">al_ustr_length</span></a><span class="k2">(</span>str<span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">*</span> <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">uint16_t</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>
<span class="number">  78</span>          <span class="k1">if</span> <span class="k2">(</span>size <span class="k3">&gt;</span> <span class="n">1</span><span class="k2">)</span>
<span class="number">  79</span>          <span class="k2">{</span>
<span class="number">  80</span>            hClipboardData <span class="k3">=</span> GlobalAlloc<span class="k2">(</span>GMEM_MOVEABLE, size<span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>
<span class="number">  82</span>            <span class="k1">if</span> <span class="k2">(</span>hClipboardData <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  83</span>            <span class="k2">{</span>
<span class="number">  84</span>              pchData <span class="k3">=</span> <span class="k2">(</span><span class="k1">uint16_t</span><span class="k3">*</span><span class="k2">)</span>GlobalLock<span class="k2">(</span>hClipboardData<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>              <span class="k1">if</span> <span class="k2">(</span>pchData <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  87</span>              <span class="k2">{</span>
<span class="number">  88</span>                <span class="k1">if</span> <span class="k2">(</span>size <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_encode_utf16"><span class="a">al_ustr_encode_utf16</span></a><span class="k2">(</span>str, pchData, size<span class="k2">)</span><span class="k2">)</span>
<span class="number">  89</span>                <span class="k2">{</span>
<span class="number">  90</span>                <span class="k2">}</span>
<span class="number">  91</span>
<span class="number">  92</span>                GlobalUnlock<span class="k2">(</span>hClipboardData<span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span>
<span class="number">  94</span>                <span class="k1">if</span> <span class="k2">(</span>SetClipboardData<span class="k2">(</span>CF_UNICODETEXT, hClipboardData<span class="k2">)</span><span class="k2">)</span>
<span class="number">  95</span>                <span class="k2">{</span>
<span class="number">  96</span>                  rv <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  97</span>                <span class="k2">}</span>
<span class="number">  98</span>              <span class="k2">}</span>
<span class="number">  99</span>            <span class="k2">}</span>
<span class="number"> 100</span>          <span class="k2">}</span>
<span class="number"> 101</span>        <span class="k2">}</span>
<span class="number"> 102</span>
<span class="number"> 103</span>        CloseClipboard<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>      <span class="k2">}</span>
<span class="number"> 105</span>    <span class="k2">}</span>
<span class="number"> 106</span>  <span class="k2">}</span>
<span class="number"> 107</span>
<span class="number"> 108</span>  <span class="k1">return</span> rv<span class="k2">;</span>
<span class="number"> 109</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Sun, 21 Dec 2014 12:46:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good beginning, but this needs to be made portable. Copy paste under Linux is a bit ... complex as well.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Sun, 21 Dec 2014 20:45:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Edgar Reynaldo was working on this a few years back.</p><p><a href="https://www.allegro.cc/forums/thread/606034">https://www.allegro.cc/forums/thread/606034</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Sun, 21 Dec 2014 20:48:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, but mine never supported utf16 on windows. And the linux version was a nightmare but it worked.</p><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/606034/908790#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
For Linux copy/paste your program needs to respond to SelectionRequest events, something an Allegro program could not do without hacking Allegro to expose the X11 events that it monitors. For these reasons, an external program is the best solution to manage copy/paste on Linux. Since xsel, xclip and others don&#39;t manage images, I wrote my own program that does, xcsi. Copying to the clipboard (through xcsi) also works better, because xcsi stays running as long as it is the selection owner, as opposed to closing your program and losing the selection data.</p><p>What we need is someone experienced with MacOSX and obj-C to write clipboard code for OSX. 
</p></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 21 Dec 2014 22:29:06 +0000</pubDate>
	</item>
</rss>
