|
Just for the hell of it I set up some tabs (though it turns out I just needed one). This is my code:
float[] tabs = {15};
Format.SetTabStops(0, tabs);
string MenuItmStr = "\tX\t" + Item.Text;
The X now covers the arrow though the arrow is still there. Seems like it somehow gets drawn after my DrawItem gets executed.
|
|
|
|
|
I'm trying to run the GetDisplayName method of a folder (in this case, the desktop folder). It all executes perfectly as far as I can see, until it reaches the StrRetToStr method, where it crashes with a null pointer error.
I'm slightly confused as its practicaly identical to the tutorial on this site.
The code follows:
<br />
desktopPIDL = new IntPtr();<br />
<br />
COMStuff.SHGetDesktopFolder(out desktopPIDL);<br />
<br />
Type shellType = typeof(IShellFolder);<br />
<br />
IShellFolder shellFolder = (IShellFolder)<br />
Marshal.GetTypedObjectForIUnknown(thing, shellType);<br />
<br />
<br />
IntPtr interfacePtr = new IntPtr();<br />
IntPtr relativePIDL = new IntPtr();<br />
<br />
Guid myGUID = Marshal.GenerateGuidForType(shellType);<br />
<br />
result = COMStuff.SHBindToParent(pidl,<br />
myGUID,
out interfacePtr,<br />
out relativePIDL);<br />
<br />
IShellFolder myShellFolder = (IShellFolder)Marshal.GetTypedObjectForIUnknown(interfacePtr,shellType);<br />
<br />
mySTRRET = new STRRET();<br />
result = myShellFolder.GetDisplayNameOf(relativePIDL,SHGDN_Flags.SHGDN_NORMAL | SHGDN_Flags.SHGDN_FORPARSING<br />
,ref mySTRRET);<br />
<br />
<br />
myFileName = new string(' ',128);<br />
<br />
result = COMStuff.StrRetToStr(ref mySTRRET, relativePIDL, out myFileName); <br />
The calling code above gets to the last line before crashing.. STRRET has all it's values set (except type... the uint is always 0 for this struct).
The STRRET struct and the StrRetToStr method are declared as follows:
<br />
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Auto)]<br />
public struct STRRET <br />
{<br />
[FieldOffset(0)]<br />
public uint uType;
<br />
[FieldOffset(4)]<br />
public IntPtr pOleStr;
<br />
[FieldOffset(4)]<br />
public UInt32 uOffset;
<br />
[FieldOffset(4)]<br />
public IntPtr cStr;
<br />
}<br />
<br />
<br />
<br />
[DllImport("shlwapi.dll", CharSet=CharSet.Auto)]<br />
public static extern int StrRetToStr(<br />
ref STRRET pstr, <br />
IntPtr pidl,<br />
[MarshalAs(UnmanagedType.BStr)]<br />
out string pbstring);<br />
<br />
If anyone could shed some light on this subject, it would be most grateful.
regards
Cata
(This is actualy an expantion on a thread I posted 2 weeks ago, but I've been supremely busy, so it's lost in the archives somewhere)
|
|
|
|
|
how would i run a command from c# like i would at the command prompt? (just an example: command="explorer /e,c:")
thanks,
Rob Tomson
--
There are 10 kinds of people. Those who understand binary and those who don't.
|
|
|
|
|
Look at Process class and specifly its method Process.Start() and StartInfo property.
Mazy
You're face to face,
With the man who sold the world - David Bowie
|
|
|
|
|
You can use the code below to run an application.
The arguments in this case is the application's exe as the first argument & the second argument is the actual file you want to open.
You can also just specify the file & it will open in the default application.
I'm sure it must be possible to just specify the application as well.
System.Diagnostics.Process.Start("WMPlayer.exe", "C:\\test.wmv");
Hope it helps
Jaclyn
|
|
|
|
|
i was actually looking at that but since it said Diagnostics i didn't know if it was meant to be used for that or something else. what i want to do is running a third party console program silently. using the Process.Start it opens up a command prompt box for me and does exactly what i want but is there a way to not show the window?
thanks,
Rob Tomson
--
There are 10 kinds of people. Those who understand binary and those who don't.
|
|
|
|
|
I've created a class which extends the ScrollableControl, now this class is basically a control which contains images, i.e. a viewer. Now my problem is is that according to the documentation 'AutoScroll' allows the user to scroll to any CONTROLS outside of the bounds. The images however which are being displayed are not controls and are a unique type, how can I activate the scroll bars anyway????
|
|
|
|
|
You have to set AutoScroll to true, and AutoScrollMinSize to total size that you want to have viewable. If you're doing drawing yourself, you have to make sure to adjust positions in your OnPaint event.
best way to do that is put:
pe.Graphics.TranslateTransform (AutoScrollPosition.X, AutoScrollPosition.Y);
at the top of onPaint
|
|
|
|
|
You'll have to override WndProc and handle all the scrolling messages yourself. You should also P/Invoke SendMessage so that you can send messages to the scroll bars (or the parent control, actually) to control how they track.
For more information on the common control scroll bars (since most of the controls and other classes in System.Windows.Forms encapsulate the Windows Common controls and other Windows Management APIs), see scroll bars[^] in the Platform SDK.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi!
How do I rasie an Vscroll event in a richTextBox? without pressing the scrollbar (i.e. When I press a button I want it to preform the same function as when I press the scrollbar).
Regards,
GobbaTroll..
|
|
|
|
|
This question has been ask before, search this forum for proper answer. I can't remember the exact answer now , but I think it could be done by using win32 SendMessage() function.
Mazy
You're face to face,
With the man who sold the world - David Bowie
|
|
|
|
|
is there a way to add a checkbox to the top of a browseforfolder dialog box? i want to have an option to "process subdirectories" right on the browse dialog. (like in the winamp add directory dialog)
thanks,
Rob Tomson
--
There are 10 kinds of people. Those who understand binary and those who don't.
|
|
|
|
|
Does anyone know how I can access the taskbar & see which applications are open? Ie, I need to list all open windows.
Any help will be much appreciated...
|
|
|
|
|
Through WMI classes(System.Management namespace) you can get list of running process, there are some example in this site, maybe you can some property there to get which one is visible window.
Mazy
You're face to face,
With the man who sold the world - David Bowie
|
|
|
|
|
An easier way is to actually use Process.GetProcesses (rather than management classes, although that could work to get processes on a remote machine rather easily). This will get you all the running processes.
You can enumerate these and check Process.MainWindowHandle . The return value is non-zero if the process has an associated window; otherwise, zero (IntPtr.Zero actually) if it doesn't (like a console application or Windows service).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thank you very much for your help, I have indeed managed to get all open applications on the taskbar. But I can only get the open applications, which is great, but alas I need all open windows as well. e.g. If My Documents is open, I need it to pick that up as well, which it doesn't at the present moment. Any idea how I would go about it to get all open windows as well?
Thank you
Jaclyn
|
|
|
|
|
"My Documents" is not a process. explorer.exe (Windows Explorer) is the process that is running that displays a folder like "My Documents". For that matter, iexplore.exe could as well since Windows Explorer and Internet Explorer are both ActiveX containers. Just use Process.MainWindowTitle to get the title being displayed in the caption area of the main window frame.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
As what I've heared and what is expected logically, indirect funcion calls through delegates are almost 8 times slower than directly calling functions.
Yesterday I decided to do a benchmark to prove this fact for myself.
I called a function 1000 times and then invoked it 1000 times through a delegate. The result was amazing, I saw no difference between call duration times! (each one took exactly 13 seconds on my computer)
Do you know any benchmark on the web which addresses this issue?
Don't forget, that's Persian Gulf not Arabian gulf!
|
|
|
|
|
Microsoft has stated through MSDN that delegate invoking is much slower than function calls. However, this is supposed to greatly improve in .NET 1.2.
Aside from that, I haven't heard much on it. In my experience, delegates seem easily fast enough for my needs.
The graveyards are filled with indispensible men.
|
|
|
|
|
Doing 1000 function calls takes almost no time. Those 13 seconds were probably spent inside the function and maybe 0.01 of a second was the actual calls (and 0.08 for delegate calls), so that's why you don't see a difference.
To do a better comparison you should use a function that does almost nothing and call it 1M times.
Here is a simple program with 10,000,000 iterations and calling thru delegate is about 2X as slow on my machine:
<pre>
using System;
namespace DelegateFunctionTest
{
class Class1
{
public int Sum(int a, int b)
{
return a + b;
}
const int RunTimes = 10000000;
delegate int SumDelegate(int a, int b);
[STAThread]
static void Main(string[] args)
{
Class1 c = new Class1();
int start_t = System.Environment.TickCount;
int sum=0;
for (int i=0; i<RunTimes; i++)
sum += c.Sum(i, i+1);
int end_t = System.Environment.TickCount;
Console.WriteLine("Running time for function: " + (end_t-start_t));
SumDelegate del = new SumDelegate(c.Sum);
start_t = System.Environment.TickCount;
for (int i=0; i<RunTimes; i++)
sum += del(i, i+1);
end_t = System.Environment.TickCount;
Console.WriteLine("Running time for delegate: " + (end_t-start_t));
}
}
}
</pre>
|
|
|
|
|
Dear friend,
I have one C dll which API defined one structure with " unsigned char* Data; " inside.
I need to use that DLL, so I want to re-define the structure in C#, but how can I define "unsigned char* Data;" in c# ??
Thanks for help.
|
|
|
|
|
char* == string
Since this is char and not wchar_t , you'll need create your structure so that ANSI characters (and not Unicode - which .NET uses internally) are stored:
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct MyStruct
{
public int SomeInt;
public string Data;
} You could also attribute the Data field with [MarshalAs(UnmanagedType.LPStr)] if you had to mix character sets (and leave off the CharSet property in the StructLayoutAttribute ).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thank you so much, Heath,
as I also need to convert char[1024] inside new structure, so I think I will do this, do you know it is correct?
[StructLayout(LayoutKind.Sequential)]
public struct DataParam
{
public int line;
[MarshalAs( UnmanagedType.ByValTStr, SizeConst = 1024 )]
public string Filename;
[MarshalAs(UnmanagedType.LPStr)]
public string Data;
}
Actually, I really want to know more about this subject, can you suggest some c# books for me.
I would like to know more details of using c#:
how to make dll and dll import; using of Interface....., and some advance topic of making winform.
Thank you
|
|
|
|
|
If you want to know more, the place to start is the .NET Framework SDK. I really don't read many books and rely more on SDKs and intuition. I know that if you go to http://www.microsoft.com/mspress[^] you can find books on .NET and I believe there's even one about COM interoperability.
Anyway, the code is typed correctly. It's just a matter of whether or not is matches your native struct declaration.
On an unrelated note, you don't need to use the <code> tags when inside the <pre> tags. The former is used for in-line programming elements (i.e., classes, structs, methods, properties, etc.) where the latter is for blocks. I'm glad to see that someone is actually using
<pre> though! <br />
<br />
<div style="width: 100%; font-size: 2px; margin-bottom: -10px; background-color: rgba(255, 153, 0, 1)"> </div><br />
Microsoft MVP, Visual C#<br />
<a href="http://www.codeproject.com/script/articles/list_articles.asp?userid=46969">My Articles</a>
|
|
|
|
|
I'm writing a program that needs to list all network interfaces in the computer and detects their speed. I tried performance counter related classes in Diagnosis namespace, but many unexpected problems occured.
can someone tell me how to do it right? any advice appreciated.
|
|
|
|