|
Thanks Nick.
But I need to build that as DLL. If I build the DLL how do I deploy the config file with the DLL. Where should we put the config file?
Also, the link talks about only in the constrcutor of the program like below
public Books() {
this.Url = ConfigurationSettings.AppSettings["WebServicesUrl"]
}
but how do we replace the name, namespace values before the method call like below
[System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="http://33.83.76.254/MyValidation", ResponseNamespace="http://33.83.76.254/MyValidation")]
[return: System.Xml.Serialization.SoapElementAttribute("responseXml")]
public string myvalidate(string s1, string s2)
{
Thanks,
JMC
|
|
|
|
|
The code you are looking at is simply a proxy that was generated from wsdl pointing to your web service. The proxy is what talks to the web service and returns the values to you. You can deply the config file right along with your assembly, within the same directory. The problem is that attributes must be a connstant expression, in other words you can't set thier values by an inline method call or in your case, pointing to the AppSettings to gain dynamic values at runtime. If you read through the comments in that link I sent you, Peter Cook suggest that you set the web reference to dynamic rather than static thus allowing Visual Studio .NET to handle this for you.
- Nick Parker My Blog | My Articles
|
|
|
|
|
Hi, I need to check the status of WMI services (running, stopped, or disabled) on a local computer, using System.Management classes in .NET. If anyone knows please update this.
Thank you.
Thank you
Silver Bullet
|
|
|
|
|
If WMI isn't running, you can't use WMI to check the status of itself. The best way is to use the ServiceController like so:
ServiceController sc = new ServiceController("winmgmt");
if (sc.Status != ServiceControllerStatus.Running)
sc.Start();
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I have made a report using crystal reports.net. I am using a MDB file as my datasource. When I close the form that displays my report, the report is not disconnecting from the datasource. What do I need to do to disconnect the report from it's datasource.
Thanks.
|
|
|
|
|
Use a DataSet as the data source. Fill your DataSet with what you need from the Jet database (MDB) and pass it to SetDataSource . In the Cyrstal Reports designer, you can bind against a DataSet but it helps to use a typed DataSet , which xsd.exe or the DataSet designer in VS.NET can do easily.
If you have a view, table, or tables that you want to fill the DataSet with, connect the Jet database in the Server Explorer, browse to the view or table(s), and drag and drop them into a new DataSet item you can add to your project. This will create the necessary elements for you.
Then in the Crystal Reports designer, you can add a reference to that typed DataSet and design your report as you would normally.
This makes for a good disconnected architecture since it doesn't matter from where that data is obtained (could be a Jet database, SQL Server, Oracle, an XML file, etc.).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
hi,
does anybody know how i can scan and/or log in a file, that e.g. for all 5 seconds or when a window opens, it would be logged in a file, which windows are opened?(the title of the window or something else) i need this mechanism for usability tests.
i hope someone can help me.
thanks in advance
yours sincerely
patrick
|
|
|
|
|
i know can also be not a C# specific question but it anybody knows a solution with c# it would be c#-specific. the best case were if anybody know a tool with which i can solve the quoted problem??
thanks in advance.
patrick
|
|
|
|
|
Enumerating the top-level windows is easy: P/Invoke the EnumWindows native API:
[DllImport("user32.dll")]
private static extern bool EnumWindows(EnumWindowsProc proc, IntPtr lParam);
private delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern IntPtr GetWindowText(IntPtr hWnd,
[Out] string title, IntPtr maxCount);
public void EnumWindows()
{
EnumWindows(new EnumWindowsProc(Callback), IntPtr.Zero);
}
private bool Callback(IntPtr hWnd, IntPtr lParam)
{
string title = new string('\0', 260);
if (GetWindowText(hWnd, title, 260) != IntPtr.Zero)
Log(string.Format("{0:x8}: {1}", hWnd, title);
} If instead of windows you want to enumerate all running processes (and perhaps filter those that do not have application windows), you can use Process.GetProcesses and, optionally, check if Process.MainWindowHandle is IntPtr.Zero (not graphical).
Responding when a window opens is a bit more tricky. You must efficiently implement a Windows hook and handle the WH_CBT (0x05) message. This message is documented in the Platform SDK along with related APIs like SetWindowsHookEx . The callback (CBTProc ) is called whenever a window is about to be activated, created, destroyed, minimized, maximized, moved, or resized (so you'll need to filter these appropriately based on your needs).
You can read more about implementing windows hooks in .NET (using the C# language) by reading Using Hooks from C#[^] here on this site. Any questions specific to this article should be directed to the article's message board at the bottom of the page.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
hello,
thank you for your reply, unfortunately i do not really know what you mean with your solution, although i thought i have good experience in c#, ado.net, asp.net, etc.
the situation is as follows: i want to log the events on a PDA (DELL AXIM X30 Windows Mobile 2003, Second Edition, .NET Compact Framework), like when a user makes an entry in the time planner,..etc. So it should be recorded if a window opens, respectively what window opens, etc.
is this possible with your idea? - and can you probably explain me your solution in a simpler way? i also read the article "Using hooks from c#" but i do also not look through it.
i hope you can help me once more, because i would need this for a Thesis (diploma).
thanks in advance.
yours sincerely
patrick
|
|
|
|
|
The EnumWindows function is a native function in Windows, you must P/Invoke it in order to call it directly in managed code. What exactly don't you understand about Heath's response, it's seems rather clear to me but if you could be more specific we would be able to help you. What he suggested will work, however I would recommend you read further about Windows hooks so you can understand the concept trying to be relayed here.
- Nick Parker My Blog | My Articles
|
|
|
|
|
hello,
yes i also think it should be better when i read further about windows hooks. do you know some good literature? and when this solution also works on a PDA this would be outstandig!! - because i search for a long time for a solution for that problem.
what do you mean with P/Invoke? - Can I take over otherwise the code in that way?
yours sincerely
patrick
|
|
|
|
|
One of the best articles I have seen is Win32 Hooks[^], however there are other articles on CP that cover this as well, do a search and read them all to get a good feel for the subject. P/Invoke is described with an example here[^].
- Nick Parker My Blog | My Articles
|
|
|
|
|
Hello,
Thank you for the references and i already read the articles and i try to reflect my thoughts - i hope they are right?
With the P/Invoke - the DLLImport i can change methods of a Dll-File, but do i need this mechanism when i use hooks? - i don't think so.
With Windows Hooks the events will be recognized before they will be executed in the application and so can be logged.
I think for my problem i need the WH_CBT Hook and the HCBT_ACTIVATE,
HCBT_CREATEWND, HCBT_DESTROYWND, HCBT_MINMAX, HCBT_MOVESIZE, HCBT_SYSCOMMAND.
With these hooks i can log when a window opens (whereby i do not exactly know the difference between activate and createwnd), a window closes, a window minimizes or maximises and when a command executes.
But now if my thoughts are right i miss the practical relation to the c# and how i can implement that.
i hope you can give me further help.
thanks in advance.
yours sincerely,
patrick
PS: I hope you know that it still concern the event logging of the PDA, where Windows Mobile 2003, Second Edition and the .NET Compact Framework is installed. I thought this method with logging the open windows and so on is the best way to know what the user do with the PDA, because that is what i want to know and this should be logged in any wise.
|
|
|
|
|
Don't you have any further tipps?
yours sincerely
patrick
|
|
|
|
|
hello,
I have spoken with an experienced developer and he was critical about the Windows Hooks on the PDA.
as i said i need this solution for a PDA (the DELL AXIM X30, Windows Mobile 2003, Second Edition;.NET Compact Framework).
Does this solution with the Hooks also work on this PDA???
yours sincerely
patrick
|
|
|
|
|
I was a little confused by your question before. No, SetWindowsHookEx is not supported on Windows Mobile, though it would be in Windows XP Embedded (but that isn't what PocketPC's run on).
EnumWindows is supported, however. Just use a Timer class (there's three in the .NET BCL to choose from, but check to make sure which ones are supported in the .NET CF) and poll for Windows. If you need to know which windows are new, keep track of existing windows in a list (like ArrayList ) or dictionary (like Hashtable ) and compare with the new list you'll obtain.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Yes, i first ask generally about a method to log open windows, etc. and i thought i can take this method also for windows mobile 2003 SE.
That's not good i have already read a lot about windows hooks, that's a pity that windows mobile 2003 SE don't support that.
So there is no chance to log on a PocketPC when a Window opens, destroys or a command in the window executes?
Have you got more exactly details about your solution you quoted in the previous posting?
thanks in advance.
yours sincerely,
patrick
|
|
|
|
|
I gave you the code already to enumerate windows. Just add a Timer class to your code and hook-up the appropriate event handler depending on which Timer class you use (make sure you use one supported by the .NET CF). In the handler is where you enumerate the Windows and do whatever else you need to. Make sure your timer interval is long enough that you don't have overlap when enumerating windows, otherwise you'll be a bottleneck in the system (every 5 seconds should be more than adequate).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
hello,
thanks first of all for all your information!
okay i looked in the MSDN for the Timer Class and for every method it is noted if the method is supported by the .NET Compact Framework. Unfortunately at the two events tick and dispose nothing is noted - if there are supported or not...?
If the tick-event is supported by the .NET Compact Framework i would probably write the code in that way:
public class Class1 {
static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
private static void TimerEventProcessor(Object myObject,
EventArgs myEventArgs) {
myTimer.Enabled = true;
[llImport("user32.dll")]
private static extern bool EnumWindows(EnumWindowsProc proc, IntPtr lParam);
private delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern IntPtr GetWindowText(IntPtr hWnd,
[Out] string title, IntPtr maxCount);
public void EnumWindows()
{
EnumWindows(new EnumWindowsProc(Callback), IntPtr.Zero);
}
private bool Callback(IntPtr hWnd, IntPtr lParam)
{
string title = new string('\0', 260);
if (GetWindowText(hWnd, title, 260)!= IntPtr.Zero)
Log(string.Format("{0:x8}: {1}", hWnd, title);
...//and here i want to save the titles of the windows in a file, do i have do consider certain things? - because when more windows are open the string title has more values one time the enumWindows-method counts the open windows?
}
}
public static int Main() {
myTimer.Tick += new EventHandler(TimerEventProcessor);
myTimer.Interval = 5000;
myTimer.Start();
Application.DoEvents();
}
return 0;
}
It would be nice if you can give me feedback to this code-fragment?
thanks in advance.
yours sincerely,
patrick
|
|
|
|
|
If ".NET Compact Framework" is not listed in the support section, then it's not supported. Use the System.Threading.Timer class instead (which takes a callback and you'll need to set it up each time - see the example).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Strange, because i already use the System.Threading.Timer - class. But appearant the tick-event is really not supported bei the CF. the only event founded which supports the CF is the dispose-event, but no example for it. Sorry but there is no example for the use of the dispose-event? - is it the same way as the tick event? - I hope i do not nerve you, but with this dispose event i do not really look through it....?
yours sincerely
patrick
|
|
|
|
|
No, actually according to the code you posted you're using the System.Windows.Forms.Timer class. Like I said, there's three Timer classes.
You have to understand that the .NET CF (Compact Framework) is slimmed-down to fit on a standard PocketPC. It lacks a lot of things that the .NET Framework for a non-Windows Mobile would have.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
hello,
i know the that the .NET CF is a slimmed-down version of the .NET Framework. I found something with the callback and delegate at http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemthreadingtimerclasstopic.asp.
I have to look at this exactly because for know i do not look through it how it works with the example on this site and the delegate and callback and AutoResetEvent, etc..
yours sincerely
patrick
|
|
|
|
|
Yes - that's the URL for the System.Threading.Timer class I've mentioned twice. It's the only one fully supported by the .NET CF.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|