|
Because of the fundamental architecture of COM and .NET interoperability. The code you're doing is essentially what the VB virtual machine does in the background using the IDispatch implementation of automation classes (it finds the method by the DISPID and invokes it with the specified parameters).
You shouldn't have to do this, though. If you create your interop assembly correctly, you just use the classes and methods from that. That's what the interop assembly is for - wrapping the COM control in a runtime-callable wrapper (RCW).
Again, read that link about exposing COM components to the .NET Framework I posted before. It's important to truly understand and not just accept the first thing that works. If you keep doing what you're doing, it'll take you forever to finish! Do it right and create and use the interop assembly.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi,
I am working on an application which enumerates the shares from a remote computer and open it in explorer.
I have successfully got the names of the shares and now I am trying to open a directory lets say //station1/eBooks on the remote station1.
The behavior would be the same as typing //station1/eBooks on Run in Start Menu Or any other share scaner like shed. I have tried a new process for "explorer.exe" and passing the path as argument. It works fine for local shares but access denied instead of giving the login prompt for remote folders.
Anyone knows how to do it Plz reply. Thanks in advance.
|
|
|
|
|
I think you should do something liek this:
file://username:password@your/path
but I am not shure
Q:What does the derived class in C# tell to it's parent?
A:All your base are belong to us!
|
|
|
|
|
That syntax is no longer supported after the URL moniker was patch to fix a bug.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Accessing the path via .NET does not prompt for credentials. This is a function of the shell. .NET is not the shell. If you want to prompt for credentials, catch the exception, prompt for their username and password, and then impersonate the user and try reconnecting. For more information on impersonating a set of credentials, see the class documentation fo the WindowsImpersonationContext in the .NET Framework SDK, which also includes an example.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thanks for your reply.
Let me restate by problem. I enumerate the shares, user doulbe click on the share in the list view, the share is opened in the explorer (if password is required windows asks for it itself). Its the same behaviour like lan netscan or any other share scan software.
Plz take a look at shed. Its a realy small software but great speed. Download link is below.
http://keir.net/shed.html
|
|
|
|
|
Sorry, I didn't quite understand you before. Take a look at System.Diagnostics.Process . You could invoke Windows Explorer on the share like so:
string path = "share path";
Process.Start("explorer.exe", string.Concat("/e,", path)); You can find more about the Windows Explorer command line switches at http://support.microsoft.com/default.aspx?scid=kb;en-us;130510[^].
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Alright, anyone knows how to put a ProgressBar as one of the panels in a StatusBar?
<font=arial>Weiye Chen
When pursuing your dreams, don't forget to enjoy your life...
|
|
|
|
|
Yes. First, make sure that StatusBar.ShowPanels is true , and add your panels. To make things easier, make your panel that will host the ProgressBar fixed-width (this is common in most apps beside).
Next, handle the StatusBar.DrawItem event. Your event handler should look something like the following (assume statusBar1 is your StatusBar , and progressBar1 is your ProgressBar ):
private void statusBar1_DrawItem(object sender, StatusBarDrawItemEventArgs e)
{
Rectangle bounds = e.Bounds;
bounds.Y = statusBar1.Top + SystemInformation.Border3DSize.Height;
bounds.Height += SystemInformation.BorderSize.Height * 2;
bounds.X -= SystemInformation.BorderSize.Width;
if (statusBar1.SizingGrip && ((Form)statusBar1.Parent).WindowState ==
FormWindowState.Maximized)
bounds.Width += SystemInformation.VerificationScrollBarWidth;
progressBar1.Bounds = bounds;
} This works, though there might be more elegant solutions you could search for.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Heath Stewart wrote:
though there might be more elegant solutions you could search for.
If a shorter code means elegant, perhaps this is one. Btw, thanks again.
private void statusBarBrowser_DrawItem(object sender, System.Windows.Forms.StatusBarDrawItemEventArgs sbdevent)
{
if(sbdevent.Panel == statusBarPanelProgress)
{
Rectangle rectPanel = sbdevent.Bounds;
rectPanel.Y += statusBarBrowser.Location.Y;
progressBarBrowser.Bounds = rectPanel;
}
}
<font=arial>Weiye Chen
When pursuing your dreams, don't forget to enjoy your life...
|
|
|
|
|
The reason some of that code was there because the code you have above won't draw quite right in the bounds specified by the StatusBarPanel , especially if you need to take a sizing grip into account.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Heath Stewart wrote:
especially if you need to take a sizing grip into account.
I see... I have disabled the sizing grip.
<font=arial>Weiye Chen
When pursuing your dreams, don't forget to enjoy your life...
|
|
|
|
|
Hi..
i would like some pointers to links that can guide me on this task..
i want to create remote objects with callback functions and use them in the window host.
with due regards to Jibin Pan. I found a article at -->
http://www.c-sharpcorner.com/Code/2003/March/RemoteObjectsP1.asp
this is perfectly what i want ..but problem is when i try to register a callback method..I get some sort of security exception...can anybody tell me where i have gone wrong..
if we go to the link i mentioned ..we see there are some figs illustrated..On channel server fig ..i'm not able to send message from server to client..
Jibin Pan Sir,If u happen to read this posting..plz do not get angry..as i tried contacting you.
Regards
God is Great..
|
|
|
|
|
Why don't you tell us what the SecurityException read? There's many reasons that can be thrown.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
The exception i got is -->
System.Security.SecurityException.
Type System.DelegateSerializationHolder and the types derived from it (such as System.DelegateSerializationHolder) are not permitted to be deserialized at this security level.
God Is Great
|
|
|
|
|
The solution to your problem is here Ingo Rammer[^]
Free your mind...
|
|
|
|
|
Thanks a lot Guillermo ...........
it worked..
WHew...it saved a couple of my hours..rather days ..;P )
God Bless u..;)
God Is Great
|
|
|
|
|
Hi,
i've created an MDI app. there is main form which contains some buttons..and a register form which runs after any one of the buttons are clicked...the problem is when the register form shows itself as a child window the buttons from parent window come onto the child window and are overlapping the form.
whats wrong?...how do i handle this problem.
Arvinder Gill
|
|
|
|
|
I think u can creat a panel and dock it a side first. Then put your buttons into it.
<font=arial>Weiye Chen
When pursuing your dreams, don't forget to enjoy your life...
|
|
|
|
|
Hi All!!!
i am checking the double click event of ComboBox but it is not triggered on double clicking, but if we register it with TextBox, it works fine. Click event of comobo also works fine. but there is some problem with doublecliking it.
Can soemone help?
Thanx in advance
sorry for my bad English.
|
|
|
|
|
Almost all the controls in System.Windows.Forms encapsulate their Windows common controls equivalents. Not all of these controls support all the notification messages that raise events in .NET. The ComboBox, for instance, pops up and hides its scrolling popup window used for the drop down on WM_LBUTTONDOWN and is not double-click aware. If you want to make it so, you're going to have to extend the ComboBox controls in .NET, override WndProc , and handle many of these messages yourself. To handle messages like WM_LBUTTONDOWN though, you might have to use an IMessageFilter .
Anyway, you'll have to capture this message before it goes to the base class's WndProc method (which you should call base.WndProc(ref m) after your code) and start a timer. If the timer elapses, call SendMessage (which you'll also have to P/Invoke) with the original data that came with the WM_LBUTTONDOWN message. If the user clicks again before the timer elapses, then you've got your double-click event and should throw-out the WM_LBUTTONDOWN message (i.e., don't send it). The easiest way to raise this event is to just call base.OnDoubleClick , which will raise the DoubleClick event.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I need to be able to turn off the screensaver or disable it some how while my app is running. You see, I developed a Media Player, so the screensaver should not be able to take over while watching a longer video.
Does anybody knows how to...??
|
|
|
|
|
You'll need to P/Invoke the SystemParametersInfo API like so:
[DllImport("user32.dll")]
private static extern bool SystemParametersInfo
(
[MarshalAs(UnmanagedType.U4)] int action,
[MarshalAs(UnmanagedType.U4)] int param,
IntPtr data,
[MarshalAs(UnmanagedType.U4)] int winini
)
private const int SPI_SETSCREENSAVEACTIVE = 0x0011; When you call this, you'll want to make sure that you activate it again, so you'll want to design your code something kind of like this:
try
{
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, null, 0);
}
finally
{
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, null, 0);
} Optionally throw a catch in there if you want, but make sure you use a finally block or some other means of re-activating the screensaver in case of success OR failure (if possible). The calls above also do not update the user profile, so this change will not persist after a reboot (which seems to be the way you'd want it for what you're doing).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thanks Heath Stewart, it works, you ar:-De the man!!!
|
|
|
|
|
Hello, Im new to all this. I was looking for an algorithm that display the sin function graphic. Can you help me please?
Thanks
|
|
|
|