|
Thank you for your response!
This will work perfectly for my situation.
Have a blessed day!
|
|
|
|
|
np, have a good day yourself
|
|
|
|
|
This piece of code runs well for a new browser.
Dont forget to give a reference to ExplorerLib.dll
ExplorerLib.InternetExplorer explorer;
ExplorerLib.IWebBrowserApp webBrowser;
explorer = new ExplorerLib.InternetExplorer();
webBrowser = (ExplorerLib.IWebBrowserApp) explorer;
webBrowser.Visible = true;
webBrowser.Url or something like that = "yourURL";
|
|
|
|
|
where to give the url there is nothing
webBrowser.Url or something like that
|
|
|
|
|
You could also do the following:
Add reference to "Microsoft Internet Controls" (that is SHDocVw.dll) in the COM tab.
Use this code:
string URL = "http://www.codeproject.com";<br />
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorerClass();<br />
object empty = null;<br />
ie.Navigate(URL, ref empty, ref empty, ref empty, ref empty);<br />
ie.Visible = true;
This should solve your problem.
|
|
|
|
|
Is there a methode for recording sounds from a microphone,
creating a wav, wma or mp3 file?
I'm using VS.NET 2002.
Thanks in advance for your help ,
Thomas
|
|
|
|
|
The easiest way would be to use DirectX 9 managed APIs. To record sound isn't too hard, but it does create additional dependencies that require a separate install for DirectX 9 and the managed assemblies.
Otherwise, just search CP. There's several articles that discuss other ways to do it, P/Invoking several Win32 APIs to do it.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
I'm writing a C# app which uses some xslt scripts to transform XML files. The XSLT files are embedded as resources in the application assembly. Some of these files use 2 input: one is the XML file to be transformed, another is an XML fragment contained in a distinct file, accessed via document() XSL function. The location of this second input file is known at runtime, and is passed from the application to the Transform method using an XsltArgumentList.
The code I have written works fine if I load the XSLT from file, but the transformation *fails to access the 2nd input document when I load it from the assembly resources*. In both cases, the parameter is received correctly and the transformation works except for the external document data, which in one case are completely ignored as if the document did not exist. Maybe I'm missing some credentials, or what else can be wrong? Thx guys for helping a newbie...
Here's a dummy sample:
--- let's say we have a dummy contacts list in a XML file, and I want to prepend some XML coming from another file; the XSLT looks like:
<xsl:param name="newdoc"/>
...
<xsl:template match="TheRoot">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="document($newdoc)"/>
<xsl:copy-of select="TheContacts"/>
</xsl:copy>
<test1><xsl:value-of select="$newdoc"/></test1>
<test2><xsl:copy-of select="document($newdoc)"/></test2>
</xsl:template></code>
where the full path for the file to be prepended is passed as "newdoc" parameter. I add the <test> tags above to examine the parameter value.
--- the code for the transformation follows: it works fine if I use the Load from file method, but FAILS if I load the XSLT from resources. In both cases, I can be sure that the parameter is received correctly, but it seems that the XSLT loaded from resources CANNOT ACCESS the file using document() function (<test2> above is always empty, while <test1> contains the file name as expected):
// setup params
XsltArgumentList xlArgs = new XsltArgumentList();
xlArgs.AddParam("newdoc", "", "c:\\Work\\SomeDummyFile.xml");
// load input XML
XPathDocument doc = new XPathDocument("c:\\Work\\theInputFile.xml");
// open output
XmlTextWriter wr = new XmlTextWriter("c:\\work\\theOutputFile.xml"), null);
wr.Formatting = System.Xml.Formatting.Indented;
// transform
XmlUrlResolver res = new XmlUrlResolver();
res.Credentials = System.Net.CredentialCache.DefaultCredentials;
XslTransform xslt = new XslTransform();
// xslt.Load("c:\\work\\Test.xslt"); <-- loading from file works!!!
Assembly a = Assembly.GetExecutingAssembly();
Stream st = a.GetManifestResourceStream("MyNamespace.Test.xslt");
xslt.Load(new XmlTextReader(new StreamReader(st, Encoding.UTF8)), res, null);
xslt.Transform(doc, xlArgs, wr, res);
wr.Close();
|
|
|
|
|
one word: "Security"....
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconxsltransformclassimplementsxsltprocessor.asp[^]
"Most of the Load methods also take Evidence as a parameter. The Evidence parameter is the System.Security.Policy.Evidence that is associated with the style sheet. The security level of the style sheet affects the security level of any subsequent resources it references, such as the script it contains, any document() functions it uses, and any extension objects used by the XsltArgumentList."
I had the same problem...
"When the only tool you have is a hammer, a sore thumb you will have."
|
|
|
|
|
I would like to know how I could do drag and drop from my application to the windows file explorer in a Winrar style.
What I'm trying to reproduce is that for example in Winrar when you drag a file out of an archive the file is not extracted before the DoDragDrop would be called but only when the drop happens.
How can I catch the event of dropping the file on another application so that I can do some sort of processing only at that time?
|
|
|
|
|
Oh boy, you're opening up a can of worms here!
This isn't an easy subject and I urge you to take a look at the "Shell Programmer's Guide" in the MSDN Library. There's a lot involved with this, and you might want to consider NOT doing this all in C#.
While C# uses the shell interface deep-down for drag-n-drop, it doesn't expose it (for example, the IDataObject in .NET is completely different from IDataObject in the shell APIs). This is really a two-step process, and you're going to have to redefine a lot of shell interfaces (make sure you use the right GUIDs and other interop services, like the proper DispIdAttribute (where appropriate) and what-not).
What you need to create is a context menu handler and register it in the registry as a DragDropHandler. This is the special context menu that is created when you right-click and drag a file (or other data objects) to the shell. Like WinRAR and WinZip, you'd add a context menu for extracting (or whatever you want) and in that menu click handler you'd perform the action based on clipboard data (the shell's IDataObject , not .NET's). This means you have to decide on a clipboard format to publish (nothing more than a string that both your program and the drop target have to understand). Because you're draggint to a folder and want a drag-n-drop context menu handler, you'll have to pack the DragDropFormats.Files (a string[] array of filenames, even if they're made-up) into your data object, as well as a custom format that gives you more details that you can use to extract data from your application.
Again, I urge you to read through the shell programming documentation. To explain everything would take an entire article. You could also look here on CP or the web to find it, but I'm not sure you'll find much for C# for this because of the amount of work required to even define all the interfaces, structures, and constants that you'll have to create in C# that already exist in the Platform SDK. That's why I was saying that you might want to consider at least writing the drag-n-drop context menu handler in C++. You'll save a lot of work. You can do it in C# (because the shell creates a COM instance, with which a CCW interop assembly can be used because mscoree.dll is a native DLL and creates the CCW for the specified .NET assembly), but it'll be a lot of work.
I'm sorry I can't give you a specific link. Lately, I keep getting "Unavailable" in the MSDN library TOC. Being that I do have the MSDN Library DVD, I can at least give you the topic path to which you'll want to browse. Go to http://msdn.microsoft.com/library[^] and expand "User Interface Design and Development" -> "Windows Shell" -> "Shell Programmer's Guide" -> "Intermediate Shell Techniques". That has two topics that you'll want to look through.
Michael Dunn also has a nice series on extending the shell, but in C++. Take a look here: http://www.codeproject.com/shell/shellextguideindex.asp[^] (the index of the article's series).
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Wow this looks like a lot more work than I first though, but it looks interesting and I will probably have an attempt to it, but probably not in C#. But at least I know in what direction to look into now, you've shed a lot of light on the issue
Thanks again
|
|
|
|
|
After reading a couple of article of "The Complete Idiot's Guide to Writing Shell Extensions" series (which are excellent), I got curious and did a little investigation in my registry on Winrar. I was trying to find where and how the handler to support a custom clipboard data (data handler) is setup in the registry.
What I figured out is that Winrar only has one shell extension file, rarext.dll is the only thing that came up when I searched the HKCR->CLSID. When I manually unregistered it (renamed it’s GUID key from the HKCR->CLSID) all context menu, property pages and drag drop handlers were removed from the shell (which was what I expected). But I still can drag a file out from an archive to the desktop and the file will only extract from the archive after it's dropped on the target.
It looks like the data handler is still active or does this mean that it’s possible to create that behavior with out shell extensions?
|
|
|
|
|
It is using a common clipboard format to do this. Most likely, it extracts the files to a temp location first and lets explorer copy them. I don't know exactly how it works, though, since it's implementation is unknown. It still comes down to the fact that the drop target is what handles the data transfer, so you have to use a clipboard format that the shell understands.
What you removed from the registry (there are actually several keys that deal with different shell extension types) was merely shell extensions. What you're talking about - which I didn't catch before - is dragging and dropping files from their application (which is already running). The idea is still the same, though: you have to use a clipboard format that the shell understands.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
I was able to get the drag drop to work with one major problem… because the extraction of the files has to be done before the DoDragDrop (because I don’t know where else to put it and the DoDragDop doesn't return until the files are dropped). But if the file that’s going to be extracted is big, then the behavior is pretty weird because when I click-hold on the file (in my app) then move the mouse (triggers the item drag) my app extracts the file even before I’ve even decided where to drop it, so then I have to wait that the file is fully extracted before dropping it in the file explorer… Here’s a snippet of code that I have:
void listViewFiles_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
DataObject data = new DataObject();
string[] fileArray = new string[listViewFiles.Items.Count];
string tempPath = Path.GetTempPath();
for(int i = 0; i < listViewFiles.Items.Count; i++)
fileArray[i] = Path.Combine(tempPath, listViewFiles.Items[0].Text);
data.SetData(DataFormats.FileDrop, fileArray);
ExtractSelectedFileTo(Path.GetTempPath());
DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Move);
}
So what I’m trying to say is that I think I’m already using a clipboard format that the shell understands, but it still doesn’t make my implementation of it look good enough. The best would be that the DoDragDrop would tell my application by an event when it’s about to drop and only then I would extract the files.
Thanks again for your help
|
|
|
|
|
Begin extracting files in a separate thread and and continue drag-n-drop in the main UI thread (it has to be in the UI thread anyway). Just join the main UI thread (Thread.CurrentThread ) with the extraction thread so that it will continue to perform the drop when the extraction is finished.
You could try something else, too, which is to handle the Control.GiveFeedback in your drag source. Even though the win32 APIs don't mention it, the GiveFeedback event might because fired before the drop target is notified of the drop. Your Effect would be different and maybe you could do your extraction then. This is only a guess, though.
Other than that, you might have to stop using .NET's drag and drop functionality and create interfaces for IDropSource , IDropTarget , and IDataObject (not the .NET one), as well as P/Invoking OLE's DoDragDrop and defining the STGMEDIUM and FORMATETC structures. Many other things might be required as well. Basically, you pack the data (or pointers to the data) in memory (for instance, in global memory which would require a call to something like Marshal.AllocHGlobal ) and give the shell something it knows. You should definitely take a look at the Windows Shell documentation for more information.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
I don't know how to switch between two forms in a project in C#. In VB6, if I was on Form1 and I wanted to switch to Form2, I would do something along the lines of:
Form1.Hide
Form2.Show
In C#, I can do...
this.Hide();
but can't get Form2 to load with...
Form2.Show();
because "Show doesn't exist in the class or namespace".
Is there some other way to switch between forms?!?
Thanks in advance for your help,
Paul
|
|
|
|
|
dear pauldaly ,
as i think that you are a new .net programmer in .net you have to create an instance from the object to use it so you have to define to objects like
<br />
Form1 frm1 = new Form1();<br />
Form2 frm2 = new Form2();<br />
now you can use each instance of the forms to do that
<br />
frm1.Show();<br />
frm1.Hide();<br />
frm2.Show();<br />
and so on
Mhmoud Rawas
------------
Software Eng.
|
|
|
|
|
Anybody know of a simple and native way to do this in c#? I want to know if my app can utilize XP themes at runtime.
Thanks,
Todd
|
|
|
|
|
|
An easy way that uses the .NET class library is like this:
Version v = OSFeature.Feature.GetVersionPresent(OSFeature.Themes); Looking at the IL, the IsAppThemed native method is called internally, which will only work if comctl32.dll, version 6, is loaded (which means the binding is being redirected to the side-by-side native assembly).
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Perfect... thanks. Here's the code I used in the end:
if (OSFeature.Feature.IsPresent(OSFeature.Themes))
{
...
}
|
|
|
|
|
Hey Todd,
You could also use a manifest file to enable the themese.
You can get more information in your MSDN. Just search for "Using Windows XP Visual Styles" title which is part of Windows Technical articles. There you will see the manifest code.
Based on your operating system (XP only) your application will load Common Controls version 6 from your manifest if present and if not, it will load previous version. There are also additional information about setting the style of your controls to Flat.
|
|
|
|
|
Hi all,
I need to write a program to schedule promos for a radio station.
Each promo is to be shown a certain number of times a day in one of the ad breaks of which there are so many a day.
The promos need to be as well distrubuted as possible. That is all the promos well spread out amongst the ad breaks and each promo should it be well dispersed among those promos that are shown.
Furthermore some promos are to be shown only between certain times.
Id be grateful for any ideas of how to approach this.
Cheers.
|
|
|
|
|
This sounds like a homework question to me.
First of all, write down your selection criteria. Then consider how to put it into code. I'd probably start with a struct that includes details such as the promo ( a seperate class ), the times it can be played, and then write code to spread the promos over the applicable time periods. So if you can play a promo between 1 and 2, if you can play it three times, play it at 1, 1:30 and 2.
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|