|
Simple question: Why
HKEY_CLASSES_ROOT\\[^\\]*
regex matches following strings:
HKEY_CLASSES_ROOT\.123\OpenWithProgIDs ,
HKEY_CLASSES_ROOT\.ac3\OpenWithList\CTCMSu.exe
I want to get only direct subkeys of HKEY_CLASSES_ROOT, that is:
HKEY_CLASSES_ROOT\.ac3 and HKEY_CLASSES_ROOT\.123 .
I use Regex.IsMatch instance method with IgnoreCase option.
Help!
Thanks
Greetings - Gajatko
|
|
|
|
|
Gajatko,
Rather than using a regular expression, why don't you use the method build into the framework.
//The parent key you want to look at.
RegistryKey rk = Registry.CurrentUser.OpenSubKey("Software");
//All the first level children of the parent key in a string array.
string[] allSubKeys = rk.GetSubKeyNames();
Hogan
|
|
|
|
|
Your Pattern Seems to be right
I just use your pattern like this and get your desired results
string val
MessageBox.Show(Regex.Match(val, @"HKEY_CLASSES_ROOT\\[^\\]*").ToString());
good luck
|
|
|
|
|
"strange" is a too small word.
I use following code:
bool isMatch = Regex.IsMatch(keyPath);
where (from the Watch , Regex is a variable here):
Regex = {HKEY_CLASSES_ROOT\\[^\\]*}
keyPath = "hkey_classes_root\\.123\\openwithprogids"
isMatch = true
???
Greetings - Gajatko
|
|
|
|
|
String input = @"HKEY_CLASSES_ROOT\.123\OpenWithProgIDs
HKEY_CLASSES_ROOT\.ac3\OpenWithList\CTCMSu.exe";<br><br><br>
Regex r = new System.Text.RegularExpressions.Regex(@"HKEY_CLASSES_ROOT\\(?<subkey>[^\\]*)",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
MatchCollection coll = r.Matches(input);
foreach (Match match in coll)
{
string subKey = match.Groups["subkey"].Value;
Console.WriteLine("subkey = {0}" , subKey);
} This will return you .123 and .ac3 .
Sorry about code layout - having a nightmare with 'code' and 'per' tags
"More functions should disregard input values and just return 12. It would make life easier." - comment posted on WTF
"I haven't spoken to my wife now for 48 hours. I don't like to interrupt her.
|
|
|
|
|
Because it's finding an occurrence of the string you want inside of the string --
HKEY_CLASSES_ROOT\.123\OpenWithProgIDs will match HKEY_CLASSES_ROOT\.123
HKEY_CLASSES_ROOT\.ac3\OpenWithList\CTCMSu.exe will match HKEY_CLASSES_ROOT\.ac3
|
|
|
|
|
So what should I do to get only these matches which apply to a whole string, and not to its substr? Or: How can I check whether it is a substring or entire one?
Greetings - Gajatko
|
|
|
|
|
This is a solution
System.Text.RegularExpressions.Match match = Regex.Match(keyPath);<br />
<br />
return (match.Groups[0].Success && match.Groups[0].Value == keyPath);<br />
Thanks all, especially PhilDanger.
Greetings - Gajatko
|
|
|
|
|
Hi,
I've a COM object, which can only be accessed from same thread as created. Some of the COM-object operations are time consuming. If I create that COM-object on the application thread, sometimes the UI freezes (of course) while the object is working. I would like to create and use that COM-object on diffrent than application thread, but I don't know how to do that.
Of course I now how to create threads and stuff, but I don't know how to keep those threads "alive" while no COM-object work is needed. I tried to create new Thread , start it, create a new Control object and access that thread by Control.Invoke(), but that is not working, 'cause the control seems to know the main application thread and decides to run on the main thread instead of thread where it is initialized.
I also tried to use background worker, but I doubt that when worker.RunWorkerAsync() method is called, it runs always on same the thread. It does when I have a simple application, but if there were some other multi threading operation's (in the same application) i thing they would probably use the thread used by background worker(when not working) so the background worker would take other not-used thread from thread pool(if needed) and the COM-object won't work on other thread than the one on which it was created.
I hope I made myself clear enough
thanx for help
|
|
|
|
|
Have you think to use delegates? Maybe it's your solution.
Visit my blog at http://dotnetforeveryone.blogspot.com/
|
|
|
|
|
stop spamming
|
|
|
|
|
I suggest you create a class to encapsulate all operations on that COM object.
Your class can then create a real Thread object (not a BackgroundWorker or ThreadPool thread)
and use that over and over for all the COM operations. You may need to apply some
locking too.
If your program has an [MTAThread] attribute, you may need to set the thread's
ApartmentState to ApartmentState.STA explicitly. I don't recall all the details here.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/AllLanguages/General
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
Thanx,
I'm working on in...
deadlocks... )
|
|
|
|
|
Background:
My app has a layer that fetches objects and stores them in a cache (own implementation). All items are identified by the signature and params of the calling method. This works pretty well. The gui layer uses data binding to bind those cached objects to the controls. If a form ist closed, the user can save or cancel all changes.
Problem:
The data binding automatically changes the objects that are referenced by the gui AND the cache - even if the user cancels the changes... So the object in the cache is accidentally changed, too. My first idea would be to return only copies of the objects (new references), but how to create a "stand-alone" copy of unknown objects?
Any suggestions?
thx in advance
glFrustum
|
|
|
|
|
Take a look at the Memento pattern for these objects.
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
Thanks for the quick response. Using memento would be a better design, but right now I'm looking for a solution that can be applied to the cache itself and not everywhere it is used.
|
|
|
|
|
Theoretically, you could make the cache use the Memento pattern - without seeing your implementation, it's hard to say, but you could have:
public class Cache
{
private List<IMemento> _cache = new List<IMemento>
public void AddToCache<T>(T cacheItem)
{
_cache.Add(new MementoCache(cacheItem));
}
public T CancelChanges<T>(T cacheItem)
{
T item = _cache[...];
_cache.Remove(...);
return item;
}
internal class CacheMemento : IMemento
{
public void AddToCache<T>(T cacheItem)
{
}
}
} I'm just doing this off the top of my head, so I apologise that it's rough and needs to be tidied up.
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
Hello everyone,
If I am using Visual Studio 2005 to build a C# Class Library (COM), it is as default dependent on .Net Runtime Framework 2.0 when running?
If I am using Visual Studio 2003 to build a C# Class Library (COM), it is as default dependent on .Net Runtime Framework 1.1 when running?
How to check the .Net Framework Runtime dependencies when using Visual Studio?
thanks in advance,
George
|
|
|
|
|
The answer to both is obviously yes, as they in C#
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Thanks Christian,
I want to confirm that when using Visual Studio 2005 to build a C# Class Library, the generated assembly Class Library is dependent on .Net 2.0? And for the same case, Class Library generated by Visual Studio 2003 is dependent on .Net 1.1? Could you help to confirm again?
Are thre any ways to change the hard-coded dependencies? For example, in Visual Studio 2005, I could make a C# Class Library which is dependent on .Net 1.1?
regards,
George
|
|
|
|
|
|
Thanks Hessam,
It seems that binary code for .Net 2.0 is not compatible with .Net 1.1? And it is why users need to make build for .Net 1.1 in VS 2005 (so that Microsoft provides MsBee)?
regards,
George
|
|
|
|
|
In the software on which i am working there is module just like Microsoft outlook i.e a user can configure its mail id and can download his mails in software.
What my problem is while downloading mails:-
If content is plain text then its all OK,
But if its colour text or having different encoding then its shows tags(related to colour, text size).
means look messed up.
So, how can i overcome this, so that mails display correct?
|
|
|
|
|
I think it happens because the body of those mails are HTML so why you don't use the WebBrowser Control for showing them.
it can show both plain text and HTML
|
|
|
|
|
hello friends
can anybody tell me how to convert the .nt 2005 to 2003 version can it
be possible plzzzz reply
|
|
|
|