|
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.
|
|
|
|
|
Um, why don't you tell us what problems occured. Exception messages, incorrect behavior versus expected behavior, and stuff like that. Ever try to provide support to someone saying only "I have a problem"?
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
First, I don't know the correct way to enumerate network interfaces on a computer, so I used existing performance counters, and calculate the network speed in a brute forcing manner. One problem is that a "MS TCP loopback interface" exists on every computer.
I gave my program to some friends, and they told me it won't work with dial up network and some ADSL network, so I don't know the exact exception message.
|
|
|
|
|
Then why don't you ask them.
Something else you should look into is WMI, which uses the System.Management namespace for classes in .NET. There is a Win32_NetworkAdapter WMI class that allows you to get all the information for adapters. Even my WAN interfaces show up when querying the class for instances. You can use the mgmtclassgen.exe utility that comes with the .NET Framework SDK to generate a class file (not an assembly like the interop utilities do), or download and install the WMI Extensions for Visual Studio .NET 2002[^], which allows you to browse all the classes and even generate source files in your project.
For more information, look up the System.Management namespace in your help documentation for the .NET Framework SDK (or the Visual Studio Combined Collection), or read the following article, System.Management Lets You Take Advantage of WMI APIs within Managed Code[^].
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
|
Does anyone know what's the best way to determine if a web service is available before you consume it each time?? For example, if anapplication can be used when it is either connected or disconnected. When it is disconnected, what error handling should be done? please show me a sample code.
Thank you.
Boo
|
|
|
|
|
When instantiating the proxy class in your local app and calling a method, just put it in a try-catch block and catch exceptions. It is not the proxy's responsibility to connect the client machine, merely to marshal data and send it across the wire. An exception will be thrown when you instantiate the proxy class.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I wanted to make sure the methods are available before calling any.
This is what I did, do you think it's good enough?
wsABC = new SomeWebService.Service();
try
{
WebRequest myRequest = WebRequest.Create(wsABC.Url);
WebResponse myResponse = myRequest.GetResponse();
}
catch (WebException ex)
{
if(ex.Status != WebExceptionStatus.Success)
{
String ExMsg="Exception Code : "+ ex.Status.ToString() + "\n" + "Exception Description : "+ ex.Message);
MessageBox.Show(ExMsg);
}
}
Thanks,
Boo
|
|
|
|
|
You wouldn't even necessarily have to display an error if all you were doing is checking the connection, although you should always wrap your remote requests in a try-catch in case an error does happen. You should display a more user-friendly error, though. Taking this into account, why even bother to check the connection before hand? Just run the method. If it doesn't work, you display an error. Even if you were connected and for some reason the web service can't respond, doesn't respond correctly, or a myriad of other errors, you still want to display an error (or react accordingly).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Oh, that was just a sample I'm working on. I don't think I'll show the error in the actual app. and I do plan on using the try and catch each time calling the methods.
The reason I wanted to make sure there is a connection is that if the app is used offline, it does different thing and won't allow to call any of the webservice's methods anymore.
As far as handling other errors from the webservices, it's a different issue.
Thank you for your advice. =)
Boo
|
|
|
|
|
hi,
i have a datagrid bound on a dataset which i fill whith a method running in a threadpool. showed simple:
<br />
private void begin(object sender, System.EventArgs e)<br />
{<br />
ThreadPool.QueueUserWorkItem( new WaitCallback( work ) );<br />
}<br />
<br />
public void work( object n )<br />
{<br />
for ( int i = 0; i < 20; i++)<br />
{<br />
lock(this)<br />
{<br />
DataLayer.add( i );<br />
}<br />
}<br />
}<br />
after 3 items or when the thread ends the programm hangs or im getting a exeption on Appliaction.Run(). how can i do that without a programm crash?
i have read on MSDN DataSet doc "You must synchronize any write operations" but it seems the to be the datagrid? i also have tryed a workaround whit delegates, events and a static adding but same problems here.
i can't find the problem, i think i know not enough about this threadsave stuff. any idea how to do that, or is it simply not possible to fill a datagrid from a thread?
|
|
|
|
|
Two things, you should synchronize any writes by either using the lock keyword in C# (type it in your help index to learn more about it) or some other class in System.Thread (lock aliases the Monitor class).
Second, when you modify the UI in most cases, you should invoke the method on the control using Invoke , which is inheritted by all controls from the Control class. There's a nift InvokeRequired that you can use to determine if you can call the method directly or if you need to have the control invoke it from its creation thread.
Every control is created on a thread and all changes to that control (at least, that which would be reflected in the underlying native Windows control) need to be invoked on that thread.
Read the docs for the Control.Invoke and Control.InvokeRequired in the .NET Framework SDK for more information and examples of how to use them.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
lock + begininvoke works great now, thanks a lot!
unbelivable that the solution is so easy...
|
|
|
|
|
Hi,
I have the next case :
string s1 = "00001The Code Project Struct";
Also,
struct Datax
{
public string Code;
public string Desc;
public string Referencia;
}
It's posible casting "s1" inside "struct" Datax???????
Sorry, for my english.
Saludos.
Rbarzallo
|
|
|
|