|
Hello.
I've wrote recently program which swiches desktop wallpaper every eg. 5 minutes. Everything works well, but I've got one hard problem.
In my program options i can choose style of wallpaper (Tiled, Centred, Stretched).
And now when I'm setting wallpaper Centred and user click RMB on Desktop and choose option "Hide Icons On Desktop". Icons disappear and wallpaper that I have set is chanding from Centered to Tiled. It doesn't happen with stretched or tiled (of course) option.
I checked and when I choose style of wallpeper in Desktop Properties (not in my program) and then hide icons, everything is ok.
I'm totally confused.
I use class below which I've found at CP.com and modified a bit:
public sealed class Wallpaper<br />
{<br />
public Wallpaper() { }<br />
<br />
const int SPI_SETDESKWALLPAPER = 20;<br />
const int SPIF_UPDATEINIFILE = 0x01;<br />
const int SPIF_SENDWININICHANGE = 0x02;<br />
<br />
[DllImport("user32.dll", CharSet = CharSet.Auto)]<br />
static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);<br />
<br />
public enum Style : int<br />
{<br />
Tiled,<br />
Centered,<br />
Stretched<br />
}<br />
<br />
public static void Set(Uri uri, Style style)<br />
{<br />
System.IO.Stream s = new WebClient().OpenRead(uri.ToString());<br />
<br />
System.Drawing.Image img = System.Drawing.Image.FromStream(s);<br />
string tempPath = Path.Combine(Path.GetTempPath(), "wallpaper.bmp");<br />
img.Save(tempPath, System.Drawing.Imaging.ImageFormat.Bmp);<br />
<br />
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);<br />
if (style == Style.Stretched)<br />
{<br />
key.SetValue(@"WallpaperStyle", 2.ToString());<br />
key.SetValue(@"TileWallpaper", 0.ToString());<br />
}<br />
<br />
if (style == Style.Centered)<br />
{<br />
key.SetValue(@"WallpaperStyle", 1.ToString());<br />
key.SetValue(@"TileWallpaper", 0.ToString());<br />
}<br />
<br />
if (style == Style.Tiled)<br />
{<br />
key.SetValue(@"WallpaperStyle", 1.ToString());<br />
key.SetValue(@"TileWallpaper", 1.ToString());<br />
}<br />
<br />
SystemParametersInfo(SPI_SETDESKWALLPAPER,<br />
0,<br />
tempPath,<br />
SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);<br />
}<br />
}
and I use such instruction:
Wallpaper.Set(new System.Uri("c:\\tap.jpg"), Wallpaper.Style.Centered);
thanks for all responses.
|
|
|
|
|
hey my[Hope not to bother anyone] people,
I would like to Authenticate a user in the main form application[client] and then in the server. And also i would like to authorize the users. I don't have webforms... i have desktop applications which connects to the Internet and communicate one to each other.
Say i would like to:
1 - Send the SID of each computer where the client is running
2 - Send the login information of the current user
3 - Verify the current user of the Client has Administrator rights from the server
4 - Verify the publisher of the application. I am thinking that if i verify the publisher i can use the certificate, is that right?
5 - Digitally sign and verify all data that is being sent over the network.
I know how to sign all data but i am not so sure how to verify it.
would this be possible:
.
.
.
byte[] toSend = Encoding.ASCII.GetBytes(Convert.ToString(WindowsIdentity.GetCurrent()));
NetworkStream net = ClientTCP.GetStream();
try{
net.Write(toSend,0,toSend.Length);
}
catch{}
finally
{
net.Close();
ClientTcp.Close();
}
...
in the other side i would have a receiving part but i would like to do this:
try{
int bytes = net.Read(toRead,0,toRead.Length);
string iden = Encoding.ASCII.GetString(toRead,0,bytes);
//assuming that i have all the bytes of the windows identity
WindowsIdentity W_iden = (WindowsIdentity) iden;
}
would that code help me send a windows identity over the network????
thanks all...
regards
The way of the code warrior is... SO beginning of the legacy starts now!
|
|
|
|
|
The only true way to authenticate is if two parties know who they should be talking to prior to initiating the conversation. Then, both parties can sign all communications between them with their "private key" to ensure they are who they say they are. Other schemes have been produced which attempt to get around knowing anything about someone else before communicating, but they are all able to be cracked in one way or another. The most secure way to set it up would be to store all user public keys, and have all users store the server public key. Then, each user communicates by hashing the message, signing the hash, creating a symmetrical key, encrypting the sym key with the other party's public key, then encrypting the message with the symmetrical key, and sending the information to the other party.
Jeff
|
|
|
|
|
Hello,
I have the problem that I have a lengthy c header file containing something like:
<br />
typedef enum<br />
{<br />
enum1,<br />
enum2,<br />
enum3,<br />
... a lot more<br />
} MyEnums;
How can I best reuse this information in my CS projects without cut'n paste or even retype this?
Thanks,
Tobias
|
|
|
|
|
hi,
two ideas:
1.
write a little program to rework the source file
or
2.
compile as a C++/CLI dll, decompile with reflector towards C# source.
(this will loose all comments, assuming you have them; not clear from your post).
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips:
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use PRE tags to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Thank you for your post, I allready tried the second solution, but didn't succeed. I didn't find the typedef enum in the reflected dll. Do you know how excactly I need to include the typedef?
Tobias
|
|
|
|
|
You can't. typedef is a C keyword and not C#. As Luc said, you could use C/CLI to get this. Why can you not cut/paste this code?
|
|
|
|
|
Hmmm.... as far as the enum is concerned; perhaps a RegEx to extract it and rewrite it in C# syntax?
An interesting little project, I may have to try it.
|
|
|
|
|
Usually a typedef is defined in another header, take a look at the original type of the typedef, then you can properly assign that type in C#.
Any code will be useful
Microsoft Student Partner
|
|
|
|
|
how do i point a sub domain to a specified folder?
i need a solution that the web application should handle that, not IIS, since i don't have permission to change the IIS settings.
|
|
|
|
|
You might want to ask in the ASP.NET forum on this site.
"I've seen more information on a frickin' sticky note!" - Dave Kreskowiak
|
|
|
|
|
Bold, Copy and paste works fine but when i bold the text and click on copy and then paste text on a new line the text formation is gone. It just paste the acutal text but loose the Bold format. Am i doing something wrong in my codes.<br />
<br />
mshtml.HTMLDocument doc=(mshtml.HTMLDocument)this.axWebBrowser1.Document;<br />
doc.execCommand("Bold",false,null);<br />
doc.execCommand("Copy", false, null);<br />
<br />
text=Clipboard.GetDataObject().GetData(DataFormats.Text,true).ToString();<br />
doc.execCommand("Paste", false, text);
thanks
|
|
|
|
|
I think you should be using DataFormats.Rtf to get the data from the clipboard
Jeff
|
|
|
|
|
Thansk for answering Didn't work, it threw alot of garbage in rtf formate on my form browser
|
|
|
|
|
You have to either parse the rtf formating to extract the style, or display it in a RichTextBox by setting the RichText (or some similar name) property. I'm not sure if there is some built-in way in C# to extract the formatting from an RTF string, but you could google it. The way you were doing it in your first post, you were only getting the text without the formatting.
Jeff
|
|
|
|
|
Can someone tip me about a good software that I can use to collect my code-snippets, something that supports C#.
|
|
|
|
|
You can store snippets in Visual Studio.NET.
|
|
|
|
|
They are stored in a folder below your Visual Studio install directory. You can easily create snippets with SNIPPY
Regards,
Tobias
|
|
|
|
|
Like the other responders have said, use the snippet manager on VS. It is a very good one.
"I've seen more information on a frickin' sticky note!" - Dave Kreskowiak
|
|
|
|
|
Let me rephrase, maybe I was asking for the wrong thing.
I would like a place to store source code examples for later viewing.
Something like Source Code Organizer PS, so I can have a good overview and a possibility to search.
|
|
|
|
|
Hi there.
Developing some FF plug-in, i've finally managed to embed my c# dll into
a c++ FF plug-in template, wrote a wrapper class to access my c# functions
and members and made it so far the c# app can be run from within the
FF plugin.
Now, to display the c# app's content, i'm using BitBlt from the c# app's
HDC to bitblt to the plugin space.
Problem is: when the c# app is not visible [ e.g. minimized or hidden by another
window ], the contents of the app will no longer be bitblted to the plugin space.
[ but instead whatever is hiding the app window, or just nothing, if the app window
is minimized ]
For i want to have the app finally to be run in 'background'
[ that is, invisible to the user ] and all graphical content bitblted to the plugin
space instead [ plus mouse pointer position reported back to the invisible app, so
to 'bridge' between the app and the plugin ] it is crucial to my project that i'm
able to bitblt the app's contents to the plugin space, even it's not visible at all.
Any help on getting this done is, as always, highly appreciated.
|
|
|
|
|
I have spent days of man hours trying to figure this out to no avail... If you do get it to work, be sure to post your solution so the rest of us can benefit. I also figured that I will tell you another caveat that bothers me about the solution I ended up using.
I make a call to ShowWindow prior to performing the bitblt. Sometimes, if the window isn't drawn fast enough, my bitblt doesn't get the window's contents, so I have to call it multiple times to get it to work. This is really annoying, as I actually have to wait for the screen to redraw itself before copying the contents of that screen. Again, any progress you make on this should be posted here so others like us don't waste as much time as I have, and as much time as you presumably will have spent on figuring this out.
Jeff
-- modified at 16:49 Monday 26th November, 2007
|
|
|
|
|
Jeff, just to let you know: I surrendered.
There ARE some more or less interesting approaches to get this task done:
- Using the <control>.DrawToBitmap() method to paint each control to the target
bitmap iteratively.
This ist pretty useless for such controls, that do not implement the DrawToBitmap()
method, like ActiveX controls. [ Needless to say it's of no worth for elements
that AREN'T controls at all ... ]
- 'Abusing' the OnPaint event.
[ see here[^] ]
While this sounds somewhat interesting, it does not seem to work for everyone, plus it
did not for me :[
- Other methods, like Graphics.CopyFromScreen, BitBLTing, and so on.
All of them only capture the visible and not obscured parts of the window.
There ARE also two promising approaches i'll investigate further:
- Overriding the OnPaint() method for every control to have the graphics backbuffered,
then copy from this backbuffer.
- Using a single bitmap / image / graphics object to paint all the important
things onto, have this bitmap or a kept current public, copy from it.
I'll try the latter.
|
|
|
|
|
Yeah, I didn't write the code for the window I was getting the image for, so I don't think any of the other methods will work for me. Since the image is dynamic, I have to continually update by sending a showwindow message before and after capturing the image (to restore and minimize). Anyway, keep us posted on your results!
Jeff
|
|
|
|
|
Aaaah, JEFF.
It took me that long to figure out you also responded to my previous posts.
[ see here[^] ]
Well, i spent the day getting things working.
First of all, to pay some credit to the post / repsonse mentioned above, that snippet
didn't work 'out of the box', it had to be modified to this to get it working:
<br />
RECT rc;<br />
GetClientRect(hWnd, &rc);<br />
HDC trgDC = GetDC(hWnd);<br />
<br />
System::IntPtr _srcDC = iForm.getHDC();
HDC srcDC = (HDC)_srcDC.ToPointer();<br />
<br />
BitBlt(trgDC, 0, 0, rc.right, rc.bottom, srcDC, 0, 0, SRCCOPY);<br />
ReleaseDC(hWnd, trgDC);<br />
This is mainly due to the C# dll delivers no HDC, but IntPtr instead, which, as you
can see above, can simply be casted to HDC. [ Which took me ages to find out. ]
"iForm" is a wrapper i wrote for the C# class in the .Net ddl i'm using:
[ This also allows me to have the class being global in C++ context, which is
impossible for 'native' managed objects. (using the /clr directive) ]
class IMEMFormWrap<br />
{<br />
private:<br />
gcroot<IMEMForm ^> _iForm;<br />
<br />
public:<br />
IMEMFormWrap()<br />
{<br />
_iForm = gcnew IMEMForm();<br />
}<br />
<br />
IntPtr getHDC()<br />
{<br />
return _iForm->CreateGraphics()->GetHdc();<br />
}<br />
<br />
<br />
};
And for my 'bitblting hidden window / form / whatever to plug-in space' struggles:
Well, it did work for me using a bitmap backbuffer in the C# dll.
Everything that is of concern for the plug-in to show is cloned to that bmp object
which is then continuously grabbed from the C# dll via wrapper and bitblted to
the plug-in space.
Well, at this point, my concern is to clean up my C# .Net code,
[ making all the debug and dirty stuff go away ( 'sh*t-be-gone' (tm) ) ]
putting all useful things into a 'new' dll.
And then there's some concern about performance.
I'm glad, i know there is a LOT of space for some speed improvements in
my previous code, so i'm sanguine it can be sped up to some extend.
Plus i'll have to set up some [maybe bidirectional] communication
between the plugin and the C# dll, involving the evaluation and
reaction to user events [ mouse move and so on ].
Also, i've encountered some memory leakage in the plug-in bitblting parts ...
well, i'll also have to dive into GDI and HDC usage as well.
Still a lot of work to be done.
But, at least, things are going forward.
|
|
|
|
|